2

一致性与共识算法解析(1)-开篇

 2 years ago
source link: https://blog.51cto.com/u_11440114/5660034
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一致性与共识算法解析(1)-开篇

精选 原创

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

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

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

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

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

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

  • 打赏
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK