Raft 算法

Tags
algorithm

https://mp.weixin.qq.com/s?__biz=MzkxNTE3ODU0NA==&mid=2247528121&idx=1&sn=f0823e2f1122b0728a557bb28be5c582&chksm=c1613be6f616b2f0929c2a8b4491a0e0df939f0bd5ea850b2f88b7f8df61a31742ad7abbc522&token=110409277&lang=zh_CN#rd

Raft 算法是一种分布式一致性算法

日志复制状态机:

  • 如果两个相同的确定性过程以相同的状态开始并以相同的顺序获得相同的输入,它们将产生相同的输出并以相同的状态结束。
  • 确定性意味着处理不依赖于时间,并且不会让任何其他输入影响其结果。例如,一个程序的输出受到线程特定执行顺序或调用gettimeofday或其他一些不可重复的东西的影响,通常最好被认为是非确定性的。
  • 进程的状态是在处理结束时保留在机器上的任何数据,无论是在内存中还是在磁盘上。

Raft使用强领导模型,即要求集群中的一个副本充当Leader,其他副本充当Follower。多个副本根据选举算法推选合法的Leader。

其优点和缺点:

  • 显著的优点是简单。数据总是从领导者流向Leader,只有Leader响应客户端请求(工程实践中有例外)。这使得Raft集群更容易分析、测试和调试。
  • 缺点是性能——因为集群中只有一台服务器与客户端通信,这在客户端活动激增的情况下可能成为瓶颈。当然这个可以通过一些工程手段在一致性和吞吐性能中做出平衡,例如我们可以放弃强一致的要求,从Follower中读取数据,减轻Leader的负担,关于一致性的部分,可以参考文章《共识、线性一致性、顺序一致性、最终一致性、强一致性概念区分》
SuperMade with Super