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/

zookpeer 和 redis 集群内一致性协议 及 选举 对比的更多相关文章

  1. Golang 实现 Redis(7): Redis 集群与一致性 Hash

    本文是使用 golang 实现 redis 系列的第七篇, 将介绍如何将单点的缓存服务器扩展为分布式缓存.godis 集群的源码在Github:Godis/cluster 单台服务器的CPU和内存等资 ...

  2. [个人翻译]Redis 集群教程(上)

    官方原文地址:https://redis.io/topics/cluster-tutorial  水平有限,如果您在阅读过程中发现有翻译的不合理的地方,请留言,我会尽快修改,谢谢.        这是 ...

  3. Redis集群方案介绍

    由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法 ...

  4. 深入浅出—Redis集群的相关详解

    前言: 这篇文章主要介绍了Redis集群的相关,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了red ...

  5. Redis集群架构【转载】

    Redis 集群的 TCP 端口(Redis Cluster TCP ports) 每个 Redis 集群节点需要两个 TCP 连接打开.正常的 TCP 端口用来服务客户端,例如 6379,加 100 ...

  6. Redis系列九:redis集群高可用

    Redis集群的概念: RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务挂了可以快速的切换到另外一个服务,当遇到单机内存. ...

  7. Redis 集群方案介绍

    由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法 ...

  8. Redis集群入门

    官方文章: https://redis.io/topics/cluster-tutorial#redis-cluster-configuration-parameters 本文永久地址: https: ...

  9. Redis集群进阶之路

    Redis集群规范 本文档基于Redis 3.X或更高版本,讲解Redis集群算法以及设计原理.此官方文档长期更新且随着Redis新版本特性的变化变动,详细请留意官网. 官网地址:https://re ...

随机推荐

  1. PimaIndiansdiabetes-数据预处理实验(一)

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10859517.html 链接:https:// ...

  2. python3之面向对象编程理解

    面向对象主要有三个特征:封装,继承,多态度. 一.封装 定义类语 class Animal(): class为定义类的关键字,后面跟名字(): python命名规范建议:类一般首字母单词大写,属性变量 ...

  3. JAVA 多线程(一)

    进程和线程 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序,该执行顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元. 线程在控制着进程的执行. 在计算机中多 ...

  4. word中快捷键查看与设定

    很多时候,我们在编辑word文档的时候,为了快速方便都使用快捷键,常用的快捷键大家都知道,但是不常用的是不是就比较懵圈,本文就来告诉你怎么查看与设置word的快捷键. 我使用的word2016 第一步 ...

  5. cdh-hbase用户无法执行命令

  6. 解决服务器openssh漏洞

    解决服务器openssh漏洞 发表于 2019 年 11 月 27 日   1. 检查升级 下载7.4p1 ,链接如下 http://www.openssh.com/portable.html 2.安 ...

  7. 剑指Offer(三十):连续子数组的最大和

    .# 剑指Offer(三十):连续子数组的最大和 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  8. git 在不同服务器主机上同步 git 仓库

    git 在不同服务器主机上同步 git 仓库 参考链接:https://opentechguides.com/how-to/article/git/177/git-sync-repos.html 1. ...

  9. grafna如何用新的dashbord覆盖旧的dashbord

    方式一.import一个和之前不一样的名字,然后删除旧的方式二.浏览器json页面复制粘贴,覆盖旧的dashbord 1.记录旧dashbord的var参数,从旧dashbord的json页面复制全部 ...

  10. 【noi2019集训题1】 脑部进食 期望dp+高斯消元

    题目大意:有n个点,m条有向边,每条边上有一个小写字母. 有一个人从1号点开始在这个图上随机游走,游走过程中他会按顺序记录下走过的边上的字符. 如果在某个时刻,他记录下的字符串中,存在一个子序列和S2 ...