分布式共识算法 Raft
CreateTime: 2020-6-5 14:28:07
UpdateTime: 2020-6-7 13:36:16
Copyright: 唐涛 HOME | 首页 © 2020
Email: tangtao2099@outlook.com 16011324@hdu.edu.cn
动机(Motivation)
现代计算基础架构变得越来越分散有很多原因,首先,当今的CPU时钟速度在很长时间内没有很大提升,而通常一台计算机可以处理的速度是有限的,随着我们需要处理越来越多的数据和流量,迫使我们使用多机协同计算来处理这些日益庞大的工作负载,从而为其提供了可伸缩性。 随着数据量和复杂性的不断增加以及数据更新速度的加快,大数据的商业价值和持续的技术进步助长了这一趋势。
通常,即使在负载变化和系统出现部分故障的情况下,服务仍可以保持高度可用。但由于维护或停机,导致停机变得无法接受。只有通过复制(使用多个冗余计算机)才能实现这种弹性:当一台计算机发生故障或过载时,另一台计算机可以接管给定的角色。为了提供抵御数据丢失的弹性,必须存储这些数据,并在所有复制的计算机上进行连贯更新。
❗另外,对于具有全球范围的服务,企业更希望缩短延迟,让请求由地理位置最接近的复制实例提供服务。
在大多数服务中,使用并需要三台(或更多,但通常是奇数)服务器来提供最佳的动态可伸缩性,通过复制的弹性数据存储以及低延迟,以实现最佳的质量和服务保证。为了使计算在分布式系统中给出合理的结果,必须确定地执行该计算,这在分布式系统中,说起来容易做起来难。
如何确保任何两台计算机在任何给定时间都具有相同的状态?
假设任意的网络延迟和可能的网络临时分区,这实际上从根本上是不可能的。在不同的折衷方案下,可以使用不同的较弱(服务基本可用)的保证,但最简单的保证是使主和副本之间最终彼此一致,这意味着如果没有新的写入操作,对于相同的请求,两台计算机最终将返回相同的值。
为了了解分布式计算中的确定性执行,必须区分不会相互干扰的操作(比如:简单的读取操作)和会干扰彼此的操作(比如:对同一变量的写操作),执行冲突操作的服务器需要以某种方式就一个共同的状态达成共识,即寻求共识。
多数的分布式服务器都建立在共识之上:容错复制状态机,分布式数据库和组成员系统都依赖于共识解决方案。实际上,就共识而言,即使是分布式系统中的另一个基本问题&#