一、基于redis分布式锁设计
1、实现方式:setnx key value expire time
2、存在问题:
a、单实例:高可用不能满足
b、主从:主加锁后,尚未同步到从,主宕机,锁不存在,会出现重复加锁问题
3、官方建议:使用redlock算法来保证,利用多数成功才算加锁成功,需要至少三个redis主从实例来实现,成本较高。
问题本质:分布式锁要求CP模型,redis集群是AP模型!
二、分布式锁要求
1、强一致性
2、服务高可用
3、宕机锁能自动释放,能够续约
4、可视化管理、监控
三、分布式锁方案对比
| redis | zookeeper | etcd | |
| 一致性算法 | 无 | paxos | raft |
| CAP | AP | CP | CP/AP |
| 高可用 | 主从 | 超半数可用 | 超半数可用 |
| 接口类型 | 客户端 | 客户端 | http/grpc |
| 实现 | setnx | createEphemeral临时节点 | restful API |
1、redis无法保证数据一致性
2、zookeeper对锁实现采用:创建临时节点和watch机制,执行效率、扩展能力、社区活跃度低于etcd
3、建议选择etcd实现
本文深入探讨了基于Redis、Zookeeper及Etcd的分布式锁设计方案,对比了各自的优缺点,指出Redis锁的一致性问题,Zookeeper锁的执行效率与扩展性限制,最终推荐使用Etcd实现分布式锁。
1326

被折叠的 条评论
为什么被折叠?



