让你实现一个分布式单例对象,如何实现?

Sherwin.Wei Lv7

让你实现一个分布式单例对象,如何实现?

所谓的单例一般指的是一个进程中一个类对应只有一个实例对象,也就是进程唯一。

而分布式,不过是一个机器部署多个服务,还是多个机器部署,本质上就是多进程,所以所谓的分布式单例指的是这个实例对应需要在多进程中保持唯一。

按照这个思路,我们仅需控制同一时刻,只会有一个进程使用这个单例对象即可,而分布式场景下的分布式锁就很容易实现这个功能。

多个进程竞争分布式锁,谁抢到锁,谁此时就可以使用这个单例对象,用完之后释放这个对象,并且释放锁,这样不就保证多进程中实例对象唯一了吗?

所以,我们需要在三方外部存储这个单例对象,每次进程用完单例对象后,再将对象的数据写回外部存储中,这样就能保证多个进程对这个单例对象的修改都同步,状态一致。

分布式锁可以用 redis 实现,三方外部存储也可以用 redis 实现。

总结下:每个进程使用这个类的时候,争抢分布式锁,如果抢到则从 redis 获取这个数据,反序列化成一个对象使用,使用完之后,将对象数据再序列化存储到 redis 中,覆盖之前的数据,最终释放锁。

Comments
On this page
让你实现一个分布式单例对象,如何实现?