分布式一致性 主线
分布式一致性 主线
1、单机事务
2、 多机主线(无作恶\无传错)
-
状态机
确定状态机:记忆+动作(修改记忆、算术、逻辑):
即一台简化的计算机:内存 + 执行&控制.
一些列动作引起一系列变化后的记忆, 这些动作就是状态机支持的指令.
可以是真实的处理器电路,也可以是一台mysql服务器.
因为mysql服务器支持一些列指令:sql, 并记住了表中数据. -
一致性
集群中的任何一台机器执行的写请求必须顺序一致.
客户端发起的写请求顺序无法界定, 虽然每个写请求真实发生时刻有真实世界的时间先后.
-
多数派
设有集群S第一次将S划分为两部分:存活机器S1g,死亡机器S1b;要求S1g为多数派,即S1g中的机器数大于S1b中的.
用户发起写请求Wq1,Wq1顺利放在活S1g中,显然无法放在死S1b中.
假设完成Wq1后,S1g中有部分机器死亡, S1b中有部分复活, 即:第一次的死活划分已经无用了.
用户发起写请求Wq2,此时需要重新划分死活部分.
第二次将S划分为两部分:存活机器S2g,死亡机器S2b;要求S2g为多数派;
此时必有第一次活机器S1g和第二次活机器S2g中有重叠的机器:假设其中一台重叠机器为 d2@1, 这里需要将 d2@1 中放入的Wq1捞出来 再放入到 现在的 活机器S2g中, 由此 写请求Wq2在Wq1后发生,从而确保一致性.
Wq2顺利放在活S2g中,显然无法放在死S2b中.
每一次死去后又活过来的机器,按照某个办法来获取到 多数派产生的 写请求顺序, 从而使得自己也可以成为活机器.
以上为分布式一致性,基于多数派、状态机复制的各种协议思路的主线, paxos\raft\zab中都反应了这主线, 但主线需要成为方案, 还需要更进一步考虑.
活机器Sxg中找一个机器出来充当完全接收写请求,此机器即所谓leader. 如何找出leader,即所谓选举.