我们看了下依然丝滑,源码我就不分析了,感兴趣的可以看我同事的博客 Curator的ZK分布式锁实现原理。
总结zookeeper 天生设计定位就是分布式协调,强一致性,锁很健壮 。如果获取不到锁,只需要添加一个监听器就可以了,不用一直轮询,性能消耗较小 。缺点: 在高请求高并发下,系统疯狂的加锁释放锁,最后 zk 承受不住这么大的压力可能会存在宕机的风险 。
在这里简单的提一下,zk 锁性能比 redis 低的原因:zk 中的角色分为 leader,flower,每次写请求只能请求 leader,leader 会把写请求广播到所有 flower,如果 flower 都成功才会提交给 leader,其实这里相当于一个 2PC 的过程 。在加锁的时候是一个写请求,当写请求很多时,zk 会有很大的压力,最后导致服务器响应很慢 。redis 锁实现简单,理解逻辑简单,性能好,可以支撑高并发的获取、释放锁操作 。缺点: Redis 容易单点故障,集群部署,并不是强一致性的,锁的不够健壮; key 的过期时间设置多少不明确,只能根据实际情况调整;需要自己不断去尝试获取锁,比较消耗性能 。
最后不管 redis 还是 zookeeper,它们都应满足分布式锁的特性:
- 具备可重入特性(已经获得锁的线程在执行的过程中不需要再次获得锁)
- 异常或者超时自动删除,避免死锁
- 互斥(在分布式环境下同一时刻只能被单个线程获取)
- 分布式环境下高性能、高可用、容错机制
作者:jack_xu
链接:https://juejin.im/post/5ee227b46fb9a047a86237cf
来源:掘金
【这几种常见的“分布式锁”写法,搞懂再也不怕面试官,安排】
推荐阅读
- 电脑的辐射
- 怎么消除紧张
- 常见的花茶价格介绍,勿忘我花茶的价格勿忘我花茶的泡法
- 女人不管出门多赶,尽量化淡妆!记住这3个窍门,简单易学显气色
- 不要随意触摸车内这四个按钮,否则会有车辆损坏和人员死亡的危险
- 常见草莓的区别和吃法
- 为什么语音里自己的声音能这么难听?
- 家常炒拉面有技巧,这样做比面馆都好吃还不油腻,食材多,真营养
- 修水龙头是什么梗?
- 年底想体检,却不知道查什么?这份千元以下的体检清单请收好
