十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

easy-vibe 分布式系统核心原理:从 CAP 定理到 Raft 共识与分布式事务实战指南

easy-vibe 分布式系统核心原理:从 CAP 定理到 Raft 共识与分布式事务实战指南 easy-vibe 分布式系统核心原理从 CAP 定理到 Raft 共识与分布式事务实战指南【免费下载链接】easy-vibe vibe coding 101The first course for AI-native product builders.项目地址: https://gitcode.com/GitHub_Trending/ea/easy-vibe导读当一台机器的算力、存储与容错能力都不再够用时真正的工程问题才刚刚开始。本篇文章基于 easy-vibe 课程的《分布式系统核心原理》章节系统讲解分布式系统的三大核心主题CAP 定理、一致性模型与共识算法Paxos、Raft、ZAB、分布式事务2PC、Saga、TCC。读完本文你将理解为什么分布式系统没有免费午餐掌握一致性、可用性、分区容错之间的权衡逻辑并能在实际架构决策中判断该选择哪种一致性模型、哪种共识算法与哪种分布式事务方案。本文内容以 distributed-systems.md 为骨架并结合仓库中 high-availability.md、monolith-to-microservices.md 等姊妹章节进行交叉印证。0. 概览为什么需要分布式系统单机系统简单可靠但它有三个无法逾越的瓶颈瓶颈描述分布式系统的解法性能上限单台机器的 CPU、内存、磁盘存在物理极限水平扩展多台机器分担负载单点故障一台机器宕机整个服务随之宕机冗余副本多台机器互为备份地理延迟用户遍布全球一台机器只能位于一个位置多地域部署就近服务用户然而分布式系统在解决上述问题的同时引入了新的复杂度不可靠的网络、不同步的时钟、部分故障、数据一致性…… 这些正是本篇文章要讨论的挑战。Peter Deutsch 的分布式计算八大谬误分布式环境下以下假设全部是错的网络是可靠的延迟为零带宽是无限的网络是安全的拓扑结构不会改变只有一个管理员传输成本为零网络是同质的这八条谬误是理解分布式系统复杂性的起点网络包会丢失、会乱序、会重放机器之间的时钟会有偏差一个节点没响应并不等于已死亡。在 easy-vibe 的高可用章节中我们会看到这些谬误如何在心跳检测、健康检查与故障转移的具体实现中反复出现。1. CAP 定理分布式系统的不可能三角2000 年Eric Brewer 提出 CAP 猜想后被证明为定理一个分布式系统最多只能同时满足以下三个特性中的两个。特性含义通俗解释Consistency一致性所有节点在任何时刻看到相同的数据在任何 ATM 上查询余额结果都一致Availability可用性每个请求都能得到无错误的响应系统总能应答你绝不说服务不可用Partition tolerance分区容错性网络分区时系统仍能继续工作即使部分网线被切断系统依然运转为什么 P 是必选项在分布式环境中网络分区P是不可避免的——光纤被挖断、交换机故障、机房断网都随时可能发生。因此P 是必选项真正的抉择发生在 C 与 A 之间选择 CP分区发生时拒绝不安全的请求保证数据正确性 → 适合金融、库存管理选择 AP分区发生时继续工作但数据可能暂时不一致 → 适合社交、内容类业务CAP 不是非黑即白真实系统并非简单的CP 或 AP。许多系统对不同的操作做出不同的取舍——例如同一个数据库可以把读操作设计为 AP允许读到旧数据把写操作设计为 CP要求多数派确认。与高可用架构的呼应CAP 中的可用性与高可用章节讨论的几个 9SLA直接相关可用性 运行时间 / 总时间 × 100%。当系统为了追求强一致性而需要等待同步确认时单次请求的耗时上升、故障窗口变大可用性就会下降——这就是 CAP 权衡在运维指标上的投影。2. 一致性模型数据同步的严格程度光谱一致性不是一个开关有或没有而是一个光谱。不同的一致性模型在正确性与性能之间做出不同的取舍。一致性模型对比模型保证延迟适用场景强一致性读到的值总是最新写入的值高等待同步银行转账、库存扣减最终一致性所有副本最终一致但期间可能读到旧值低写操作立即返回社交动态、DNS因果一致性有因果关系操作保证按序中评论回复、协同编辑线性一致性所有操作看起来像在单机上按顺序执行最高分布式锁、Leader 选举会话一致性同一会话内保证读到自己的写入低-中个人用户数据读己之写Read Your Own Writes一致性最常见的实践需求是用户修改自己的数据后能立刻看到更新其他用户可以稍晚看到。这被称为读己之写一致性是最终一致性的一种实用化增强。一致性模型在共识算法中的落点线性一致性是其中最严格的一档——它要求所有操作看起来像在单机上按序执行。这正是第 4 节中 Raft、ZAB 等共识算法所追求的目标通过 Leader 串行化写操作、多数派复制日志从而对外呈现线性一致的行为。理解这一点就能明白共识算法与一致性模型其实是同一枚硬币的两面——算法是手段模型是目标。3. 八大挑战分布式的雷区分布式系统的复杂性不是由单一问题造成的而是多个问题交织叠加。以下是八个最核心的挑战不可靠的网络数据包可能丢失、延迟、乱序、重复超时重试可能造成重复请求时钟不同步机器间时钟存在偏差导致事件排序困难时间戳不可直接信赖网络分区节点间通信中断集群被切成多个孤岛部分故障节点可能处于一半工作、一半异常的亚健康状态顺序问题分布式环境下无法用单一全局时钟确定事件先后数据一致性多副本之间的数据同步难以即时完成Split-Brain脑裂多个节点同时认为自己是主节点各自为政消息乱序/重复消息传递的时序与幂等性难以保证挑战之间的关联这八大挑战并非孤立存在而是环环相扣不可靠的网络→ 引发网络分区→ 触发CAP 权衡时钟不同步→ 导致事件排序困难→ 影响数据一致性部分故障→ 可能引发Split-Brain→ 需要共识算法来裁决数据一致性→ 需要分布式事务→ 但分布式事务又被不可靠的网络所制约没有银弹分布式系统没有完美的解决方案只有合适的权衡。理解这些挑战的本质是在系统设计时做出正确取舍的关键。与故障检测机制的印证八大挑战中的部分故障与Split-Brain在 easy-vibe 的高可用章节中有具体的工程化答案心跳检测通过周期性我还活着信号探测节点存活性连续 N 次未收到心跳即判定节点故障而Split-Brain 的经典解法是引入 Quorum法定人数节点——至少 3 个节点投票决定谁是主节点避免两个节点同时称王。4. 共识算法多台机器如何达成一致共识算法是分布式系统的核心——它解决的核心问题是即使部分节点故障或网络延迟多个节点如何对一个值达成一致。4.1 Paxos由 Leslie Lamport 于 1990 年提出是第一个经过数学证明的共识算法。角色职责Proposer提议者提出提案值Acceptor接受者投票决定接受或拒绝提案Learner学习者学习最终被选定的值两阶段流程Prepare 阶段Proposer 发送提案编号Acceptor 承诺不再接受编号更小的提案Accept 阶段Proposer 发送具体值若被多数派 Acceptor 接受提案即被选定Paxos 的问题Paxos 虽然正确却以难以理解和实现著称。Lamport 本人的论文使用了希腊议会寓言来类比反而让更多人一头雾水。4.2 Raft为可理解性而生2014 年Diego Ongaro 提出 Raft目标正是打造一个易于理解的 Paxos。它把共识问题拆解为三个子问题子问题描述Leader 选举集群中选出一个 Leader所有写操作经由 Leader日志复制Leader 将操作日志复制到所有 Follower安全性保证已提交的日志条目不会被覆盖Raft 的核心流程集群启动时所有节点都是 Follower当某个 Follower 长时间未收到 Leader 心跳它转为 Candidate 并发起选举获得多数派选票的 Candidate 成为新 LeaderLeader 接收客户端请求日志复制到多数派节点后即提交Raft 的 Leader 心跳机制与高可用章节中的心跳检测、自动故障转移形成呼应Raft 用心跳维持 Leader 权威并探测节点存活这既是共识协议的组成部分也是高可用故障检测的底层实现。4.3 共识算法对比算法提出时间可理解性代表系统Paxos1990难Google ChubbyRaft2014易etcd、Consul、TiKVZAB2011中ZooKeeperEPaxos2013难以学术研究为主5. 分布式事务跨节点的全有或全无单机数据库的事务可以用本地锁和日志实现 ACID。但当一个业务操作涉及多个服务/数据库时如何保证原子性5.1 两阶段提交2PC最经典的分布式事务协议分为两个阶段阶段协调者动作参与者动作Prepare询问所有参与者能否提交执行操作但不提交回复 Yes/NoCommit全部 Yes 则发送 Commit正式提交只要有 No 则全部回滚2PC 的问题阻塞协调者在 Prepare 后宕机参与者会无限期等待单点故障协调者是单点一旦故障事务就卡死性能差需要多次网络往返持锁时间长5.2 Saga 模式Saga 将一个大事务拆分为多个本地事务每个本地事务都有对应的补偿操作。当某一步失败时按逆序执行补偿。电商下单的 Saga 示例步骤正向操作补偿操作T1创建订单待支付取消订单T2扣减库存恢复库存T3扣减余额退回余额T4确认订单已支付—当 T3扣减余额失败时执行 C2恢复库存→ C1取消订单。两种编排方式Choreography编排每个服务监听事件并自行决定下一步。简单但全局状态难以追踪Orchestration编舞/集中协调由中心协调者控制流程。清晰但协调者是单点5.3 TCCTry-Confirm-CancelTCC 是 2PC 的业务层实现把每个操作拆为三个阶段阶段描述示例扣库存Try预留资源但不真正执行冻结 10 件可用库存 -10冻结库存 10Confirm确认执行消耗预留资源冻结库存 -10真正扣减Cancel取消预留释放资源冻结库存 -10可用库存 10恢复5.4 三种方案对比方案一致性性能复杂度适用场景2PC强一致低中数据库层面的跨库事务Saga最终一致高高长流程业务订单、物流TCC最终一致中最高高可靠金融场景实践建议单库事务够用时不要使用分布式事务大多数业务场景Saga 消息队列即可满足TCC 适合一致性要求最高的金融场景但开发成本很高2PC 适合由数据库中间件自动处理如 ShardingSphere与微服务拆分章节的呼应分布式事务的引入往往源于服务拆分。easy-vibe 的微服务架构章节明确指出数据拆分是微服务化最痛苦的部分——每个服务应拥有自己的数据库但跨服务的 JOIN 无法直接执行跨库事务无法使用本地事务。该章节给出的解决方案正是 Saga、本地消息表、最终一致性与本篇文章的 Saga 模式、TCC 方案直接呼应。换言之接受最终一致性是微服务架构的关键思维转变。总结分布式系统是现代互联网的基础设施但其复杂性远超单机系统。理解这些挑战不是为了解决它们很多是根本性的而是为了在系统设计时做出正确的权衡。回顾本章核心要点CAP 定理网络分区不可避免真正的抉择是一致性与可用性之间的权衡一致性模型从强一致到最终一致是一个光谱按业务需求选择八大挑战不可靠网络、时钟不同步、网络分区、Split-Brain 等相互关联共识算法Raft 是当前实践性最强的共识算法etcd/Consul 均基于它分布式事务Saga 适合大多数场景TCC 适合金融场景2PC 适合数据库层面延伸阅读在 easy-vibe 仓库中与本文主题强相关的配套资料还包括高可用容灾设计 — 深入讲解 SLA几个 9、心跳检测、Quorum 防脑裂、熔断器与混沌工程是分布式系统故障处理能力的落地篇从单体到微服务架构演进 — 讲解 DDD 限界上下文拆分、Strangler Fig 模式、服务间通信与数据库拆分是分布式系统在实际业务中的演进路径系统设计方法论 — 从宏观视角把 CAP、一致性、可用性等概念组织进完整的系统设计流程本文英文原版 distributed-systems.md以及 中文版 便于对照学习附录总览 index.md 中后端基础分类的完整知识地图可定位本文在整门课程知识体系中的位置【免费下载链接】easy-vibe vibe coding 101The first course for AI-native product builders.项目地址: https://gitcode.com/GitHub_Trending/ea/easy-vibe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表