开发者学堂课程【精通 Spring Cloud Alibaba:简单回顾 Zab 协议集群模式原理】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/634/detail/10103
简单回顾 Zab 协议集群模式原理
内容简介:
一、分布式系统一致性
二、ZAP 的协议实现原理
一、分布式系统一致性
我们在分布式系统,存在多个系统之间集群保持数据一致性,采用 CP 一致性算法保持数据的一致性的问题。
Zookeeper 基于 ZAP 协议实现保持每个节点的数据同步的问题,中心化思想集群模式:分为领导和跟随者角色。
以 Zookeeper 举例;
在 Zookeeper 集群当中,一般我们如何选择哪一个 Zookeeper 节点作为领导者,能使用 leader 的节点能力肯定是比较强的。
(1)在程序中如何成为某个节点能力比较强的:
1.对每一个节点配置一个 myid 或者 serverid 还有数值越大表示能力越强:
就如下图中的每一个 Zookeeper 都有对应的 id,id 名也不一致,而配置 myid 的目的是为了观察哪一个 myid 最大,哪一个对应的节点就是引领者,这是他的基本思想,才能区分节点,能让这个节点较为突出,一般常见的算法所标记的节点能力强。
2.随机时间,时间越短,节点能力越强:
第一种方式也存在一定的缺点,它对于开发者来说是很麻烦的,因为在上述情况下,每一个节点都需要配置一个 myid,所以就可以采用随机时间,它是动态化的,不是写死。
(2)过半机制
整个集群中为了保持数据的一致性的问题,必须满足大多数情况>n/2+1 可运行的节点,环境才能使用。
三台 Zookeeper 是一个集群,我们在运行过程中是如何实现集群的?
现假设已经安装了一个非常纯洁干净的 Zookeeper,那么在左边第一个 Zookeeper启动之后,右边两个并未启动,这整个 Zookeeper 是不能启动,不能访问的,
现在在上述前提下启动 Zookeeper2,它的 myid 是等于2,那么通过比较和左边第一个的 myid 可以得到 myid 等于2的节点能力较强,在这个过程中会进行投票由于myid=1>myid=0,
所以 myid=0的那一票会给 myid=1,所以选择 myid=1的节点为领导角色。
并且现在可用的节点数为2,满足过半机制,所以现在这整个集群是可以运行的。
在上述启动 Zookeeper2并选择它为领导角色之后,在启动 Zookeeper3,此时的myid=2,不会在选择 myid=2的节点为领导角色,因为后面在启动的节点不能再参加选举。
这个环境是不能使用的,所以在这种情况下它 myid=1一定是领导者,而剩下的两个的节点就是他的追随者。
二、ZAP 的协议实现原理
ZAP 的协议实现原理是通过比较 myid,myid 谁最大谁就是为可能是领导角色,只要满足过半机制就可以成为领导角色,后来启动的节点不会参与选举的。