zookeeper 使用的是zab协议,类似 raft 的 Strong Leader 模式

redis 的哨兵 在  崩溃选举的时候采用的是 raft的那一套term。

因为redis 采用的是异步数据副本的节点同步方式,所以在做分布式锁的时候可能会存在 setNx之后,没有同步到从节点,主节点崩溃,而这时客户端又从从节点读取数据,导致同步锁设置失败(写入都是master节点)。当然作者提供了redLock 在时间内 挨个节点设置锁的形式。具体意思及实现可以参考redssion中的。

反观zk不会出现这个问题,因为zk的主节点节后到请求后,会保证各个从节点数据写入完毕后,返回客户端。

ZAB 协议的消息广播过程使用的是一个原子广播协议,类似一个 二阶段提交过程。对于客户端发送的写请求,全部由 Leader 接收,Leader 将请求封装成一个事务 Proposal,将其发送给所有 Follwer ,然后,根据所有 Follwer 的反馈,如果超过半数成功响应,则执行 commit 操作(先提交自己,再发送 commit 给所有 Follwer)。

当超过半数成功回应,则执行 commit ,同时提交自己。同时每个事物都有一个zxid 还有一个消息队列 解决异步,同时,针对各个节点的数据不一致性问题还有选举过程。

所以,在设置分布式锁的时候需要考虑这点,当然是极高并发的情况下才会出现这种情况。那出现了,就是呵呵。

网上有人说zookpeer的数据一致性协议是从paxos中演化出来的,其实无论raft还是paxos,解决的业务场景都是一样的。

在redis中的主从节点的数据同步应该是也是2PC,如果我没记错的话。

其实现在蚂蚁也出了java办的jraft工具包,但是这些很有意思的,不是吗?

有两篇我觉得写的很好的,redis和zk的相关协议,也是我参考的。

写的很垃圾,后期有,再写,这三篇写的都很好

zab协议:https://www.cnblogs.com/stateis0/p/9062133.html

redis 哨兵 选举:http://weizijun.cn/2015/04/30/Raft%E5%8D%8F%E8%AE%AE%E5%AE%9E%E6%88%98%E4%B9%8BRedis%20Sentinel%E7%9A%84%E9%80%89%E4%B8%BELeader%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/

分布式锁的 : http://weizijun.cn/2016/03/17/%E8%81%8A%E4%B8%80%E8%81%8A%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E7%9A%84%E8%AE%BE%E8%AE%A1/

最新文章

  1. 汇编 int10h(转)
  2. java基础 数组15
  3. 一秒钟看懂SaaS、CRM、OA、ERP、HR、进销存
  4. css的active事件在手机端不生效的解决方法
  5. 如何用极路由+OpenWrt+RTL电视棒搭建一台SDR服务器,并隐秘地捕获和传输数据
  6. Intent官方教程(4)用Intent构造应用选择框
  7. C语言练习:第二大整数
  8. eclipse下使用tomcat启动maven项目
  9. oracle交集,并集,差集
  10. Use AUTO Mode with FOR XML (SQL Server 2012) Multiple Table
  11. 关于手机端CSS Sprite图标定位的一些领悟
  12. ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
  13. ios如何判断键盘是否已经显示
  14. 记录:sea.js和require.js配置 与 性能对比
  15. struts.xml的配置
  16. MVC插件实现
  17. Windows界面设计标准
  18. iOS中关于UIApplication的详细介绍
  19. Asp.NETCore轻松学系列阅读指引目录
  20. web项目错误—Java.util.ConcurrentMidificationException

热门文章

  1. 翻译-在10行代码之内创建容器化的.net core应用
  2. Go net/http 发送常见的 http 请求
  3. 动画 jquery-transit
  4. Fortify漏洞之Access Control: Database(数据越权)
  5. iOS音频学习笔记二:iOS SDK中与音频有关的相关框架
  6. Integer和int踩过的坑
  7. 高性能的js第三方库——lodash、 Underscore、async、md5及moment
  8. java线程分析方法
  9. python程序打包exe
  10. 【Mybatis】缓存