这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
一、本堂课重点内容:
- 作业讲解
二、作业讲解
- 分布式系统有哪些优势和挑战? 答:
- 优势:去中心化、低成本、弹性、资源共享、可靠性高
- 挑战:故障、网络、环境、安全
- 两将军问题为什么理论上永远达不成共识?
- 因为只要两方的信使被俘虏的情况下,就永远无法达成公式
- 为什么TCP采用三次握手?而不是两次和四次?
- 因为三次握手才能保证对方能够正常收到信息,举个例子,A对B说hello,这是第一次握手。B收到A的hello后,B对A说hello,这是第二次握手。然后A收到B的hello,A对B说我收到你的hello了,这是第三次握手。三次握手这是最低保证双方保证通信。
- 如果是两次,那么第三次握手就不存在,则B不知道A是否收到它的通信。
- 如果是四次就多余了
- 为什么在4将军问题中,增加1轮协商就可以对抗拜占庭故障?
- 因为3m+1个将军,有m个叛徒,m轮协商就可以达成一致,m+1轮一定可以对抗拜占庭故障。
- 什么是最终一致性?什么是线性一致性?
-
强一致性和弱一致性只是一种统称,按照从强到弱,可以划分为
线性一致性Linearizability consistency ,也叫原子性 顺序一致性 Sequential consistency 因果一致性 Causal consistency 最终一致性 Eventual consistency
-
强一致性包括线性一致性和顺序一致性,其他的如最终一致都是弱一致性。
-
最终一致性:不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。
-
线性一致性:顺序一致性中进程只关心大家认同的顺序一样就行,不需要与全局时钟一致,线性就更严格,从这种偏序(partial order)要达到全序(total order)
- CAP理论中,请举例说明可用性和一致性的矛盾?
- 一致性和可用性不能同时做到的原因是:出现了分区容错,也就是可能通信失败。
如上例子,如果要保证B区的一致性,那么在A区进行写操作时,必须给B区的数据加上读写锁,在锁定期间,客户端不能读写该数据。只有数据同步后,才释放掉锁,B区才重新开放读写。这样,保证了一致性,但是没有了可用性。
如果要保证B区的可用性,就不能对B区加上读写锁,这样又缺少了一致性。
因此,一致性和可用性是不能同时做到的。在设计分布式系统时,如果追求一致性,那么无法保证所有分区的可用性;如果追求所有分区的可用性,那么就没法做到一致性。