拜占庭问题&CAP理论 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
拜占庭将军问题
两支军队的将军只能派信使穿越地方领土互相吐信,以此约定进攻时间。该问题求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识。
结论是,拜占庭将军问题是被正式无解的电脑通信问题,两支军队理论上永远无法达成共识。
解决方案
一:同时发送N个信使,任意一个达到对方军队,都算成功。
二:设置超时时间,发送后未在一定时间返回,则加派信使。
共识与消息传递的不同:即使保证了消息传递的成功,也不能保证达成共识。
TCP三次握手是在两个方向确认包的序列号,增加了超时重试,是拜占庭将军问题的一个工程解。
结论:当有3m+1个将军,其中m个“叛徒”时,可以增加m轮协商,最终达成一致。
共识和一致性
客户端A读到x=0,当客户端C正在写入时,客户端A和B可能读到0或1,。但是当C写入完成后,A和B最终能读到一致的数据。我们称这样的一致性为最终一致性。
当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1.我们称这样的一致性为线性一致性。
如果要保证线性一致性,多个节点间势必需要进行协商,以寻求一致。这样增加了延迟,系统可用性便会受损。
CAP理论
C指一致性,值数据在多个副本之间能够保持一致的特性。
A指可用性,值系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应。但是不保证获取的数据为最新数据。
P指分区容错性。分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。
CAP理论通常运用于数据库领域,同样可以适用于分布式存储方向。
CA:放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择
AP:放弃一致性(强一致性),追求分区容错性和可用性,例如一些注重用户体验的系统。
CP:放弃可用性,追求一致性和分区容错性,例如与钱财安全相关的系统。