Zookeeper(分布式应用程序协调服务)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 1.简述 zookeeper,动物园管理者,动物饲养员。以下简称zk。 它是一个分布式一致性解决方案,为分布式应用提供分布式协调服务。 它开源、强大,得到了广泛的应用。Haddop,Storm都已经将zk作为核心组件,用于分布式协调。 2.集群角色 Leader,为客户端提供读写服务。Follower, 提供读服务,参与lerder选举。 Observer,只提供读服务。

1.简述

zookeeper,动物园管理者,动物饲养员。以下简称zk。
它是一个分布式一致性解决方案, 为分布式应用提供分布式协调服务
它开源、强大,得到了广泛的应用。Haddop,Storm都已经将zk作为核心组件,用于分布式协调。

2.集群角色

Leader,为客户端提供读写服务。

Follower, 提供读服务,参与lerder选举。

Observer,只提供读服务。

每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻;
LEADING:当前Server即为选举出来的leader;
FOLLOWING:leader已经选举出来,当前Server与之同步。

3.功能

数据节点。ZooKeeper将所有数据存储在内存中,数据结构是一个树(ZNode Tree)。
会话。zk对外服务的默认端口是2181,客户端会与它建立长连接。
事件监听器。Watcher是zk的重要特性。用户可以在指定节点上注册一些watcher,当指定的事件触发后,用户得到通知。

4.ZAB协议

ZAB,Zookeeper Atomic Broadcast,zk原子广播。
zk并没有用Paxos算法,用的是自己的zkb。
主要思想是这样的。所有事务请求必须由leader协调。leader负责将客户端的事务请求转换为proposal,分发给所有follower,若超过半数的follower给出正确反馈,则leaser再向所有的follower发送commit消息。

4.1 zxid

ZooKeeper每一次的状态改变, 都对应着一个递增的Transaction id, 称为zxid。由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定早于zxid2发生。

对任意节点的增、删、改操作, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加。

实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

5.Leader选举

通过投票来选举。投票是广播行为,投票格式为<sid,zxid>。

5.1投票变更策略

在没有leader或leader挂了之后,follower会将角色变更为looking,然后开始选举。
第一轮,大家都投自己。对于接收到的投票,采取如下whetherAccept()策略:

boolean whetherAccept(Vote vote){
	if(vote.zxid>zxid)
		return true;
	if(vote.zxid==zxid&&vote.sid>sid)
		return true;
	return false;
}
若返回true,认可该投票并广播。其他情况都坚持自己原有的投票。

5.2 统计投票

每轮投票结束后,开始统计得票。如果一台机器收到了超过半数的相同投票,记为voteA,那么voteA.sid即为新的leader。

6.过半存活即可用

一个zk集群如果要对外提供服务,那么集群中必须要有过半的机器正常 工作且彼此之间通信正常。即“过半存活即可用”。

:选leader时也用到了过半的思想,那么机器部署必须为奇数台么?

:不是这样。根据leader选举策略,任意台都是可以的。

:为什么推荐集群中的机器数为奇数个?

:这是出于节省成本的考虑。因为“过半存活才可用”的思想,你部署 了10台,挂掉5台就不能用了。而你部署9台,也是挂掉5台就不能用了。


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
25天前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
55 3
|
22天前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
30天前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
40 2
|
30天前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
42 1
|
2月前
|
存储 NoSQL Java
分布式session-SpringSession的应用
Spring Session 提供了一种创建和管理 Servlet HttpSession 的方案,默认使用外置 Redis 存储 Session 数据,解决了 Session 共享问题。其特性包括:API 及实现用于管理用户会话、以应用容器中性方式替换 HttpSession、简化集群会话支持、管理单个浏览器实例中的多个用户会话以及通过 headers 提供会话 ID 以使用 RESTful API。Spring Session 通过 SessionRepositoryFilter 实现,拦截请求并转换 request 和 response 对象,从而实现 Session 的创建与管理。
分布式session-SpringSession的应用
|
2月前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
74 3
|
30天前
|
缓存 网络协议 API
分布式系统应用之服务发现!
分布式系统应用之服务发现!
|
30天前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
43 0
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1

热门文章

最新文章