memcache 实现高可用锁

我们知道,通过Memcache的add操作可以实现远程锁的功能,但是,如果Memcache意外down机怎么办?

一半来讲,多机部署是解决思路;那么,锁本来是要集中控制的,分布式如何实现呢?

这里只讨论两台机器部署的情况,不讨论N(N > 2) 的情况;我们认为两台机器同时故障的可能性很小,是可以接受的。

现在有m1和m2两台Memcache的机器,首先去m1申请锁,如果失败(可能是m1宕机了),则再去m2申请锁,似乎是可以的了。

思考:如果有人从m1抢到了锁,然后m1宕机了,后面的人zi自然会去m2抢锁,必然会有一个人能抢到,这时候,一个锁就会被两个人持有了;或许这比两台机器同时宕机的可能性都小,但是,这种情况是可以有解决办法的。

改进:

  1. 首先去m1申请锁
    1. 如果申请到了,则马上去m2上也申请一把锁(如果m2宕机了,就无所谓了)
    2. 如果被别人抢走了,则,啥也不做
    3. 如果m1宕机了,则,可能是在有人抢走锁之后宕机的,也可能是早就宕机了,那么,过20s再去m2上申请锁;
      1. 过 20s的原因:避免A在m1上抢到锁之后m1立即宕机,而B发现m1宕机,却抢在A之前在m2上抢到了锁

虽然逻辑复杂了一些,但是比使用zookeeper是要方便多了

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据