消息廣播的過程實際上是一個 簡化版本的二階段提交過程
1. leader 接收到消息請求后,將消息賦予一個全局唯一的64 位自增 id,叫:zxid,通過 zxid 的大小比較既可以實現因果有序這個特征
2. leader 為每個 follower 准備了一個 FIFO 隊列(通過 TCP協議來實現,以實現了全局有序這一個特點)將帶有 zxid的消息作為一個提案(proposal)分發給所有的 follower
3. 當 follower 接收到 proposal,先把 proposal 寫到磁盤,寫入成功以后再向 leader 回復一個 ack
4. 當 leader 接收到合法數量(超過半數節點)的 ACK 后,leader 就會向這些 follower 發送 commit 命令,同時會在本地執行該消息
5. 當 follower 收到消息的 commit 命令以后,會提交該消息
leader 的投票過程,不需要 Observer 的 ack,也就是 Observer 不需要參與投票過程,但是 Observer 必須要同 步 Leader 的數據從而在處理請求的時候保證數據的一致 性