8 条荒谬的分布式假设Fallacies of Distributed Computing 是英文维基百科上的一篇文章,讲的是刚刚进入分布式计算领域的程序员常会有的 8 条假定,随着时间的推移,每一条都会被证明是错误的,也都会导致严重的问题,以及痛苦的学习体验:
- 网络是稳定的 。
- 网络传输的延迟是零 。
- 网络的带宽是无穷大 。
- 网络是安全的 。
- 网络的拓扑不会改变 。
- 只有一个系统管理员 。
- 传输数据的成本为零 。
- 整个网络是同构的 。
常见分布式算法的对比从拜占庭容错、一致性、性能和可用性四个纬度来分析如下(来自极客时间-韩健-分布式协议与算法实战):

文章插图
一般而言,在可信环境(比如企业内网)中,系统具有故障容错能力就可以了,常见的算法有二阶段提交协议(2PC)、TCC(Try-Confirm-Cancel)、Paxos 算法、ZAB 协议、Raft 算法、Gossip 协议、Quorum NWR 算法 。而在不可信的环境(比如有人做恶)中,这时系统需要具备拜占庭容错能力,常见的拜占庭容错算法有 POW 算法、PBFT 算法 。
采用 Gossip 协议实现的最终一致性系统的可用性是最高的,因为哪怕只有一个节点,集群还能在运行并提供服务 。其次是 Paxos 算法、ZAB 协议、Raft 算法、Quorum NWR 算法、PBFT 算法、POW 算法,它们能容忍一定数节点故障 。最后是二阶段提交协议、TCC,只有当所有节点都在运行时,才能工作,可用性最低 。
采用 Gossip 协议的 AP 型分布式系统,具备水平扩展能力,读写性能是最高的 。其次是 Paxos 算法、ZAB 协议、Raft 算法,因为它们都是领导者模型,写性能受限于领导者,读性能取决于一致性实现 。最后是二阶段提交协议和 TCC,因为在实现事务时,需要预留和锁定资源,性能相对低 。
2PC【强一致性】两阶段提交(2PC,Two-phase Commit Protocol)是非常经典的强一致性协议,在各种事务和一致性的解决方案中,都能看到两阶段提交的应用,二阶段提交协议,不仅仅是协议,也是一种非常经典的思想 。2PC 的流程就是第一阶段做投票,第二阶段做决定的一个算法 。
二阶段提交在达成提交操作共识的算法中应用广泛,比如 XA 协议、TCC、Paxos、Raft 等 。Paxos、Raft 等强一致性算法,也采用了二阶段提交操作,在“提交请求阶段”,只要大多数节点确认就可以,而具有 ACID 特性的事务,则要求全部节点确认可以 。所以可以将具有 ACID 特性的操作,理解为最强的一致性 。
三阶段提交协议(3PC,Three-phase_commit_protocol)是在 2PC 之上扩展的提交协议,主要是为了解决两阶段提交协议的阻塞问题,从原来的两个阶段扩展为三个阶段,增加了超时机制 。但目前两阶段提交、三阶段提交存在如下的局限性,并不适合在微服务架构体系下使用:
- 所有的操作必须是事务性资源(比如数据库、消息队列),存在使用局限性
- 由于是强一致性,资源需要在事务内部等待,性能影响较大,吞吐率不高,不适合高并发与高性能的业务场景;
- 一个是 Basic Paxos 算法,描述的是多节点之间如何就某个值(提案 Value)达成共识;
推荐阅读
- 在分布式系统中,SpringBoot 实现接口幂等性
- 分布式锁主动续期的入门级实现
- 离心泵型号一览表 立式污水泵
- 免疫系统|减肥不能碰“花生”?建议:不想腰上长赘肉,6种常见食物要远离
- 小孩止咳化痰吃什么好
- cov(x 协方差的意义
- 怎样登陆中江律师协会网站查询 成都市律协电话
- 同心协力的反义词 同心协力
- 几种常见的翡翠镶嵌方法
- 口罩类型的防护效果——常见的口罩有那几种?
