聊聊分布式架构09——分布式中的一致性协议

这篇具有很好参考价值的文章主要介绍了聊聊分布式架构09——分布式中的一致性协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

01从集中式到分布式

系统特点

集中式特点

分布式特点

事务处理差异

02一致性协议与Paxos算法

2PC(Two-Phase Commit)

阶段一:提交事务请求

阶段二:执行事务提交

优缺点

3PC(Three-Phase Commit)

阶段一:CanCommit

阶段二:PreCommit

阶段三:doCommit

优缺点

Paxos算法

拜占庭将军问题

Paxos 算法概述

Paxos 算法的基本流程

03Google Chubby对Paxos的实现


聊聊分布式架构09——分布式中的一致性协议,分布式架构,分布式,架构

01从集中式到分布式

系统特点
集中式特点

集中式系统通常是单一服务器或单一数据中心的架构。在集中式系统中,每个终端或客户端机器仅仅负责数据的录入和输出,而数据的存储与控制处理完全交由主机完成。但是,随着业务不断发现,加上单一大型主机进行系统扩容又比较困难。以阿里集团的“去IOE”计划启动,电商系统开始正式迈入分布式系统时代。

分布式特点

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。不难理解,分布式系统都会有如下几个特征:

  • 分布性:多台计算机在空间上随意分布

  • 对等性:没有主/从之分,既没有控制整个系统的主机,也没有被控制的从机,所有计算机节点是对等的。

  • 并发性:多个节点可能会并发地操作一些共享的资源,如数据库或分布式存储等。

  • 缺乏全局时钟:分布式系统由空间上随意分布的多个进程组成的,在系统中,很难定义谁先谁后。

  • 故障总会发生:系统中的所有计算机,都有可能发生任何形式的故障。

事务处理差异

事务具有四个特征:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称为事务的ACID特性。

  1. 原子性(Atomicity):原子性表示事务是一个不可分割的工作单元。这意味着事务中的所有操作要么全部成功,要么全部失败。如果事务的任何部分失败,整个事务将被回滚,以确保数据库状态不会处于不一致的状态。

  2. 一致性(Consistency):一致性确保事务在执行前和执行后,数据库的状态保持一致。这意味着事务必须遵循数据库的完整性约束和业务规则,以确保数据的正确性。如果事务违反了完整性约束,它将被回滚。

  3. 隔离性(Isolation):隔离性指的是多个并发事务之间的独立性。即使多个事务同时访问数据库,它们也不应相互干扰。数据库管理系统必须确保每个事务以独立的方式访问数据,以防止数据竞争和不一致性。

  4. 持久性(Durability):持久性确保一旦事务成功提交,其影响将持久保存在数据库中,即使在系统发生故障时也是如此。这意味着数据的更改不会因系统崩溃而丢失。

在单机数据库中,我们很容易能够实现一套满足ACID特性的事务处理系统,但是分布式的事务处理中问题却层出不穷。其中最为突出的问题是在可用性和一致性之间永远无法存在一个两全其美的方案,针对这个难题的讨论,出现了CAP和BASE这样的分布式系统经典理论。

  1. CAP 定理(CAP Theorem):

    • 一致性(Consistency):所有节点看到的数据是一致的。这意味着无论对于系统的任何部分,如果读取操作返回了某个值,那么后续的读操作都应该返回相同的值。

    • 可用性(Availability):系统能够响应读取和写入请求,即系统在有限时间内响应每个非故障请求。

    • 分区容忍性(Partition Tolerance):系统在面临网络分区(节点之间的通信中断)的情况下仍能继续运行。

    CAP 定理指出,分布式系统无法同时满足这三个特性,最多只能同时满足其中两个。这意味着在面对网络分区时,分布式系统需要在一致性和可用性之间做出权衡。不同的系统可以选择不同的策略,具体取决于应用程序的需求。

  2. BASE 模型

    • 基本可用性(Basically Available):系统保持基本的可用性,即使出现故障,也能继续运行。系统可以放宽一些一致性要求,以保持可用性。

    • 柔性状态(Soft state):系统的状态可以随时发生变化,而不一定要保持强一致性。在某些时刻,系统的部分数据可能会处于不一致状态,但这并不妨碍系统的正常运行。

    • 最终一致性(Eventually Consistent):最终一致性意味着系统最终会在某个时刻达到一致状态,尽管在某些时刻可能不是一致的。系统通过异步复制等机制来逐渐将数据带入一致状态。

    BASE 模型强调了在分布式系统中放宽一致性要求,以提高可用性和性能。它适用于一些大规模、高并发、高可用性的系统,如互联网应用和分布式数据库。

02一致性协议与Paxos算法

在对分布式系统进行架构设计的过程中,往往需要在一致性和可用性之间反复权衡,于是产生了一系列的一致性协议和算法,其中最著名的就是二阶段提交协议(2PC)、三阶段提交协议(3PC)和Paxos算法了。

2PC(Two-Phase Commit)

整个事务是分为两个阶段提交,二阶段提交是一种强一致性的算法。

阶段一:提交事务请求
  1. 事务询问

    协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应。

  2. 执行事务

    各个参与者节点执行事务操作,并将 Undo 和 Redo 信息记录到事务日志中,尽量把提交过程中所有消耗时间的操作和准备都提前完成确保后面100%成功提交事务。

  3. 各个参与者向协调者反馈事务询问的响应

    如果各个参与者成功执行了事务操作,那么就反馈给参与者 yes 的响应,表示事务可以执行; 如果参与者没有成功执行事务,就反馈给协调者 no 的响应,表示事务不可以执行。

阶段二:执行事务提交

在阶段二中,协调者会根据反馈的情况决定最终是否可以进行事务提交操作。

  • 执行事务提交(都返回yes)

    1. 发送提交请求

      协调者向所有参与者节点发出Commit请求。

    2. 事务提交

      参与者接收到Commit请求后,正式执行事务提交操作,并在完成提交后释放事务执行期间占用的资源

    3. 反馈事务提交结果。

      参与者完成事务提交之后,向协调者发送Ack消息。

    4. 完成事务

      协调者收到所有参与者反馈的Ack消息后,完成事务

聊聊分布式架构09——分布式中的一致性协议,分布式架构,分布式,架构

  • 中断事务(任何一个返回了no或者等待超时)

    1. 发送回滚请求

      协调者向所有参与者发出RollBack请求。

    2. 事务回滚

      参与者接收到RollBack请求后,利用阶段一的Undo信息执行回滚,在回滚完成后释放事务执行期间占用的资源。

    3. 反馈事务回滚结果

      参与者在完成事务回滚之后,向协调者发送Ack消息。

    4. 中断事务

      协调者接收到所有参与者反馈的Ack消息后,完成事务中断。

聊聊分布式架构09——分布式中的一致性协议,分布式架构,分布式,架构

优缺点
  • 优点:原理简单,实现方便。

  • 缺点:同步阻塞,单点问题,脑裂。

3PC(Three-Phase Commit)

3PC是2PC的改进版,将二阶段提交协议的“提交事务请求”过程一分为二,形成由CanCommit、PreCommit和do Commit三个阶段组成的事务处理协议,如下所示:

阶段一:CanCommit
  1. 事务询问

    协调者向所有参与者发送一个包含事务内容的CanCommit请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。

  2. 各参与者向协调者反馈事务询问的响应

    参与者在接收到来自协调者的CanCommit请求后,正常情况下,如果自身认为能顺利执行事务,会反馈yes,进入预备状态,否则反馈no。

阶段二:PreCommit

根据阶段一的反馈情况,包含两种可能:

  • 执行事务预提交(都返回yes)

    1. 发送预提交请求

      协调者向所有参与者发出PreCommit的请求,进入Prepared阶段。

    2. 事务预提交

      参与者收到PreCommit请求后,执行实务操作,记录Undo和Redo信息到事务日志中。

    3. 各参与者向协调者反馈事务执行的响应

      如果参与者成功执行了事务操作,反馈给协调者Ack响应,等待最终指令:提交(commit)或中止(abort)

  • 中断事务(任何一个返回了no或者等待超时)

    1. 发送中断请求

      协调者向所有参与者发出abort请求。

    2. 中断事务

      无论是收到协调者的abort请求,还是等待协调者请求过程中出现超时,参与者都会中断事务。

阶段三:doCommit

该阶段会进行真正的提交,可能包含两种情况。

  • 执行提交

    1. 发送提交请求

      假设协调者正常,并且收到所有的参与者的Ack响应,将从“预提交”转为“提交”状态,向所有参与者发送doCommit请求。

    2. 事务提交

      参与者收到doCommit请求,正式执行事务提交,并在完成事务提交后释放资源。

    3. 反馈事务提交结果

      参与者完成事务提交之后,向协调者发送Ack消息。

    4. 完成事务

      协调者收到所有参与者反馈的Ack消息,完成事务。

  • 中断事务

    1. 发送中断请求

      假设协调者正常,向所有参与者节点发送abort请求。

    2. 事务回滚

      参与者收到abort请求,利用阶段二中的Undo信息执行事务回滚,回滚完成后释放资源。

    3. 反馈事务回滚结果

      参与者完成事务回滚后,向协调者发送Ack消息。

    4. 中断事务

      协调者收到所有参与者反馈的Ack消息后,中断事务。

一旦进入阶段三,可能会存在一下两种故障:

  • 协调者出现问题

  • 协调者与参与者之间网络出现问题

无论哪种情况,最终参与者都会在等待超时后,继续进行事务提交。

优缺点
  • 优点:降低了参与者的阻塞范围,在单点故障之后继续达成一致。

  • 缺点:网络分区的出现会导致协调者和参与者无法正常地网络通信,参与者仍会提交事务,会导致数据的不一致性。

Paxos算法

Paxos算法是1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。它需要解决的问题是如何在一个可能发生异常的分布式系统中快速且正确地在集群内部对某个数据的值达成一致,且不会破坏系统的一致性。

拜占庭将军问题

在拜占庭帝国,有一位将军领导一支军队,他需要协调攻城的计划。将军的军队分布在城市周围,而城市之间的通信需要通过信使传递消息。然而,帝国中存在叛变的将军,他们可能会传递虚假的消息以迷惑其他将军。问题的目标是找到一种方法,使得忠诚的将军能够在叛变的将军存在的情况下达成共识,以决定是否进攻城市。

Paxos 算法概述

是一种用于分布式系统中的共识算法,它的主要目标是使多个节点在分布式环境中达成一致的决策。

Paxos 算法解决了拜占庭将军问题中的信任问题和共识问题。它具有以下基本概念:

  1. 提议者(Proposers):这些是节点,它们提出值(决策)并试图说服其他节点接受这个值。

  2. 接受者(Acceptors):这些是节点,它们接受提议并投票赞成或反对提议。

  3. 学习者(Learners):这些是节点,它们学习提议的结果并在需要时应用它们。

Paxos 算法的基本流程
  1. 提议阶段

    • 提议者向接受者提出提议(值)。

    • 接受者根据一定规则投票赞成或反对提议。规则包括:一个接受者只能投票一次,接受者可以投赞成或反对票,如果一个接受者已经接受了一个提议,它不能再接受其他提议。

  2. 批准阶段

    • 如果提议者获得了多数接受者的赞成票,提议被批准。

    • 提议者通知所有节点提案已被批准,节点学习(获取)这个值。

  3. 学习阶段

    • 学习者学习提案的结果,并在需要时应用它。

03Google Chubby对Paxos的实现

Google Chubby 是 Google 内部使用的分布式锁服务,它基于 Paxos 算法实现。Chubby 允许分布式系统在多个节点之间协同工作,以确保数据一致性和强一致性。Google Chubby 不是开源的。

Chubby 本来应该被设计成一个包含Paxos算法的协议库,应用程序可以基于这个库方便地使用Paxos算法,但是它并没有这么做,而是把Chubby设计成了一个需要访问中心化节点的分布式锁服务。既然是一个服务,那么它肯定需要是一个高可靠的服务。所以 Chubby 被构建为一个集群,集群中存在一个中心节点(MASTER),采用Paxos协议,通过投票的方式来选举一个获得过半票数的服务器作为 Master,在 chubby 集群中,每个服务器都会维护一份数据的副本,在实际的运行过程中, 只有 master 服务器能执行事务操作,其他服务器都是使用paxos协议从master节点同步最新的数据。

以下是关于 Google Chubby 和其对 Paxos 的实现的一些简要信息:

  1. Paxos 算法实现:Chubby 使用 Paxos 算法作为其核心共识算法。Paxos 用于确保 Chubby 中的数据一致性。这意味着 Chubby 使用多个 Paxos 实例来处理不同类型的数据,例如锁、配置信息等。

  2. 领导者选举:Chubby 中有一个特殊的节点称为 "master" 或 "leader",它负责协调锁服务并维护一致性。Chubby 使用 Paxos 来选择 leader。Leader 选举是 Paxos 的一个实例,用于确保只有一个节点成为 leader。

  3. 分布式锁管理:Chubby 提供了分布式锁服务,使得多个客户端可以竞争获取锁。这些锁的管理也基于 Paxos,确保锁的一致性和互斥性。

  4. 配置管理:Chubby 用于存储和维护配置信息,如服务的地址、节点信息等。这也是一个使用 Paxos 来维护一致性的应用。

  5. 故障容忍性:Chubby 具有一定的故障容忍性。即使一些节点出现故障,Chubby 仍然能够继续工作。Paxos 的特性使得 Chubby 在节点失效和网络分区的情况下能够维护一致性。

  6. 性能优化:Chubby 做了一些性能优化,以提高 Paxos 算法的效率。这包括缓存机制和快速恢复机制。

参考书籍:从Paxos到Zookeeper 分布式一致性原理与实践 [倪超著]文章来源地址https://www.toymoban.com/news/detail-720489.html

到了这里,关于聊聊分布式架构09——分布式中的一致性协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式数据库-事务一致性

    version: v-2023060601 author: 路__ 分布式数据库的“强一致性”应该包含两个方面: serializability(串行) and linearizability(线性一致) ,上述图为“Highly Available Transactions: Virtues and Limitations”论文中对于一致性模型的介绍。图中箭头表示一致性模型之间的关系。对于异步网络上的分

    2024年02月08日
    浏览(37)
  • 【分布式】一致性哈希和哈希槽

    当我们拥有了多台存储服务器之后,现在有多个key,希望可以将这些个key均匀的缓存到这些服务器上,可以使用哪些方案呢? 1.1 直接哈希取模 这是一种最容易想到的方法,使用取模算法hash(key)% N,对key进行hash运算后取模,N是机器的数量。key进行hash后的结果对3取模,得

    2024年02月03日
    浏览(28)
  • 分布式系统的一致性级别划分及Zookeeper一致性级别分析

    在谈到Zookeeper的一致性是哪种级别的一致性问题,以及CAP原则中的C是哪一种一致性级别时有些疑惑。 下面是大多数文章中提到的一致性级别 一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。 1.1 强一致性(Stric

    2024年04月12日
    浏览(39)
  • RocketMQ分布式事务 -> 最终一致性实现

    · 分布式事务的问题常在业务与面试中被提及, 近日摸鱼看到这篇文章, 阐述的非常通俗易懂, 固持久化下来我博客中, 也以便于我二刷 转载源 : 基于RocketMQ分布式事务 - 完整示例 本文代码不只是简单的demo,考虑到一些异常情况、幂等性消费和死信队列等情况,尽量向可靠业务

    2024年02月15日
    浏览(38)
  • 分布式「走进分布式一致性协议」从2PC、3PC、Paxos 到 ZAB

    设计一个分布式系统必定会遇到一个问题—— 因为分区容忍性(partition tolerance)的存在,就必定要求我们需要在系统可用性(availability)和数据一致性(consistency)中做出权衡 。这就是著名的 CAP 一致性(Consistency)是指多副本(Replications)问题中的数据一致性。关于分布式

    2024年02月03日
    浏览(55)
  • Elasticsearch分布式一致性原理剖析(一)-节点篇

    “Elasticsearch分布式一致性原理剖析”系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式、原理以及其存在的问题等(基于6.2版本)。 ES目前是最流行的分布式搜索引擎系统,其使用Lucene作为单机存储引擎并提供强大的搜索查询能力。学习其搜索原理,则

    2024年01月24日
    浏览(59)
  • 分布式系统共识机制:一致性算法设计思想

    这次以一个宏观的角度去总结 自己学习过的一致性算法。一致性算法的目标就是让分布式系统里的大部分节点 保持数据一致。 区块链中的共识算法,pow、pos这类就属于这个范围,但他们仅仅是在区块链领域内应用的,下面介绍一致性算法是在分布式系统中 应用广泛的,当然

    2023年04月16日
    浏览(38)
  • 本地消息表模式保障分布式系统最终一致性

    订单表 消息表 process_queue 库存系统 return_queue 说明 成功 失败 / / / 订单库回滚 成功 成功 失败 / / 订单系统重发消息 成功 成功 成功 失败 / Broker自动重试,注意接口幂等 成功 成功 成功 库存不足退回 / Broker通知回掉,订单/消息作废 成功 成功 成功 成功 失败 订单系统重发消

    2024年04月28日
    浏览(25)
  • 分布式一致性算法——Paxos 和 Raft 算法

    本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见100个问题搞定大数据理论体系 Paxos和Raft算法都是 分布式一致性算法 ,它们的目的都是 在一个分布式系统

    2024年01月20日
    浏览(51)
  • Zookeeper分布式一致性协议ZAB源码剖析

    ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议,ZAB是Paxos算法的一种简化实现。 ZAB 协议定义:ZAB 协议是为分布式协调服

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包