ps制作博客网站界面网上做问卷报酬不错的网站是
news/
2025/9/23 1:11:45/
文章来源:
ps制作博客网站界面,网上做问卷报酬不错的网站是,门户网站建设的报价,文章修改网站ZAB协议
ZAB协议是如何实现操作地顺序性的#xff1f; 如果用一句话解释ZAB协议到底是什么#xff0c;我觉得它是能保证操作顺序性的、基于主备模式的原子广播协议。 接下来#xff0c;还是以指令X、Y为例具体演示一下#xff0c;帮助你更好地理解为什么ZAB协议能实现操作…ZAB协议
ZAB协议是如何实现操作地顺序性的 如果用一句话解释ZAB协议到底是什么我觉得它是能保证操作顺序性的、基于主备模式的原子广播协议。 接下来还是以指令X、Y为例具体演示一下帮助你更好地理解为什么ZAB协议能实现操作的顺序性(为了演示我们假设节点A为主节点节点B、C为备份节点)。 首先在ZAB协议中写操作必须在主节点(比如节点A)上执行。如果客户端访问的节点是备份节点(比如节点B),则备份节点会将写请求转发给主节点如图所示。 接着当主节点接收到写请求后它会基于写请求中的指令(也就是X、Y)来创建一个提案(Proposal)并使用一个唯一的ID来标识这个提案。这里我说的唯一ID就是事务标识符(TransactionID,也就是zxid),如图所示 从图中可以看到指令X、Y对应的事务标识符分别为1,1和1,2。这两个标识符是什么含义呢 你可以这么理解事务标识符是64位的long型变量由任期编号epoch和计数器counter两部分组成(为了形象和方便理解我把epoch翻译城任期编号)格式为epoch,counter其中高32位位任期编号低32位为计数器。 1.任期编号就是创建提案时领导者的任期编号当新领导者当选时任期编号递增计数器被设置为零。比如前领导者的任期编号为1那么新领导者对应的任期编号将为2 2.计数器就是具体标识提案的整数每次领导者创建新的提案时计数器将递增。比如前一个提案对应的计数器值为1那么新的提案对应的计数器值将为2 为什么要设计这么复杂呢因为事务标识符必须按照顺序、唯一标识一个提案也就是说事务标识符必须是唯一的、递增的。 在创建完提案之后主节点会基于TCP协议并按照顺序将提案广播到其他节点如图所示这样就能保证先发送的消息先被收到进而保证消息接收的顺序性。如图所示指令X一定在指令Y之前到达节点B、C. 然后当主节点接收到指定提案的大多数确认响应后该提案将处于提交状态(Commited)此时主节点会通知备份节点提交该提案如图所示。 主节点提交提案是有顺序性的。它会根据事务标识大小顺序提交提案如果前一个提案未提交此时主节点是不会提交后一个提案的。也就是说指令X一定会在指令Y之前提交。 最后主节点返回执行成功的响应给节点B由节点B再转发给客户端这样我们就实现了操作的顺序性保证了指令X一定在指令Y之前执行。 最后想补充的是当执行完写操作后接下来你可能需要执行读操作。为了提升读并发能力ZooKeeper提供的是最终一致性也就是说读操作可以在任何节点上执行,如图所示客户端会读到旧数据。如果客户端必须要读到最新数据怎么办呢ZooKeeper提供了一个解决办法那就是sync命令。我们可以在执行读操作前执行sync命令从而使客户端可以读到最新数据如代码所示
[zk: localhost:2181(CONNECTED) 17] create /geekbang 123
Created /geekbang
[zk: localhost:2181(CONNECTED) 18] create /geekbang/time 456
Created /geekbang/time
[zk: localhost:2181(CONNECTED) 19] sync /geekbang/time
Sync is OK
[zk: localhost:2181(CONNECTED) 20] get /geekbang/time
456
[zk: localhost:2181(CONNECTED) 22] stat /geekbang/time
cZxid 0x51104
ctime Sun May 05 15:46:28 CST 2024
mZxid 0x51104
mtime Sun May 05 15:46:28 CST 2024
pZxid 0x51104
cversion 0
dataVersion 0
aclVersion 0
ephemeralOwner 0x0
dataLength 3
numChildren 0注意
ZAB协议的术语众多而且有些术语表达的是同一个含义它们有些在文档中出现有些在代码中出现你只有准确理解术语才能更好地理解ZAB协议地原理。这里补充一些内容。
1.提案(Proposal):进行共识协商地基本单元可以理解为操作(Operation)或指令(Command)常出现在文档中2.事务(Transaction):也是指提案常出现代码中。比如pRequest2Txn()将接收到的请求转换为事务再比如未提交提案会持久化存储在事务日志中。这里需要注意的是这个术语很容易引起误解因为它不是指更广泛被接受的含义具有ACID特性的操作序列而是仅仅指提案
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910965.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!