【面试核武器】一个视频彻底搞懂分布式一致性
面试经常被问到:“同学,来聊聊分布式一致性?”
然后,你是不是心里咯噔一下,冷汗都快出来了?
别怕!今天,我们就用一个视频的时间,把这个让无数英雄好汉“折腰”的知识点,彻底拿下!看完保证你下次面试,自信满满,轻松通关!

****那么,到底啥是“分布式一致性”?
说白了,就是你有很多台服务器,比如一个电商系统,节点A、B、C都存着商品库存。当一个用户下单,库存减少了,你怎么保证所有服务器上的库存数量都同步更新了?
你看,就像这样,节点A说库存还剩10个,节点B却说还剩9个,这下好了,顾客来了到底听谁的?系统就乱套了!
再举个生动的例子,这就好像你和兄弟们开了家联营超市,每个人管一个货架,账本必须随时对得上,不然就是糊涂账!分布式一致性,就是要解决这个“对账”的难题。
当然啦,这个“对账”的严格程度也不一样,分成了三种模型。

第一种,强一致性。绝对的老大哥,最严格!要求数据一旦更新,所有节点必须立刻、马上看到最新的数据,一刻都不能等。像银行转账、金融交易这种场景,一分钱都不能错,就得用它。
第二种,弱一致性。这就有点“佛系”了,允许数据在不同节点之间存在一小会儿的延迟和不一致。
而我们最常见的,是它的一个特例——最终一致性。它不要求“立刻”,但保证“最终”大家的数据会是一样的。比如你发个朋友圈,好友晚几秒钟看到,问题不大。这是绝大多数分布式系统的选择,因为它在一致性和性能之间取得了很好的平衡。
好了,理论听完了,那具体怎么做呢?先来看看老前辈——二阶段提交,简称2PC。

它有个“协调者”大哥和一堆“参与者”小弟。
第一阶段,大哥先挨个问:“兄弟们,这事儿能办不?”,小弟们如果都觉得OK,就回复“可以”。
第二阶段,大哥看所有人都同意了,就大手一挥:“全体执行!”,大家一起提交事务。
听起来很美好,对吧?但它的问题非常致命!这也是面试基本都会问到的。
它是一个“同步阻塞”的过程,只要有一个小弟卡住了,所有人都得等着。更要命的是,如果协调者大哥自己挂了,所有小弟就群龙无首,直接原地“懵逼”,不知道该提交还是回滚。
你: 为了解决2PC的问题,人们又搞出了它的“补丁版”——三阶段提交,3PC。

它在2PC的基础上,增加了一个“CanCommit”的预备阶段,还引入了超时机制,减少了之前那种“干等”的阻塞情况。
虽然好了一点,但还是没能从根本上解决数据不一致的问题。所以,它现在用得也比较少了。
接下来,重量级选手登场!Paxos算法!

它就是神!是分布式一致性领域的“圣经”!理论上完美解决了分布式一致性问题。
每个节点有三个角色:提议者,负责发起提案、接受者,负责参与投票、学习者,负责看戏并同步结果。基本的流程就是提议者Proposer会提议一个值,同时带上提议的编号N,询问大家同意吗? 投票者 Acceptor,的投票逻辑就是只要你的编号够大,我就接受。最终结果由学习者汇总。超过半数的节点同意,数据就最终确定了。
看起来很美好,但是 这本经书是“天书”!Paxos的理论极其复杂,难以理解,更别说正确地实现了。所以,它虽然是图腾,但很少有人直接在项目里手写它。
Paxos太难懂怎么办?这时候,Raft算法闪亮登场!它的口号就是:“为了让世界更易于理解”!

Raft 把复杂逻辑拆成 “节点状态” 和 “核心能力”,超好懂!节点就三种状态:领导者Leader,唯一写入口,向其他人发号施令、跟随者Folllower,听Leader的话参与投票、候选人Candidate,领导者崩了就参与竞选。
核心能力就俩:第一,领导者选举 —— 跟随者等不到心跳,就变身候选人拉票,拿到多数票就当 leader;第二,日志复制 ——所有的写操作,都由老大Leader说了算!老大先把操作记在自己的小本本(日志)上,然后再复制给所有小弟,大多数小弟确认收到后,老大再执行。这样就保证了数据的一致。
因为简单、清晰、易于实现,Raft现在非常火!我们熟知的Etcd、RocketMQ等很多知名项目,核心用的就是它!
讲到这里,面试官可能就会微微一笑,追问了:“那在实际项目中,到底该怎么选呢?”
别慌,记住这三点:

- 看业务需求:钱相关的,用Raft/Paxos这类强一致性方案。普通信息,最终一致性就够了。
- 看系统规模:系统一大,千万别自己造轮子!直接用现成的成熟组件,比如Zookeeper或者Etcd,它们已经帮你把最难的算法封装好了。
- 站在巨人肩膀上:多研究开源项目,学习它们的最佳实践,是成为高手的最快路径!
好了,最后我们来总结一下。

从漏洞百出的2PC、3PC,到理论完美但晦涩难懂的Paxos,再到如今大行其道的Raft,你会发现,所有技术演进的核心,都是为了在不可靠的网络和随时可能宕机的节点上,解决“信任”的问题。
分布式一致性的本质,就是 “在不可靠的世界里,找可靠的平衡点”。这也同样应该是你的职业信条。
[结尾音乐]
我是楼兰,如果这个视频对你有帮助,别忘了点赞、收藏、加关注!不然以后就刷不到了。