分布式学习笔记 (1) 一致性

本文详细探讨了分布式系统中的一致性概念,包括缓存一致性(coherence)、共识(consensus)和一致性(consistency)的差异。重点讲解了Paxos和Raft共识算法以及复制状态机在实现一致性中的作用。此外,还对比了线性一致性、顺序一致性、因果一致性、最终一致性等不同一致性模型,并讨论了CAP理论和BASE理论在分布式一致性中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一致性学习

用生活定义浪漫,富有意义且不同滋味

常见的一致性词语:CAP理论的 consistency, ACID 中的 consistency, cache一致性协议的 coherence, Raft/Paxos 中的 consensus。

1.coherence

coherence 只出现在Cache Coherence 一词中,称为”缓存一致性”,研究多核场景,即怎么保证多个核上的CPU 缓存数据是一致的,一般是单机维度的,不算分布式领域。

2.consensus

consensus准确的翻译是共识,即多个提议者达成共识的过程,例如Paxos,Raft 就是共识算法,paxos 是一种共识理论,分布式系统是他的场景,一致性是他的目标。一些常见的误解:使用了 Raft或者 paxos 的系统都是线性一致的(Linearizability 即强一致),其实不然,共识算法只能提供基础,要实现线性一致还需要在算法之上做出更多的努力。

因为分布式系统引入了多个节点,节点规模越大,宕机、网络时延、网络分区就会成为常态,任何一个问题都可能导致节点之间的数据不一致,因此Paxos 和 Raft 准确来讲是用来解决一致性问题的共识算法,用于分布式场景,而非”缓存一致性“这种单机场景。所以很多文章也就简称”Paxos是分布式系统中的一致性算法“,

一致性(Consistency)的含义比共识(consensus)要宽泛,一致性指的是多个副本对外呈现的状态。包括顺序一致性、线性一致性、最终一致性等。而共识特指达成一致的过程,但注意,共识并不意味着实现了一致性,一些情况下是做不到的。

Paxos与Raft

这里提一下Paxos,Paxos 其实是一类协议,Paxos 中包含 Basic Paxos、Multi-Paxos、Cheap Paxos 和其他的变种。Raft 就是 Multi-Paxos 的一个变种,Raft 通过简化 Multi-Paxos 的模型,实现了一种更容易让人理解和工程实现的共识算法,

Paxos是第一个被证明完备的共识算法,能够让分布式网络中的节点在出现错误时仍然保持一致,当然前提是没有恶意节点,也就是拜占庭将军问题。在传统的分布式系统领域是不需要担心这种问题的,因为不论是分布式数据库、消息队列、分布式存储,你的机器都不会故意发送错误信息,最常见的问题反而是节点失去响应,所以它们在这种前提下,Paxos是足够用的。

复制状态机

consensus共识在实现机制上属于复制状态机(Replicated State Machine)的范畴,复制状态机是一种很有效的容错技术,基于复制日志来实现,每个 Server 存储着一份包含命令序列的日志文件,状态机会按顺序执行这些命令。因为日志中的命令和顺序都相同,因此所有节点会得到相同的数据。

因此保证系统一致性就简化为保证操作日志的一致,这种复制日志的方式被大量运用,如 GSF、HDFS、ZooKeeper和 etcd 都是这种机制。

区块链

共识算法还有一个很重要的领域,就是比较火的区块链,比如工作量证明(POW)、权益证明(POS)和委托权益证明(DPOS)、置信度证明(PoB)等等,都是共识算法,这篇文章就列出来了 30 种

大家熟知的zk、etcd这种之所以叫“传统分布式”,就是相对于区块链这种”新型分布式系统“而言的,都是多节点共同工作,只是区块链有几点特殊:

  1. 区块链需要解决的是拜占庭将军问题,paxos之类的一致性算法无法对抗欺诈节点
  2. 区块链中不存在中央控制方,没有一个节点可以控制或协调账本数据的生成
  3. 区块链中的共识算法如果达不到一致性,则任何人都可以硬分叉,另建一个社区、一条链
  4. 分布式系统的性能理论上可以无限提升,但区块链是以相对的低效率来换取公正,主流的公有链每秒只能处理几笔到几十笔交易

3.consistency

consistency一致性,也就是 CAP、Base、ACID之类。

最简单的,客户端C1将系统中的一个值K由V1更新到V2,客户端C2/C3/C4…需要立即读取到K的最新值。

一致性要求的是一致,并不是正确,如果所有节点一致给出一个”错误“的答案,那也叫一致性

对于不同的场景,用户角度对于一致性的要求是不一样的,例如:

  • 银行系统:你在柜台存了一笔钱,同时你的朋友转账给你一笔钱,你的女朋友同时又在淘宝消费了一笔钱,你可能会感觉很乱,但你相信,最后你的余额一定是对的,银行可以慢一点,但不会把钱搞错。
  • 电商系统:你在淘宝看到一个库存为 5 的衣服,然后你快速下单,但是被提示”库存不足,无法购买“,你会觉得自己动作太慢,被人抢走了,不太关心库存为啥显示 5。
  • 论坛小站:你注册一个论坛,需要手机验证码,点完发送之后,一直没有响应,过了一天你才收到了这条短信,不过小站而已,不注册也就罢了。

上面是夸张了的用户情况,在实际业务中,一致性也是分等级的,如强一致性和弱一致性,怎么使用要看具体情况和系统的容忍度。

强一致性和弱一致性只是一种统称,按照从强到弱,可以划分为

  • 线性一致性Linearizability consistency ,也叫原子性
  • 顺序一致性 Sequential consistency
  • 因果一致性 Causal consistency
  • 最终一致性 Eventual consistency

强一致性包括线性一致性和顺序一致性,其他的如最终一致都是弱一致性。

Strong consistency
– ensures that only consistent state can be seen.

* All replicas return the same value when queried for the attribute of an object * All replicas return the same value when queried for the attribute of an object. This may be achieved at a cost – high latency.

Weak consistency
 – for when the “fast access” requirement dominates.

* update some replica, e.g. the closest or some designated replica
* the updated replica sends up date messages to all other replicas.
* different replicas can return different values for the queried attribute of the object the value should be returned, or “not known”, with a timestamp
* in the long term all updates must propagate to all
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值