女主宣言
今天小编为大家分享一篇关于Golang实现Raft的文章,本篇文章为系列中的第一篇,对Raft进行一个全面的介绍,为后面进行Raft的实现打基础。希望能对大家有所帮助。
PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!
本篇文章为Raft系列文章中的第一篇,Raft的介绍。整个系列文章描述了Raft分布式共识算法及其在Go中的完整实现。
Raft是一种相对较新的算法(2014),但是它在业界已经被大量使用。最为大家所熟知的当属K8s,它依赖于Raft通过etcd分布式键值存储。
本系列文章的目的是描述Raft的功能齐全且经过严格测试的实现,并捎带介绍Raft的工作方式。我们假设读者至少了解过Raft相关文章。
不要指望在一天内完全掌握Raft。尽管它的设计比Paxos更易于理解,但Raft仍然相当复杂。它要解决的问题-分布式共识-是一个难题,因此解决方案的复杂性自然有一个下限。
1
复制状态机
分布式共识算法可以看作是解决跨多个服务器复制确定性状态机的问题。状态机一词用来表示任意服务;毕竟,状态机是计算机科学的基础之一,并且一切都可以用它们来表示。数据库,文件服务器,锁服务器等都可以被认为是复杂的状态机。
考虑一些由状态机表示服务。多个客户端可以连接到它并发出请求,并期望得到响应:
只要执行状态机的服务器是可靠的,系统就可以正常工作。如果服务器崩溃,我们的服务将不可用,这可能是不可接受的。通常,我们系统的可靠性取决于运行它的单个服务器。
提高服务可靠性的一种常见方法是通过复制。我们可以在不同的服务器上运行服务的多个实例。这样就创建了一个集群,这些服务器可以协同工作以提供服务,并且任何一台服务器崩溃都不应导致该服务中断。通过消除会同时影响多台服务器的常见故障模式,将服务器彼此隔离进一步提高了可靠性。
客