这是我参与「第四届青训营 」笔记创作活动的第8天
1. 分布式系统
理想:高性能(可拓展、低时延、高吞吐);正确(一致性、易于理解);可靠(容错,高可用)。
现实:数据规模越来越大;服务的可用性要求越来越高;快速迭代的业务要求系统足够易用。
2. 复制协议
如何复制:
主副本定期拷贝全量数据到从副本;主副本拷贝操作到从副本。
如何复制操作:
主副本把所有的操作打包成Log;应用包装成状态机,只接收Log 作为Input;主副本确认Log已经成功写入到副本机器上,当状态机 apply后,返回客户端。
l 当主副本失效时,为了使得算法简单:人工切换,保证较高的可用性。
l 如何保证主副本是真的失效了呢?
在切换的过程中,主副本又开始接收client端的请求;
两个主副本显然是不正确的,log会被覆盖写掉;
我们希望算法能在这种场景下仍然保持正确。
l 增加到三个节点呢?
每次都等其他节点操落盘性能较差;
能不能允许少数节点挂了的情况下,仍然可以工作(falut-tolerance)。
3. 共识算法
l 共识协议不等于一致性。
应用层面不同的一致性,都可以用共识协议来实现;
简单的复制协议也可以提供线性─致性(线性执行)。
l 一般讨论共识协议时提到的一致性,都指线性一致性。
因为弱一致性往往可以使用相对简单的复制算法实现。
共识算法的未来:
l Raft Paxos相互移植;
l 共识算法作为一个系统,多数分布式系统都选择共识算法作为底座,不同一致性协议有不同的特性。