1. Raft 协议(算法)
Paxos 协议和 Raft 协议都是为了解决分布式场景下的数据一致性问题。
etcd 集群使用 Raft 协议保障多节点集群状态下的数据一致性。etcd 是使用 Go 语言对 Raft 协议一种实现方式。
在 Raft 体系中,有一个强 leader,由它全权负责接收客户端的请求命令,并将命令作为日志条目复制给其他服务器,在确认安全的时候,将日志命令提交执行。当 leader 故障时,会选举产生一个新的 leader。在强 leader 的帮助下,Raft将一致性问题分解为了三个子问题:
- Leader 选举:当已有的leader故障时必须选出一个新的leader。
- 日志复制:leader接受来自客户端的命令,记录为日志,并复制给集群中的其他服务器,并强制其他节点的日志与leader保持一致。
- 安全 safety 措施:通过一些措施确保系统的安全性,如确保所有状态机按照相同顺序执行相同命令的措施。
解这三个子问题的过程,保障了数据的一致。
etcd 只是 Raft 协议的一种实现机制,如果对协议理解足够深,也可以自己用其他语言实现,比如 rache。
Raft 协议入门了解可以
Raft 协议论文翻译:
Raft 协议论文原文: