6.1什么是共识


文档摘要

6.1 什么是共识 受翻译影响,网上讨论 Paxos 或 Raft 的内容多使用“分布式一致性协议”或者“分布式一致性算法”这样的描述。如 Google Chubby 系统的作者 Mike Burrows,他对 Paxos 的评价原话是:“There is only one consensus protocol...”,很多文章翻译成“世界上只有一种一致性算法...”。 虽然“共识”和“一致”在汉语中含义相近,但在计算机领域它们有明显的差异: 共识(consensus):所有的节点就某一项提议(如选举、原子事务提交、日志复制、分布式锁等)达成一致的过程及其算法; 一致(consistency):描述多个节点中存储的数据之间不自相矛盾,侧重于数据最终达成稳定状态的结果。

6.1 什么是共识

受翻译影响,网上讨论 Paxos 或 Raft 的内容多使用“分布式一致性协议”或者“分布式一致性算法”这样的描述。如 Google Chubby 系统的作者 Mike Burrows,他对 Paxos 的评价原话是:“There is only one consensus protocol...”,很多文章翻译成“世界上只有一种一致性算法...”。

虽然“共识”和“一致”在汉语中含义相近,但在计算机领域它们有明显的差异:

  • 共识(consensus):所有的节点就某一项提议(如选举、原子事务提交、日志复制、分布式锁等)达成一致的过程及其算法
  • 一致(consistency):描述多个节点中存储的数据之间不自相矛盾,侧重于数据最终达成稳定状态的结果

Paxos、Raft、ZAB 等等属于 consensus 算法,明显使用“共识”描述更准确,而 CAP 定理中的 C 和数据库 ACID 的 C 才是真正的“一致性” —— consistency 问题。

在充满不确定性的环境中(如节点故障、网络不可靠、消息延迟或丢失、顺序错乱...)可靠地达成共识是一件非常了不起的事情。一旦解决了共识问题,就能为分布式应用提供一套屏蔽内部复杂问题的抽象机制,满足应用层的很多目标需求。例如:

  • 主节点选举:对于一个主从复制的数据库,所有的节点需要就“谁来当主节点”达成一致。如果由于网络问题出现节点间无法通信,很容易出现争议(也就是没有形成共识)。不解决争议问题,就会出现多个节点同时认为自己是主节点,也就是出现分布式系统中最头疼的情况 —— “脑裂”。
  • 原子事务提交:对于支持跨节点或者跨分区事务的数据库,可能会出现这样的情况:某些节点事务执行成功,某些节点事务执行失败。为了维护事务的原子性(即 ACID 特性),所有节点必须就事务的结果达成一致。
  • 分布式锁管理:当多个请求同时尝试访问共享资源时,分布式锁需要就“谁成功加锁”达成一致。跟“主节点选举”的情况一样,即使网络问题或者节点故障,分布式锁也能正常工作,不然就会出现加锁争议,引发并发冲突、死锁或数据不一致等问题。
  • 日志复制:日志复制是指将主节点的“操作日志条目”复制到从节点。日志条目的顺序必须在所有节点上形成一致,即日志条目需要按相同的顺序被写入(“顺序”相当重要,笔者将在下一节介绍)。
  1. Lamport 在分布式系统理论方面有非常多的成就,比如 Lamport 时钟、拜占庭将军问题、Paxos 算法等等。除了计算机领域之外,其他领域的无数科研工作者也要成天和 Lamport 开发的一套软件打交道,目前科研行业应用最广泛的论文排版系统 —— LaTeX (名字中的 La 就是指 Lamport)


作者与出处
来源:isno
许可证:CC BY-SA 4.0
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: 转发
评论区 (0)
U