常见分布式协议和算法的说明和对比开发分布式系统最关键的就是根据场景特点,选择合适的算法,在一致性和可用性之间妥协折中,而妥协折中的关键就在于能否理解各算法的特点 。
分布式一致性的背景一致性的分类我们讲分布式系统的一致性,一般来说,有如下几个分类:
- 强一致性 。对一致性要求最高的,是强一致的,保证写操作完成后,任何后续访问都能读到更新后的值 。。但是性能较弱,在互联网系统里面用的较少,但是在金融领域使用的较多 。因为是同步的,因此性能会比较低 。
- 弱一致性 。写操作完成后,系统不能保证后续的访问都能读到更新后的值 。
- 最终一致性 。是弱一致性的一个特定形式,如果对某个对象没有新的写操作了,最终所有后续访问都能读到相同的最近更新的值,但是是在最终某个时间点才能保证 。弱一致性(最终一致性)都是异步的,因此性能会比较好 。
如何理解分布式一致性设计分布式系统的两大初衷:横向扩展(scalability)和高可用性(availability),横向扩展的目的也是为了解决单点问题从而保障可用性,因此分布式系统的核心诉求也就是可用性,为了保证可用性,一个分布式系统通常由多个节点组成,而这些节点各自维护一份数据,因此我们需要能够保证每个节点上的数据都是相同的,也就是要保证一致性,这就是我们所说的分布式一致性,他通过给定的一系列操作,在协议(共识算法)的保障下,试图使得它们对处理结果达成某种程度的一致 。
分布式系统的核心问题前面说到,分布式一致性,是通过给定的一系列操作,在协议(共识算法)的保障下,试图使得它们对处理结果达成某种程度的一致 。这里,也就是整个分布式系统的核心问题,怎么保证多个节点间的数据是一致的,这就需要我们对分布式协议(共识算法)要能够有比较深刻的理解,然后才能很好的解决分布式数据的一致性,掌握分布式协议(共识算法)也是你面试架构师、技术专家等高端岗位时的敲门砖 。
拜占庭容错 和 非拜占庭容错拜占庭错误是一个错误模型,描述了一个完全不可信的场景,除了存在故障行为,还存在恶意行为 。拜占庭容错(Byzantine Fault Tolerance,BFT),就是指能容忍拜占庭错误了 。拜占庭容错是分布式领域最复杂的容错模型,是你必须要了解的 。在一个完全不可信的环境中(比如有人作恶),如果需要达成共识,那么我们就必须考虑拜占庭容错算法,常用的拜占庭容错算法有 POW 算法、PBFT 算法,它们在区块链中应用广泛 。从概率角度,PBFT 系列算法是确定的,一旦达成共识就不可逆转;而 PoW 系列算法则是不确定的,随着时间推移,被推翻的概率越来越小 。
而非拜占庭容错,又叫故障容错(Crash Fault Tolerance,CFT),解决的是分布式系统中存在故障,但不存在恶意节点的共识问题 。实际上,这种故障是非常场景的,比如进程奔溃、服务器硬件故障、网络中断、响应延迟等等 。针对非拜占庭错误的解决方案,业界一般采用 Paxos、Raft 及其各种变种的协议 。
共识 vs 一致性【常见分布式协议和算法的说明和对比】共识算法解决的是对某个提案(Proposal)让大家都达成一致意见的过程,而这个提案可以认为任何需要达成一致的信息都是一个提案,如多个事件发生的顺序、某个键对应的值等等 。在实践中,一致性的结果还需要客户端的支持,比如通过访问足够多个服务节点来验证确保获取共识后结果 。
但是由于分布式系统会存在各种非拜占庭容错,因此要达成共识就比较困难,需要一些共识算法来解决 。这里需要注意,共识(Consensus)和一致性(Consistency)是两个完全不同的概念 。共识是指各节点就指定值(Value)达成共识,而且达成共识后的值,就不再改变了 。一致性是指写操作完成后,能否从各节点上读到最新写入的数据,如果立即能读到,就是强一致性,如果最终能读到,就是最终一致性 。
提到共识算法,Paxos 是一个必须要提及的话题,而且 ZAB 协议、Raft 算法都可以看作是 Paxos 变种,Paxos 和 Raft 是共识算法 。所以,你需要了解 Paxos 算法 。但因为 Paxos 算法的可理解性和可编程性痛点突出,所以在实际场景中,最常的共识算法是 Raft,我们可以基于 Raft 实现强一致性系统,Raft 是需要彻底掌握的 。
推荐阅读
- 在分布式系统中,SpringBoot 实现接口幂等性
- 分布式锁主动续期的入门级实现
- 离心泵型号一览表 立式污水泵
- 免疫系统|减肥不能碰“花生”?建议:不想腰上长赘肉,6种常见食物要远离
- 小孩止咳化痰吃什么好
- cov(x 协方差的意义
- 怎样登陆中江律师协会网站查询 成都市律协电话
- 同心协力的反义词 同心协力
- 几种常见的翡翠镶嵌方法
- 口罩类型的防护效果——常见的口罩有那几种?
