简单回顾 Zab 协议集群模式原理|学习笔记

简介: 快速学习简单回顾 Zab 协议集群模式原理

开发者学堂课程【精通 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 是不能启动,不能访问的,

image.png

现在在上述前提下启动 Zookeeper2,它的 myid 是等于2,那么通过比较和左边第一个的 myid 可以得到 myid 等于2的节点能力较强,在这个过程中会进行投票由于myid=1>myid=0,

所以 myid=0的那一票会给 myid=1,所以选择 myid=1的节点为领导角色。

并且现在可用的节点数为2,满足过半机制,所以现在这整个集群是可以运行的。

图片8.png

在上述启动 Zookeeper2并选择它为领导角色之后,在启动 Zookeeper3,此时的myid=2,不会在选择 myid=2的节点为领导角色,因为后面在启动的节点不能再参加选举。

这个环境是不能使用的,所以在这种情况下它 myid=1一定是领导者,而剩下的两个的节点就是他的追随者。


二、ZAP 的协议实现原理

ZAP 的协议实现原理是通过比较 myid,myid 谁最大谁就是为可能是领导角色,只要满足过半机制就可以成为领导角色,后来启动的节点不会参与选举的。

相关文章
|
Java 数据安全/隐私保护 Sentinel
面试官:Sentinel是如何实现限流的?
面试官:Sentinel是如何实现限流的?
2559 1
|
9月前
|
负载均衡 Java Spring
Feign 和 OpenFeign 有什么区别?
Feign是Netflix开发的声明式HTTP客户端,简化Web服务调用。OpenFeign是Spring Cloud对其的扩展,集成负载均衡、服务发现等组件,提供自动配置,更适用于Spring生态。
725 1
|
消息中间件 缓存 监控
MQ消息积压 / Rocketmq 积压 最全的处理方案。 (秒懂+图解+史上最全)
MQ消息积压 / Rocketmq 积压 最全的处理方案。 (秒懂+图解+史上最全)
MQ消息积压 / Rocketmq 积压 最全的处理方案。 (秒懂+图解+史上最全)
|
11月前
|
人工智能 Cloud Native IDE
超详细!JetBrains Rider 2025.1 安装到能用,激活 + 安装步骤—附安装包
JetBrains Rider 2025.1 是全能型跨平台全栈 IDE,深度集成 AI 编码助手,支持 .NET 9、Unity 2025、Blazor 等最新技术,覆盖 C#、Python、Go 等 20+ 语言,赋能游戏、云原生与微服务开发,实现 AI 辅助生成、调试、测试与文档一体化。
2425 2
|
消息中间件 RocketMQ
如何保证RocketMQ消息有序?
如何保证RocketMQ消息有序?
|
算法 NoSQL Java
springboot整合redis及lua脚本实现接口限流
springboot整合redis及lua脚本实现接口限流
1050 0
|
JSON 前端开发 应用服务中间件
跨域请求(CORS)如何解决?
CORS 全称为(Cross-Origin Resource Sharing:跨站资源共享),跨域请求是由于浏览器的同源策略(Same-Origin Policy)引起的,那么 CORS 的产生和浏览器的同源策略有关系,我们先了解什么是同源策略。
1377 17
|
存储 监控 Cloud Native
最牛逼的性能监控系统,SkyWalking 集强大于一身!
最牛逼的性能监控系统,SkyWalking 集强大于一身!
2500 0
最牛逼的性能监控系统,SkyWalking 集强大于一身!
|
缓存 监控 安全
如何提高 Java 高并发程序的性能?
以下是提升Java高并发程序性能的方法:优化线程池设置,减少锁竞争,使用读写锁和无锁数据结构。利用缓存减少重复计算和数据库查询,并优化数据库操作,采用连接池和分库分表策略。应用异步处理,选择合适的数据结构如`ConcurrentHashMap`。复用对象和资源,使用工具监控性能并定期审查代码,遵循良好编程规范。