读 Paxos 到 ZooKeeper ¥ 50大洋

一  初识 ZooKeeper 

            高效且可靠的分布式协调服务。解决分布式一致性问题

统一命名服务、配置管理服务、分布式锁服务。

使用: 比如配置文件统一,比如通知负载均衡协调。

ZooKeeper 特性:

顺序一致性:  同客户端发起的事物请求,最终将严格的按照其发起顺序被应用到 ZooKeeper 中去。

原子性      :  所有事物的请求处理结果在整个集群中所有机器是一直的。 要么都成功,要么都没有。

单一视图    : 所有客户端看到的数据模型是一致的。

可靠性       : 一旦服务端成功的应用了一个事物,并完成对客户端的响应,那么该事物所引起的状态变会被永久保存。除非更改

实时性        :

ZooKeeper 好的原因:

1    高性能:内存处理 (传输 Netty)

2    构建集群:Watch发送包少。

3    监听强大、Watch 机制。

4    高可用、Leader 选举

ZooKeeper 压力测试:


三节点、五节点、七节点性能效率。

创建100W节点用时:15.0秒。

删除100W节点用时:13.8秒。

设置100W节点用时:90.0秒。

读取100W节点用时:50.5秒。

客户端测试

创建断开。1000节点用时:5.6 秒,全部 watch 成功到达。

方法锁排它锁。

一万次 结果: 66.8 秒,成功。

Watch 监听节点:

1 创建临时节点

2 监听临时节点

3 删除临时节点 产生 Watch - 走 1

一万次 结果: 68.5 秒,成功。

ACL 权限控制,增删改查 和设置 节点 ACL 权限。

ZAB 协议 原子消息广播  同一时刻只有一个主进程来广播服务器状态变更

ZooKeeper 集群角色

1    Leader 处理 所有事物请求,所有写操作,为客户单提供读写服务。

Leader服务器负责将一个客户端请求转换成一个事物(ProPosal ),并将事物分发给所有 Follow 服务器。之后等待 Follow 服务器反馈,一旦超过半数+1进行了反馈,那么Leader会再次向所有Follower 分发 Commit 消息。要求提交。

(SID ZXID) ,先 ZXID , 后比SID。

在新一轮原子广播事物前,一定会先选举Leader。当超过半数进行消息广播、崩溃恢复、

2    Follower 为客户端提供度读服务,写服务/事物请求移交给 Leader。 不参与投票

3    Observer 提供读服务,写服务/事物请求移交给 Leader。 不参与投票

ZooKeeper 会话(Session)

一个客户端连接是指 客户端和服务端一个 TCP 长连接。 ZooKeeper 默认对外端口2181. 客户端与ZK连接时候会声明生命周期。通过 TCP 连接客户端通过心跳检测与服务器保持会话。 还能接受服务器的 Watch 事件通知。 在声明的SessionTimeout 时间内可以断开后重连而不清除数据。

Curator ——ZooKeeper 的更方便的客户端。 (方便监听、分布式锁)使用 Curator 同步分布式。

Barrier 分布式屏障

应用场景为一个队列所有的元素都必须全部到达后方可进行统一安排。

DistributedBarrier.setBarrier() 设置

DistributedBarrier.waitOnBarrier() 等待Barrier释放

DistributedBarrier.removeBarrier() 释放Barrier

DistributedDoubleBarrier.enter() 等待线程达到数量所有成员同时触发进入

DistributedDoubleBarrier.leave() 再次等待所有成员。

ZK 节点特性

PERSISTENT:持久节点

EPHEMERAL:临时节点不允许创建子节点。

SEQUENTIAL:节点名末尾追加一个10位数的单调递增的序号同一个节点的所有子节点序号是单调递增的

PERSISTENT_SEQUENTIAL:持久 且 追加 10位数

EPHEMERAL_SEQUENTIAL: 临时 且 追加 10位数

节点属性:

czxid(Create)    节点被创建时的事物ID

mzxid (Modified)   最后一次被更新的事物ID

ctime                        创建时间

mtime                        修改时间

version                        数据节点版本。

cversion                     子节点版本号

aversion                     节点 ACL 版本号

ephemeralOwner        创建该临时节点的会话的 sessionId。如果是持久节点此为0

dataLength                 数据内容长度

numChildren                当前节点的子节点个数

pxzid                            子节点列表变更通知,(内容不会)

ZooKeeper 事物

Watch 特性总结

1    一次性

一旦一个 Watcher 被触发,ZooKeeper 都会将其从相应的存储中移除。 (需要重复注册Watch)

2    客户端串行执行

因为串行,所以不要因为一个 Watch 的处理逻辑影响整个客户端回调。

3     轻量

通知状态 - KeeperState、事件类型 - EventType、节点路径 - Path 封装成一个 WatchedEvent 对象

Leader 和 Follower 服务器启动交互过程

1    Leader 选举后 创建 Leader 和 Follower 服务器

2    Leader 服务器 启动 Follower 的接收器 LearnerCnxAcceptor

ZK 运行期间,leader 需要与 其他 机器保持连接判断存活情况。

LearnerCnxAcceptor 接收器用于接受所有非 Leader 的连接

3    Learner 服务器开始和 Leader 建立连接

4    Leader 服务器 创建 LearnerHandler

每个 LearnerHandler 实例都对应了一个 Leader 与 Learner 服务器的连接

5    向 Leader 注册

当和 Leader 建立起连接后, Learner 就会开始向 Leader 进行注册。发送自己的基本信息。(SIZ,ZXID)我们称之为 LearnerInfo。

6    Leader 解析Learner 信息,计算新的 epoch

与 Learner 交互解析对应的 ZXID。 如果 Leader 比 Learner 小 则更新 Leader ZXID( 算法过程中有个参数加一 )(SID ZXID 事物最高ID)

LearnerHandler 等待投票。且半数后会第二次催促投票。

7    发送 Leader 状态

计算新的 epoch 之后, Leader 将消息以一个 LeaderINFO 消息发送给 Learner。

8    Learner 发送 ACK 消息

Follower 在受到来自 Leader 的 LeaderINFO 消息后,然后向 Leader 反馈一个相应。

9    数据同步

10 启动 Leader 和 Learner 服务器。

Leader 和 Follower 启动

1    创建并启动会话

2    初始化 ZooKeeper 的请求处理链

3    注册 JMX 服务


服务器启动期 Leader 选举 

1    每个 Server 发起一个投票先投自己,然后将投票发送给其他所有机器

2    接收来自各个服务器的投票。判断是否本轮投票,是否是 LOOKING 状态服务器。

3    处理投票。

1) 检查 ZXID.

2) 如果相同,检查 myid (SID)

3) 发送结果。

4    统计投票

每轮投票都会判断自己是否已经有过半机器接收到相同投票信息。

5    改变服务器状态。

一旦确定了 Leader 先更新自己的状态, 如果是 Follower 就变更为 FOLLOWING,如果是Leader 就变更为 LEADING

服务器运行期间 Leader 选举。

一旦选出了一个 Leader 那么所有服务器角色一般不会发生变化。当有Leader宕机时候才会进入新一轮选举

1    变更状态

1) 当 Leader 挂了后,余下的非 OBserver 服务器 变更自己的状态为 LOOKING。然后进入Leader 选举流程

2    同启动期投票

新节点加入时,当他试图进行选举会被告知当前服务器的 Leader 信息。对于该机器来说,仅仅需要和Leader 建立连接,并进行状态同步即可。



ZK 会话 。P352

来自为知笔记(Wiz)

时间: 2024-08-05 15:13:03

读 Paxos 到 ZooKeeper ¥ 50大洋的相关文章

[从Paxos到ZooKeeper][分布式一致性原理与实践]<一>

目录 分布式架构 从集中式到分布式 从ACID到CAP/BASE 一致性协议 2PC与3PC Paxos算法 Paxos的工程实践 Chubby Hypertable Zookeeper与Paxos 初始Zookeeper Zookeeper的ZAB协议 使用Zookeeper 部署与运行 客户端脚本 Java客户端API 开源客户端 Zookeeper的典型应用场景 Zookeeper技术内幕 系统模型 序列化与协议 科幻端 会话 服务器启动 leader选举 ... Zookeeper运维

《从PAXOS到ZOOKEEPER分布式一致性原理与实践》pdf

下载地址:网盘下载 内容简介  · · · · · · <Paxos到Zookeeper:分布式一致性原理与实践>从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议.同时,本书深入介绍了分布式一致性问题的工业解决方案--ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法.内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper.全书共8章,分为五部分:第一

《从Paxos到Zookeeper:分布式一致性原理与实践》【PDF】下载

内容简介 Paxos到Zookeeper分布式一致性原理与实践从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议.同时,本书深入介绍了分布式一致性问题的工业解决方案--ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法.内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper.全书共8章,分为五部分:前一部分(第1章)主要介绍了计算机系统从集中式向分布式系统

&lt;从PAXOS到ZOOKEEPER分布式一致性原理与实践&gt;读书笔记-ZAB协议

本文属于分布式系统学习笔记系列,上一篇笔记整理了paxos算法,本文属于原书第四章,梳理zookeeper的目标特性及ZAB协议. 1.介绍zookeeper 1.1ZooKeeper保证一致性特性 ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调通知.集群管理.master选举.分布式锁.分布式队列等功能.ZooKeeper可以保证如下分布式一致性特性. 1.顺序一致性: 从同一个客户端发起的事务请求,最终将严

《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记

一.分布式架构 1.分布式特点 分布性 对等性.分布式系统中的所有计算机节点都是对等的 并发性.多个节点并发的操作一些共享的资源 缺乏全局时钟.节点之间通过消息传递进行通信和协调,因为缺乏全局时钟,很难定义两个事件谁先谁后 故障总是会发生.系统设计时,需要考虑到任何异常情况 2.分布式环境的各种问题 通信异常.分布式系统中的某些节点之间无法正常通信 网络分区.这有部分节点可以正常通信,有些无法正常通信.这种现象称为网络分区,也称为"脑裂" 三态.节点之间的一次通信存在三种状态:成功.失

2月22日 《从Paxos到Zookeeper 分布式一致性原理与实践》读后感

工作中使用的场景: 工作中使用dubbo微服务,其中注册中心是由zk提供的,于是课余时光就读了此本zk经典之作 节点名为java接口的类名 节点下包括了服务提供者,消费者等子节点 提供者: 消费者: 由于是最底层微服务,所以消费的注册的比较多 zk的特点: 分布式一致性的解决方案,包括:顺序一致性,原子性,单一视图,可靠性,实时性 zk的基本概念: 集群角色:not Master/Slave,is Leader/Follower/Observer 会话:TCP长连接 数据节点(Znode) 版本

Paxos与zookeeper

1,什么是Paxos算法? Paxos算法是分布式计算领域中一个非常重要的算法,主要解决分布式系统如何就某个值(决议)达成一致的问题.一个典型的场景是分布式数据库的一致问题:如果分布式数据库的各个节点初始状态一致,又能执行相同的操作序列,那么最后能达到一个一致的状态.但是如何保证在每个节点上执行相同的命令序列呢?这就需要在每条指令上执行一个“一致性算法”以保证每个节点看到的指令一致.Paxos算法便是这样一种一致性算法,它由大牛Lamport于1990年提出,在Lamport的论文中,他虚拟了一

《从Paxos到zookeeper》第6章 Zookeeper的典型应用场景(下)

目录 6.2 Zookeeper在大型分布式系统中的应用 6.2.1 Hadoop YARN介绍 如何解决ResourceManager单点问题,实现高可用? 6.2.3 Kafka 术语介绍 问题 Kafka与Zookeeper Broker注册管理 Topic注册管理 生产者负载均衡 消费者负载均衡 消费分区与消费者关系 消息消费进度Offset记录 消费者注册 负载均衡 1)Range策略 2)RoundRobin策略 资料 6.3 Zookeeper在阿里巴巴的实践与应用 6.3.2 案

[从Paxos到ZooKeeper][分布式一致性原理与实践]&lt;二&gt;一致性协议

Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中,涌现了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议.三阶段提交协议和Paxos算法了. 2PC与3PC 分布式系统中,每个机器节点虽然都能明确知道自己在进行事务操作过程中的结果是失败or成功,但却无法直接获取到其他分布式节点的操作结果. 因此,当一个事务操作需要跨越多个分布式节点的时候,为了