Zookeeper分布式过程协同技术 - Zab状态更新广播协议
Zookeeper分布式过程协同技术 - Zab状态更新广播协议
何为状态更新广播协议?
Zookeeper服务器在接收到一个写请求操作时,如果当前服务器为追随者,它将会把写请求转发给群首。这时群首会将探索性的执行该请求,并将执行结果以事务的方式对状态更新进行广播。一个事务中包含服务器所需要执行变更的具体操作信息,当事务提交时,服务器会将这些变更更新到数据节点上。但是这里需要面对一个问题,服务器如何确认一个事务是否已经提交,由此引入了Zookeeper所采用的协议:Zab:Zookeeper原子广播协议(Zookeeper Atomic Broadcast protocol)。
提交事务的过程
1. 群首向所有追随者发送一个PROPOSAL消息p。
2. 当一个追随者接收消息p后,会响应群首一个ACK消息,通知群首其已经接受该提案(proposal)。
3. 当收到仲裁数量的服务器发送的确认消息后(该仲裁数包括群首自己),群首就会发送消息通知追随者进行提交(commit)操作。
图:事务提交常规消息模式
追随者在应答提案消息之前需要执行一些检查操作。追随者会检查所发送的提案消息是否属于其所追随的群首,并确认群首所广播的提案消息和提交事务消息的顺序正确。
Zab保障了如下几个重要属性:
- 如果群首按顺序广播了事务T1和事务T2,那么每个服务器在提交T1事务前保证事务T2已经提交完成。
- 如果某个服务器按照事务T1、事务T2的顺序提交事务,所有其他服务器也必然会在提交事务T1前提交事务T2。
第一个属性保证事务在服务器之间的传送顺序的一致,第二个属性保证了服务器不会跳过任何事务。