一致性与共识(0)-前言

举报
JavaEdge 发表于 2022/08/31 23:54:13 2022/08/31
【摘要】 布式系统中的许多事情可能出错,最简单方法是让整个服务失效,并向用户显示错误消息。若无法接受,就得找到容错方法:即使某些内部组件出现故障,服务也能正常运行。本文讨论构建容错分布式系统的算法和协议的一些案例。假设所有问题都可能发生:网络中的数据包可能会丢失、重新排序、重复推送或任意延迟;时钟只是尽其所能近似;节点可以暂停(如GC)或随时崩溃。构建容错系统的最好方法,是找到一些带有实用保证的通用抽...

布式系统中的许多事情可能出错,最简单方法是让整个服务失效,并向用户显示错误消息。若无法接受,就得找到容错方法:即使某些内部组件出现故障,服务也能正常运行。

本文讨论构建容错分布式系统的算法和协议的一些案例。假设所有问题都可能发生:网络中的数据包可能会丢失、重新排序、重复推送或任意延迟;时钟只是尽其所能近似;节点可以暂停(如GC)或随时崩溃。

构建容错系统的最好方法,是找到一些带有实用保证的通用抽象,实现一次,然后让应用依赖这些保证。和事务处理方法相同:使用事务,应用可假装没有崩溃(原子性),没有其他人同时访问DB(隔离),存储设备完全可靠(持久性)。即使崩溃,竞态条件和磁盘故障,事务抽象隐藏了这些问题,因此应用不必担心。

现寻求可让应用忽略分布式系统部分问题的抽象概念。如分布式系统最重要的抽象之一:共识:让所有节点对某件事达成一致。正如我们在本章中将会看到的那样,要可靠地达成共识,且不被网络故障和进程故障所影响,是一个令人惊讶的棘手问题。

一旦达成共识,应用可以将其用于各种目的。假设你有一个单主复制的数据库。如果主库挂掉,并且需要故障切换到另一个节点,剩余的数据库节点可以使用共识来选举新的领导者。重要的是只有一个领导者,且所有的节点都认同其领导。如果两个节点都认为自己是领导者-脑裂,会导致数据丢失。正确实现共识有助避免这问题。

我们需了解可以做什么和不可以做什么的范围:在某些情况下,系统可以容忍故障并继续工作;在其他情况下,这是不可能的。我们将深入研究什么可能而什么不可能的限制,既通过理论证明,也通过实际实现。我们将在本章中概述这些基本限制。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。