这是我参与「第五届青训营 」笔记创作活动的第2天 课后问题回答
- 为什么在4将军问题中,增加1轮协商就可以对抗拜占庭故障?
在四将军问题中,增加1轮协商就可以对抗拜占庭故障是因为增加1轮协商可以消除拜占庭将军的影响,因此可以达成共识。 两军问题的根本问题在于信道的不可靠。拜占庭将军问题和两军问题实质是不一样的。比特币的工作量证明机制提出了目前拜占庭将军问题的最优解决方案
- 什么是最终一致性?什么是线性一致性?
线性一致性
又被称为强一致性、严格一致性、原子一致性。是程序能实现的最高的一致性模型,也是分布式系统用户最期望的一致性。CAP 中的 C 一般就指它
顺序一致性中进程只关心大家认同的顺序一样就行,不需要与全局时钟一致,线性就更严格,从这种偏序(partial order)要达到全序(total order)
要求是:
1.任何一次读都能读到某个数据的最近一次写的数据。
2.系统中的所有进程,看到的操作顺序,都与全局时钟下的顺序一致。 每个读操作都读到了该变量的最新写的结果,同时两个进程看到的操作顺序与全局时钟的顺序是一样的。
最终一致性 Eventual consistency
最终一致性这个词大家听到的次数应该是最多的,也是弱一致性,不过因为大多数场景下用户可以接受,应用也就比较广泛。 理念:不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。 是在一段时间后,节点间的数据会最终达到一致状态。 最终一致其实分支很多: Causal consistency(因果一致性) Read-your-writes consistency (读己所写一致性) Session consistency (会话一致性) Monotonic read consistency (单调读一致性) Monotonic write consistency (单调写一致性) BASE理论中的 E,就是Eventual consistency最终一致
- 数据库里的一致性和分布式系统中的一致性有什么区别?
CAP一致性:用户在分布式系统的某个节点上进行了变更操作,则在一定时间后,用户能从系统的任意节点上读取到这个变更结果。 ACID一致性:事务的执行不会破坏数据库的完整性约束,所谓的完整性约束包括数据关系的完整性和业务逻辑的完整性。因此,这里的“一致性”指的是完整性约束不会破坏。