分布式系统基础知识
理论知识
如果让你设计一个分布式系统,你预见到什么问题?
- 保证节点高可用(节点故障)
- 数据的一致性
- 通讯异常
- 网络分区
CAP 理论
- 可用性 (Availability),代表服务一直处于正常响应时间内的可用状态。
- 一致性 (Consistency),数据一致性分为三种
- 强一致性:更新后的数据需要被后续的访问都能请求到;
- 弱一致性:不一定可以读取到最新写入的值,也不保证多少时间之后读取到的数据是最新的,只是会尽量保证某个时刻达到数据一致的状态;
- 最终一致性:弱一致性的升级版,系统会保证在一定时间内达到数据一致的状态。
- 分区容错性 (Partition tolerance),指在某分区宕机或网络原因请求不到情况下,仍然能保证系统的可用性和数据一致性。
当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能 2 选 1。也就是说当网络分区之后 P 是前提,决定了 P 之后才有 C 和 A 的选择。也就是说分区容错性(Partition tolerance)我们是必须要实现的。简而言之就是:CAP 理论中分区容错性 P 是一定要满足的,在此基础上,只能满足可用性 A 或者一致性 C。
BASE 理论
BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,可以理解为是对 CAP 中 AP 方案的一个补充。
- 基本可用 (Basic Available):当分布式系统处在一个不可预知的故障状态时,依然可以向外界提供服务,只是会损失一部分时间或系统功能上的可用性
- 软状态 (Soft-state):允许存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时
- 最终一致性 (Eventually
Consistent):最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性
- 读时修复:在读取数据时,检测数据的不一致,进行修复。
- 写时修复:在写入数据,检测数据的不一致时,进行修复。(较为推荐)
- 异步修复:这个是最常用的方式,通过定时对账检测副本数据的一致性,并修复。
Paxos 算法
Paxos 算法分为两个部分,分别为 Basic Paxos 算法和 Multi-Paxos 思想,是由兰伯特在 1990 年提出了一种分布式系统共识算法。Raft 算法、ZAB 协议、 Fast Paxos 算法都是基于 Paxos 算法改进而来。
Basic Paxos 算法
Basic Paxos 中存在 3 个重要的角色:
- 提议者(Proposer):也可以叫做协调者(coordinator),提议者负责接受客户端的请求并发起提案。提案信息通常包括提案编号 (Proposal ID) 和提议的值 (Value)。
- 接受者(Acceptor):也可以叫做投票员(voter),负责对提议者的提案进行投票,同时需要记住自己的投票历史;
- 学习者(Learner):如果有超过半数接受者就某个提议达成了共识,那么学习者就需要接受这个提议,并就该提议作出运算,然后将运算结果返回给客户端。
为了减少实现该算法所需的节点数,一个节点可以身兼多个角色。并且,一个提案被选定需要被半数以上的 Acceptor 接受。这样的话,Basic Paxos 算法还具备容错性,在少于一半的节点出现故障时,集群仍能正常工作。
Multi Paxos 思想
Basic Paxos 算法的仅能就单个值达成共识, Multi-Paxos 通过多个 Basic Paxos 实例就一系列值达成共识。一种应用于工业界的 Multi-Paxos 变种——Raft 协议,其简化了 Multi-Paxos 的思想,变得更容易被理解以及工程实现,实际项目中可以优先考虑 Raft 算法。
分布式系统基础知识
http://shijieq.github.io/2023/03/17/DistributedSystem/分布式系统基础知识/