• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了

    在分布式的应用中,为了防止单点故障,保障高可用,通常会采用主从结构,当主节点挂掉后,从节点可以代替主节点提供服务。

    Redis通过复制 + sentinel哨兵来实现主从模式。

    Zookeeper通过replicated mode复制模式来实现主从模式。

    单从结构上看,Redis和Zookeeper都是主从架构,那Zookeeper的优势是什么?为什么要选择Zookeeper?难道只是因为Zookeeper是目录结构,Redis是K-V结构吗?

    同步机制的不同

    Redis

    Redis在给从节点同步数据时,正常情况是增量同步,也就是主节点的数据修改语句(DML)会异步的同步给从节点。Redis的数据同步没有保障数据一致性的机制,也就是说,一条DML在主节点执行成功时,不能保障其他从节点成功执行了这条数据,这就会造成一个问题,如果在数据没有同步到从节点时,主节点挂掉,就会产生数据丢失的情况。

    Zookeeper

    Zookeeper使用类paxos算法来保障数据的一致性。简单的讲,当一个DML语句发送给主节点时,Zookeeper需要保证一半以上的节点接收到数据,才会返回成功。并且当主节点挂掉,从节点重新选举时,同步到最新的数据的节点会有优先选举权。

    举个例子:

    一个4节点Zookeeper(A、B、C、D),A是主节点,当执行一个create语句成功时,至少有3台节点执行成功(一半以上),例如A、C、D成功。此时如果A节点挂了,B、C、D进行选举,由于C、D都执行成功了create语句,B没有执行,C、D的数据更加新,具有优先选举权,再根据名称排序,选择C做为主节点。在整个选举过程中,服务不可用,选举完成后,C节点和A节点数据一致,不会出现丢失的情况。

    分布式锁

    要实现分布式锁,需要满足一些要求:

    Redis解决方案

    问题1、问题2:使用“SET key value EX seconds NX”语句获取锁并设置过期时间

    问题3:另开一个监控线程,监控主线程执行情况,用来延长过期时间

    问题4:等待线程定时检查锁的持有情况

    问题5:暂无或者解决成本很高,需要自己实现类paxos的算法

    Zookeeper解决方案

    通过创建临时节点可以解决问题1,2,3

    watch机制可以解决问题4,并且相比定时检查,watch可以做到更高实时性

    zookeeper的paxos同步机制保障了节点间数据一致性,即使主节点挂掉,也可以保障数据不丢,可以解决问题5

    对比可以发现:

    Zookeeper的机制可以保证分布式锁实现业务代码简单,成本低。

    Redis如果要解决分布式锁的问题,对于一些复杂的情况,很难解决,成本较高。

    以上就是分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了的详细内容,更多关于分布式锁Zookeeper Redis的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • C# 实现Zookeeper分布式锁的参考示例
    • ZooKeeper 实现分布式锁的方法示例
    • 浅谈Java(SpringBoot)基于zookeeper的分布式锁实现
    • 浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)
    • zookeeper实现分布式锁
    • 如何操作Redis和zookeeper实现分布式锁
    • java使用zookeeper实现的分布式锁示例
    • 分析ZooKeeper分布式锁的实现
    上一篇:Redis 配置文件重要属性的具体使用
    下一篇:redis分布式锁之可重入锁的实现代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了 分布式,锁,为什么,要,选择,