欢迎光临
我们一直在努力

分布式一致性方案之强一致性方案:2PC、3PC【从0带你理解】

前言

在分布式系统架构日益普及的今天,数据一致性问题成为了后端开发必须面对的挑战。当业务需要跨越多个数据库或服务时,如何保证数据的强一致性成为了一个核心问题。两阶段提交(2PC)和三阶段提交(3PC)作为经典的分布式事务协议,那么今天阿亮就来带同学们学习一下分布式强一致性方案–2PC、3PC。

一、强一致性是什么?

大家是否知道CAP呢,所谓的C就是指我们的Consistency,也就是一致性,特指的就是强一致性。

强一致性(Strong Consistency)是指在分布式系统中,任何时刻所有节点看到的数据都是相同的。当一个写操作完成后,后续的读操作都能立即读取到最新的数据值。这种一致性模型对于金融交易、订单处理等对数据准确性要求极高的场景至关重要。

那么在分布式盛行的现在,强一致性如何保证呢,主要的核心理论就是通过2PC、3PC来实现分布式系统的强一致性。

二、2PC

2.1 基本理论

两阶段提交协议(Two-Phase Commit Protocol,2PC)是一种分布式协调协议,常用于分布式事务处理,确保所有参与者要么全部完成事务,要么全部不完成。2PC的核心思想是将事务提交过程拆分为两个阶段:准备阶段和提交阶段。

2.2 协议流程

2PC协议涉及一个协调者(Coordinator)和多个参与者(Participants):

阶段一:准备阶段(Prepare Phase)

  • 协调者向所有参与者发送准备请求
  • 各参与者执行事务操作,将Undo和Redo信息记入日志
  • 参与者向协调者回复同意(Yes)或拒绝(No)
  • 阶段二:提交阶段(Commit Phase)

    • 如果所有参与者都同意:
    • 协调者发送提交请求
    • 各参与者正式提交事务
    • 参与者向协调者发送确认
    • 协调者收到所有确认后完成事务
    • 如果有任何参与者拒绝:
    • 协调者发送回滚请求
    • 各参与者执行回滚操作
    • 参与者向协调者发送确认
    • 协调者收到所有确认后取消事务

    2.3 优缺点分析

    优点:

    • 协议概念清晰,流程简单易理解 
    • 能够保证强一致性,所有节点数据状态完全一致
    • 实现相对简单,许多分布式关系型数据管理系统采用此协议来完成分布式事务 

    缺点:

    • 同步阻塞问题:在提交阶段,所有参与者都处于阻塞状态,等待协调者指令
    • 单点故障:协调者出现故障,整个系统将无法继续执行
    • 数据不一致风险:在网络分区的情况下,可能导致部分节点提交,部分节点回滚
    • 性能瓶颈:需要多次网络通信,增加了事务响应时间

    三、3PC

    3.1 基本理论

    三阶段提交协议(Three-Phase Commit,3PC)是在两阶段提交协议(2PC)的基础上发展而来的,用于解决2PC的一些问题,特别是协调者崩溃时可能导致的阻塞问题。3PC的核心改进是将2PC的"提交事务请求"过程一分为二,形成了三个阶段:CanCommit、PreCommit和DoCommit。

    3.2 协议流程

    阶段一:CanCommit阶段

  • 协调者向所有参与者发送CanCommit请求,询问是否可以执行事务
  • 各参与者检查自身状态,回复可以(Yes)或不可以(No)
  • 阶段二:PreCommit阶段

    • 如果所有参与者回复Yes:
    • 协调者发送PreCommit请求
    • 参与者执行事务操作,记录Undo和Redo日志
    • 参与者向协调者回复准备就绪
    • 如果有任何参与者回复No:
    • 协调者发送abort请求
    • 事务终止

    阶段三:DoCommit阶段

    • 如果协调者收到所有参与者的准备就绪回复:
    • 协调者发送DoCommit请求
    • 参与者正式提交事务
    • 参与者发送确认
    • 事务完成
    • 如果协调者未收到所有回复(超时):
    • 协调者发送abort请求
    • 事务回滚

    3.3 优缺点分析

    优点:

    • 非阻塞特性:Unlike the two-phase commit protocol (2PC), 3PC is non-blocking. 8
    • 故障恢复能力强:当协调者故障时,参与者可以根据超时机制自动决策
    • 减少了阻塞时间:通过引入超时机制,避免了长时间的资源锁定
    • 提高了系统可用性:3PC places an upper bound on the amount of time required before a transaction. 8

    缺点:

    • 协议复杂度增加:相比2PC,实现更加复杂
    • 仍然无法完全避免不一致:在网络分区严重的情况下,仍可能出现数据不一致
    • 性能开销更大:增加了额外的通信阶段,事务延迟更高
    • 应用场景有限:由于复杂性,在实际生产环境中应用不如2PC广泛

    四、使用场景

    2PC适用场景:

    • 传统银行系统中的跨行转账
    • 企业级应用中的分布式数据库事务
    • 网络环境稳定、对性能要求较高的场景
    • 需要强一致性的核心业务系统

    3PC适用场景:

    • 跨地域分布的微服务架构
    • 网络不稳定的移动应用场景
    • 对系统可用性要求极高的场景
    • 能够容忍较高事务延迟的业务

    五、其他方案

    这些都是最终一致性的,不是强一致性的方案,但是换取来更大的可用性,也就是AP

    1. TCC(Try-Confirm-Cancel)

    • 采用补偿机制,将事务拆分为三个阶段
    • 适合高并发场景,性能优于2PC

    2. Saga模式

    • 长事务解决方案,通过事件驱动实现最终一致性
    • 适用于业务流程较长的场景

    3. 基于消息的最终一致性

    • 通过消息队列实现异步事务处理
    • 牺牲强一致性换取高可用性和性能

    总结

    分布式一致性问题是设计系统时必须考虑的问题,通过各种方案和场景,选取合适的,是最适合的,面试中也经常会问到这些问题。

    赞(0)
    未经允许不得转载:171主机测评 » 分布式一致性方案之强一致性方案:2PC、3PC【从0带你理解】
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址