<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>《后端架构设计·分布式与数据一致性》 · 全书目录与章节索引（45 篇） on PlumePHP</title><link>https://plumephp.com/posts/books/%E5%90%8E%E7%AB%AF%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%8E%E6%95%B0%E6%8D%AE%E4%B8%80%E8%87%B4%E6%80%A7/</link><description>Recent content in 《后端架构设计·分布式与数据一致性》 · 全书目录与章节索引（45 篇） on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 02 Nov 2026 20:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/books/%E5%90%8E%E7%AB%AF%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%8E%E6%95%B0%E6%8D%AE%E4%B8%80%E8%87%B4%E6%80%A7/index.xml" rel="self" type="application/rss+xml"/><item><title>《后端架构设计·分布式与数据一致性》附录 C 分布式一致性验证清单</title><link>https://plumephp.com/be-arch-dist-appendix-c-consistency-test-checklist/</link><pubDate>Mon, 02 Nov 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-appendix-c-consistency-test-checklist/</guid><description>卷三附录 C：把单主复制切换、跨分片下单、重复消费、锁过期、时钟回拨、对账收敛六类场景写成可执行验证，每类给出前置条件、注入手段、观测信号、判定不变量、通过标准与回滚方式，并附上线前二十条检查、三态判定口径、演练顺序、数字口径与执行记录模板。</description></item><item><title>《后端架构设计·分布式与数据一致性》附录 B Go/Java 分布式组件对照</title><link>https://plumephp.com/be-arch-dist-appendix-b-go-java-distributed-contrast/</link><pubDate>Mon, 02 Nov 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-appendix-b-go-java-distributed-contrast/</guid><description>卷三附录 B：只做结构对照，不排名。覆盖 goroutine 与虚拟线程的调度和阻塞语义、CompletableFuture 与 context 的取消传播、ReentrantLock 与 sync.Mutex 的重入差异、Clock 与 time.Time 的单调时钟、ConcurrentHashMap 与 sync.Map 的适用边界，以及分布式 ID、租约、重试的库生态差异。</description></item><item><title>《后端架构设计·分布式与数据一致性》附录 A 一致性模型与故障语义速查</title><link>https://plumephp.com/be-arch-dist-appendix-a-consistency-models-cheatsheet/</link><pubDate>Mon, 02 Nov 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-appendix-a-consistency-models-cheatsheet/</guid><description>卷三附录 A：用判据、反例与业务映射三种口径整理线性一致、顺序一致、因果一致、读己之写、单调读和最终一致，说明崩溃停止、崩溃恢复、消息丢失、重复、分区与拜占庭六类故障语义，纠正 CAP 与 PACELC 的常见误读，并给出订单、库存、支付不变量到最弱一致性模型的对照表。</description></item><item><title>《后端架构设计·分布式与数据一致性》13.3 进入卷四：演进与治理</title><link>https://plumephp.com/be-arch-dist-13-3-into-volume-four/</link><pubDate>Mon, 02 Nov 2026 09:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-13-3-into-volume-four/</guid><description>卷三的 L2 实验只能证明状态机和故障处理，不能证明共识性能、跨单元冲突率、演练覆盖和组织成本。本节把四类未证明假设整理成带责任、指标、阈值、窗口和截止日期的交接表，并给出一个 Go 校验器，拒绝没有验收口径、缺少截止日期或把未证明项标成已接受的清单。</description></item><item><title>《后端架构设计·分布式与数据一致性》13.2 一次跨库下单的一致性验证</title><link>https://plumephp.com/be-arch-dist-13-2-cross-shard-order-consistency-test/</link><pubDate>Mon, 02 Nov 2026 09:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-13-2-cross-shard-order-consistency-test/</guid><description>订单在 3 号分片、库存在 7 号分片时，本地事务失效。本节用进程内 L2 实验跑通 outbox + Saga 下单链路，注入重复投递、提交后超时、relay 崩溃和支付拒绝，断言库存不超卖、订单状态与预占一致、支付不重复，并让对账任务把差异收敛到零。</description></item><item><title>《后端架构设计·分布式与数据一致性》13.1 订单系统的分布式改造：从单库到分片</title><link>https://plumephp.com/be-arch-dist-13-1-order-sharding-migration/</link><pubDate>Mon, 02 Nov 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-13-1-order-sharding-migration/</guid><description>订单库从 4 个分片扩到 5 个时，按用户取模会让八成键搬家。本节用可运行的 Go 分片实验比较取模与 rendezvous 路由，给出按用户查询与跨分片查询的边界、全局 ID 的时钟回拨保护、双写迁移的 journal 与切换门，以及只允许在切换前执行的回滚条件。</description></item><item><title>《后端架构设计·分布式与数据一致性》12.3 容灾切换：RTO/RPO、演练与回切</title><link>https://plumephp.com/be-arch-dist-12-3-dr-switchover-rto-rpo-drill/</link><pubDate>Sun, 01 Nov 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-12-3-dr-switchover-rto-rpo-drill/</guid><description>从一次只读降级后没人敢回切的订单故障出发，把 RTO 拆成依赖图上的关键路径、把 RPO 拆成已确认序号与副本序号的差，给出可运行的状态机、RPO 计算与 RTO 关键路径 Go 实现，附本机测试输出、演练脚本、验收表与回切前置条件，并明确跨机房数字必须由真实演练校准。</description></item><item><title>《后端架构设计·分布式与数据一致性》12.2 数据同步与冲突：双向复制、回环与归属</title><link>https://plumephp.com/be-arch-dist-12-2-bidirectional-replication-loop-ownership/</link><pubDate>Sun, 01 Nov 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-12-2-bidirectional-replication-loop-ownership/</guid><description>从订单支付状态在两个机房互相覆盖的具体故障出发，说明双向复制为什么必须先解决回环与归属，再谈冲突合并；给出带路径回环检测、归属校验和版本向量判定的 Go 副本实现，用本机测试覆盖 A 到 B 再回 A 的回环、重复投递、非归属写入、陈旧事件与并发版本，并附冲突处置决策表。</description></item><item><title>《后端架构设计·分布式与数据一致性》12.1 多活拓扑：单元化、双活与就近接入</title><link>https://plumephp.com/be-arch-dist-12-1-multi-active-cell-dual-active/</link><pubDate>Sun, 01 Nov 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-12-1-multi-active-cell-dual-active/</guid><description>从一个单元故障却拖垮全局订单入口的场景出发，拆解单元化、同城双活与异地多活的隔离边界，给出带容量校验和故障影响计算的 Go 拓扑模型，用三组可运行测试对比单单元故障、双单元同时故障与仅备用单元故障时的写入阻塞、读到旧数据和冗余损失，并附拓扑选型决策表与退出条件。</description></item><item><title>《后端架构设计·分布式与数据一致性》11.3 延迟任务、时间轮与错过触发的补偿</title><link>https://plumephp.com/be-arch-dist-11-3-delayed-task-timing-wheel-misfire/</link><pubDate>Sun, 01 Nov 2026 09:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-11-3-delayed-task-timing-wheel-misfire/</guid><description>用 1000 个延迟任务对比最小堆与 64 桶时间轮的排序结果和扫描成本，实测 heap 16997 次比较、wheel 4416 次检查；给出按 next、now、间隔与上限计算 misfire 补偿的 Go 实现，覆盖补跑一次、跳过与大规模补跑上限的边界。</description></item><item><title>《后端架构设计·分布式与数据一致性》11.2 任务分片、幂等重跑与进度检查点</title><link>https://plumephp.com/be-arch-dist-11-2-task-sharding-idempotent-rerun-checkpoint/</link><pubDate>Sun, 01 Nov 2026 09:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-11-2-task-sharding-idempotent-rerun-checkpoint/</guid><description>把 1000 个未支付订单拆成 4 个分片，用每 10 条提交一次的检查点跑批；在副作用之后、检查点提交之前注入崩溃，实测重放 7 条、去重后副作用仍为 1000 次，并给出带 epoch 的检查点与幂等 Sink 的 Go 实现和崩溃恢复边界。</description></item><item><title>《后端架构设计·分布式与数据一致性》11.1 调度模型：轮询、租约与领导者选举</title><link>https://plumephp.com/be-arch-dist-11-1-scheduling-poll-lease-leader-election/</link><pubDate>Sun, 01 Nov 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-11-1-scheduling-poll-lease-leader-election/</guid><description>用 20 个结算任务与 3 个 worker 的确定性模拟，比较全量轮询、claim 抢占和领导者选举在重复触发、空转与故障恢复上的差异；给出带 epoch 围栏的 Go 租约与选举实现，并用暂停 leader 恢复后写入被拒的测试验证围栏不变量，附原始测试输出。</description></item><item><title>《后端架构设计·分布式与数据一致性》10.3 锁失效后的正确性：从互斥到幂等</title><link>https://plumephp.com/be-arch-dist-10-3-lock-failure-correctness-idempotency/</link><pubDate>Sat, 31 Oct 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-10-3-lock-failure-correctness-idempotency/</guid><description>锁会过期、会丢、会被主从切换绕过，但库存不超卖、订单状态单向推进、支付回调只生效一次仍然可以成立。本节把这三条不变量写成可运行的 Go 条件更新与幂等代码，在完全不用分布式锁的 200 并发下实测成功预占恰好 50 次、库存不为负，并给出锁、版本号与幂等键的职责切分。</description></item><item><title>《后端架构设计·分布式与数据一致性》10.2 分布式锁：租约、fencing token 与 Redis 边界</title><link>https://plumephp.com/be-arch-dist-10-2-distributed-lock-lease-fencing/</link><pubDate>Sat, 31 Oct 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-10-2-distributed-lock-lease-fencing/</guid><description>结算任务在租约过期后仍继续写库存，是分布式锁最常见的生产事故。本节用可运行的 Go 租约管理器与 fencing token 存储复现两个持有者同时写入，实测陈旧 token 被拒绝、无 fencing 时迟到写入覆盖新值，并给出 Redis 主从切换、Redlock 与进程暂停下的安全边界。</description></item><item><title>《后端架构设计·分布式与数据一致性》10.1 分布式 ID：Snowflake、号段与时钟回拨</title><link>https://plumephp.com/be-arch-dist-10-1-distributed-id-snowflake-segment/</link><pubDate>Sat, 31 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-10-1-distributed-id-snowflake-segment/</guid><description>订单号生成器看似只需时间戳加机器号，真实故障却来自时钟回拨、机器号重复和单毫秒序列溢出。本节用可运行的 Go 实现拆解 Snowflake 的位分配与回拨策略，再给出号段模式的双缓冲与数据库故障恢复，并用并发测试验证唯一性、单调性与重启后的续号行为。</description></item><item><title>《后端架构设计·分布式与数据一致性》9.3 冲正、补偿与资金类操作的最终一致</title><link>https://plumephp.com/be-arch-dist-09-3-reversal-compensation-eventual-consistency/</link><pubDate>Sat, 31 Oct 2026 09:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-09-3-reversal-compensation-eventual-consistency/</guid><description>区分冲正与补偿：冲正用反向分录修正错误记账，补偿是新的正向业务动作。给出只追加、借贷平衡的 Go 账本与幂等冲正实现，用悬挂户从 -1999 分回到 0、重复冲正被拒、128 并发过账后总额仍为零的本机测试输出，说明资金类最终一致依赖的四条不变量。</description></item><item><title>《后端架构设计·分布式与数据一致性》9.2 对账系统：T+1、实时与差异分类</title><link>https://plumephp.com/be-arch-dist-09-2-reconciliation-t1-realtime-diff/</link><pubDate>Sat, 31 Oct 2026 09:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-09-2-reconciliation-t1-realtime-diff/</guid><description>以订单支付流水与渠道账单对账为例，对比 T+1 全量与实时流式对账在覆盖、时效和成本上的取舍，给出按订单号与方向匹配、再按金额和状态分类的 Go 对账器，用九组表驱动用例展示漏单、单边、金额、重复和宽限期状态差异如何进入不同处置队列，并说明自动与人工处置的退出条件。</description></item><item><title>《后端架构设计·分布式与数据一致性》9.1 幂等键设计：作用域、生命周期与存储</title><link>https://plumephp.com/be-arch-dist-09-1-idempotency-key-scope-lifecycle/</link><pubDate>Sat, 31 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-09-1-idempotency-key-scope-lifecycle/</guid><description>从支付回调重试导致重复下单的具体场景出发，拆解幂等键的租户、操作与请求三段作用域、指纹绑定和租约生命周期，给出带 fencing token 的 Go 内存实现，并用 64 并发同键、租约过期接管与保留期过期三组测试输出说明何时能安全重放、何时必须拒绝。</description></item><item><title>《后端架构设计·分布式与数据一致性》8.3 消息顺序、重放与死信的对账闭环</title><link>https://plumephp.com/be-arch-dist-08-3-ordering-replay-dlq-reconciliation/</link><pubDate>Fri, 30 Oct 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-08-3-ordering-replay-dlq-reconciliation/</guid><description>从订单事件乱序导致状态回退或重复发货出发，说明分区内顺序、跨分区无序与业务因果的区别，用版本号把乱序变成可重试的冲突，区分可重试错误与毒消息，给出死信分类、重放位点与对账修复的 Go 实现，并实测乱序重试收敛、重试预算耗尽进死信、重放幂等与对账修复被死信吞掉的状态，附原始输出与判据。</description></item><item><title>《后端架构设计·分布式与数据一致性》8.2 消费端幂等、去重表与恰好一次的真实边界</title><link>https://plumephp.com/be-arch-dist-08-2-consumer-dedup-exactly-once-boundary/</link><pubDate>Fri, 30 Oct 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-08-2-consumer-dedup-exactly-once-boundary/</guid><description>从支付回调重复导致余额加两次的故障出发，拆开“副作用已发生、确认未发出”的窗口，说明去重表必须与副作用同库同事务、键要带生产者作用域、保留期要覆盖重放窗口；给出可运行的 Go 实现，并实测确认丢失后的重投、朴素处理的双倍入账、去重记录过期后的重复应用，以及先标记后副作用导致的丢消息。</description></item><item><title>《后端架构设计·分布式与数据一致性》8.1 事务性 Outbox：同库写入与投递保证</title><link>https://plumephp.com/be-arch-dist-08-1-transactional-outbox-delivery/</link><pubDate>Fri, 30 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-08-1-transactional-outbox-delivery/</guid><description>从订单支付后先提交数据库再发消息的崩溃窗口出发，把 outbox 行与业务行放进同一本地事务，用轮询 relay、持久位点与至少一次投递保证不丢消息；给出可运行的 Go 实现，并实测提交后崩溃恢复投递、投递后崩溃导致重复两个窗口，附原始输出与选型判据。</description></item><item><title>《后端架构设计·分布式与数据一致性》7.3 TCC、本地消息表与事务状态的可见性</title><link>https://plumephp.com/be-arch-dist-07-3-tcc-outbox-transaction-visibility/</link><pubDate>Fri, 30 Oct 2026 09:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-07-3-tcc-outbox-transaction-visibility/</guid><description>支付回调超时后，Cancel 可能先于 Try 到达，造成空回滚；迟到的 Try 又可能永久占住库存，形成悬挂。本文用订单预占场景实现带墓碑与状态机的 TCC，并用同库本地消息表让 TRYING、CONFIRMED、CANCELLED 对下游可见，给出空回滚、悬挂、幂等与中间态查询的可运行测试。</description></item><item><title>《后端架构设计·分布式与数据一致性》7.2 Saga：补偿、语义锁与不可补偿步骤</title><link>https://plumephp.com/be-arch-dist-07-2-saga-compensation-semantic-lock/</link><pubDate>Fri, 30 Oct 2026 09:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-07-2-saga-compensation-semantic-lock/</guid><description>订单 Saga 失败时，“把前面的步骤反向调用一遍”看似简单，实际补偿是新业务动作，可能失败、可能不幂等，也挡不住并发请求读到中间态。本文用库存预留、支付扣款与发券场景，给出带语义锁、逆序补偿和不可补偿步骤校验的可运行 Go 实现，并列出把不可逆动作前移或改为可重试的判据。</description></item><item><title>《后端架构设计·分布式与数据一致性》7.1 2PC 与 3PC：准备、提交与协调者故障</title><link>https://plumephp.com/be-arch-dist-07-1-two-phase-commit-coordinator-failure/</link><pubDate>Fri, 30 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-07-1-two-phase-commit-coordinator-failure/</guid><description>订单与库存、支付分库后，两阶段提交常被当成“分布式事务的标准答案”。本文用一次下单说明它真正保证的是原子提交而不是不阻塞，给出参与者日志、协调者决策日志与崩溃恢复的可运行 Go 实现，复现 in-doubt 窗口，并用判据表比较 2PC、3PC 与补偿型方案。</description></item><item><title>《后端架构设计·分布式与数据一致性》6.3 从一致性模型到业务不变量</title><link>https://plumephp.com/be-arch-dist-06-3-consistency-model-to-business-invariant/</link><pubDate>Thu, 29 Oct 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-06-3-consistency-model-to-business-invariant/</guid><description>从库存只剩一件却被两个请求同时卖出的场景出发，把库存不超卖、订单状态单向推进、支付不重复扣款写成可执行谓词，再用故障注入反推每种不变量需要的最弱一致性模型，附条件更新、版本 CAS 与幂等扣款的 Go 实现和判据表，让每条规则都能被测试直接断言。</description></item><item><title>《后端架构设计·分布式与数据一致性》6.2 会话保证：读己之写、单调读与一致前缀</title><link>https://plumephp.com/be-arch-dist-06-2-session-guarantees-read-your-writes/</link><pubDate>Thu, 29 Oct 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-06-2-session-guarantees-read-your-writes/</guid><description>从下单成功却在订单列表看不到新订单的场景出发，实现基于全局版本水位与副本 applied 位点的会话层，逐项测试读己之写、单调读、单调写与一致前缀，并说明粘性路由为何只是优化而不是保证，附订单读路径的选型表，可直接对照本节的测试用例落地与排障。</description></item><item><title>《后端架构设计·分布式与数据一致性》6.1 线性一致、顺序一致与因果一致</title><link>https://plumephp.com/be-arch-dist-06-1-linearizable-sequential-causal/</link><pubDate>Thu, 29 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-06-1-linearizable-sequential-causal/</guid><description>用支付成功后订单状态又被读回旧值的场景，区分线性一致、顺序一致与因果一致的形式判据；实现可回溯的历史检查器，用三类历史分别判定线性一致违例、顺序一致但非线性的执行，以及跳过因果上更晚写入的读，并给出订单链路的模型选型表，帮助在支付强一致与展示弱一致之间做取舍。</description></item><item><title>《后端架构设计·分布式与数据一致性》5.3 请求路由、元数据与扩容期间的错误预算</title><link>https://plumephp.com/be-arch-dist-05-3-routing-metadata-expansion-budget/</link><pubDate>Thu, 29 Oct 2026 09:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-05-3-routing-metadata-expansion-budget/</guid><description>从扩容时客户端仍按旧元数据把订单写进旧分片的具体故障出发，说明路由版本传播、陈旧路由失效与重试收敛，给出带版本保护和权威解析的 Go 路由实现，并用 1000 万请求窗口实测错误预算、解析失败率与熔断阈值之间的数量关系，附可复现测试输出与扩容决策表。</description></item><item><title>《后端架构设计·分布式与数据一致性》5.2 再平衡：迁移、双写与客户端路由</title><link>https://plumephp.com/be-arch-dist-05-2-rebalance-migration-dual-write/</link><pubDate>Thu, 29 Oct 2026 09:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-05-2-rebalance-migration-dual-write/</guid><description>从订单迁移时“先停写再搬数据”的错误直觉出发，把再平衡拆成快照、双写、回填、校验、切换五个阶段，给出可重入的 Go 迁移状态机与版本条件写入，并用 100 个订单键实测迁移中断后的续跑、双写不丢更新、回填未完成时拒绝切换，以及回滚后写回源分片的完整路径，附原始测试输出与阶段判据。</description></item><item><title>《后端架构设计·分布式与数据一致性》5.1 分片键、热点与一致性哈希</title><link>https://plumephp.com/be-arch-dist-05-1-shard-key-hotspot-consistent-hash/</link><pubDate>Thu, 29 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-05-1-shard-key-hotspot-consistent-hash/</guid><description>从订单按 order_id 还是 user_id 分片的具体取舍出发，说明分片键的业务约束与热点识别，给出带虚拟节点的一致性哈希 Go 实现，并用 10 万个订单键实测分布均匀性、虚拟节点降偏斜与 4→5 扩容的迁移比例，附可复现命令、原始输出与扩容判据。</description></item><item><title>《后端架构设计·分布式与数据一致性》4.3 成员变更、快照与线性一致读</title><link>https://plumephp.com/be-arch-dist-04-3-raft-membership-snapshot-linearizable-read/</link><pubDate>Wed, 28 Oct 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-04-3-raft-membership-snapshot-linearizable-read/</guid><description>从三节点订单集群一次性扩到五节点、出现两个不相交多数派的场景出发，说明单节点成员变更为何安全、配置条目如何提交；实现日志压缩与 InstallSnapshot 的边界保留，并用 ReadIndex 的当前任期多数派确认堵住陈旧 leader 的线性一致读。</description></item><item><title>《后端架构设计·分布式与数据一致性》4.2 选主、日志复制与提交规则的可运行实现</title><link>https://plumephp.com/be-arch-dist-04-2-raft-election-log-replication/</link><pubDate>Wed, 28 Oct 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-04-2-raft-election-log-replication/</guid><description>用订单库存扣减场景实现确定性迷你 Raft：逻辑 tick 驱动消息队列、按节点 ID 与任期错开选举超时、AppendEntries 冲突回退、多数派且当前任期才提交；分区测试验证少数派既选不出新主，也提交不了任何条目，并给出超时参数的取舍表。</description></item><item><title>《后端架构设计·分布式与数据一致性》4.1 共识问题与 Raft 的角色、任期、日志</title><link>https://plumephp.com/be-arch-dist-04-1-consensus-raft-roles-terms-log/</link><pubDate>Wed, 28 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-04-1-consensus-raft-roles-terms-log/</guid><description>从一笔支付回调被两个订单节点同时处理的场景出发，拆解 Raft 的三种角色、任期一票制、日志匹配与多数派提交规则；给出可 go test 的不变量骨架，逐条说明选举安全、日志匹配与 Figure 8 的判据，并区分共识、单主复制与幂等对账的适用边界。</description></item><item><title>《后端架构设计·分布式与数据一致性》3.3 复制延迟、故障切换与数据丢失窗口</title><link>https://plumephp.com/be-arch-dist-03-3-replication-lag-failover-data-loss/</link><pubDate>Tue, 27 Oct 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-03-3-replication-lag-failover-data-loss/</guid><description>从支付回调成功后主库宕机、切换后备库缺少最后一笔订单的场景，拆解复制滞后、提交位点与故障切换的关系；用可运行的 Go 模型计算未复制尾部如何变成 RPO，比较异步与半同步的确认集合，并给出切换前的位点检查清单，说明半同步确认集合与提升候选不一致时为何仍会丢数据。</description></item><item><title>《后端架构设计·分布式与数据一致性》3.2 多主与无主复制：冲突检测与合并</title><link>https://plumephp.com/be-arch-dist-03-2-multi-leader-leaderless-conflict/</link><pubDate>Tue, 27 Oct 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-03-2-multi-leader-leaderless-conflict/</guid><description>用两地同时修改同一订单收货地址的场景，说明多主写入的冲突来源与最后写入获胜的丢更新问题；实现版本向量并发检测、PN-Counter 与 add-wins OR-Set 合并，并用枚举验证 R+W&gt;N 的读写重叠条件，说明为何它只是必要条件而非强一致证明。</description></item><item><title>《后端架构设计·分布式与数据一致性》3.1 单主复制：复制日志、位点与读己之写</title><link>https://plumephp.com/be-arch-dist-03-1-single-leader-replication-log/</link><pubDate>Tue, 27 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-03-1-single-leader-replication-log/</guid><description>从大促中“支付成功却显示待支付”的订单详情页切入，区分复制日志的写入、提交与应用三种位点，说明强制读主和固定 sleep 为什么都不可靠；用可运行的 Go 单主复制包实现会话令牌与读己之写，并测试主库切换后未提交尾部被丢弃、位点不足时必须显式报错。</description></item><item><title>《后端架构设计·分布式与数据一致性》2.3 混合逻辑时钟与版本向量在 arch-lab 的落地</title><link>https://plumephp.com/be-arch-dist-02-3-hybrid-clock-version-vector/</link><pubDate>Mon, 26 Oct 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-02-3-hybrid-clock-version-vector/</guid><description>两处同时修改同一订单，物理时间只差 200ms，该信谁？本文实现 HLC 的物理打底与逻辑计数规则，在墙上时钟回拨时仍保持单调；再用版本向量校验订单更新的 base 版本，把并发修改变成 ErrConflict，并给出事件流排序与冲突合并的边界。</description></item><item><title>《后端架构设计·分布式与数据一致性》2.2 逻辑时钟与向量时钟：因果关系怎么编码</title><link>https://plumephp.com/be-arch-dist-02-2-logical-vector-clock-causality/</link><pubDate>Mon, 26 Oct 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-02-2-logical-vector-clock-causality/</guid><description>同一订单的取消与支付回调并发到达两个节点，Lamport 时钟给出 2 和 1，看起来像有先后，实际上谁也没见过谁。本文用表驱动测试判定 equal、before、after、concurrent，验证向量时钟合并与带水位剪枝，并给出剪枝会悄悄改坏因果关系的边界。</description></item><item><title>《后端架构设计·分布式与数据一致性》2.1 物理时钟、NTP 与时钟漂移的可见后果</title><link>https://plumephp.com/be-arch-dist-02-1-physical-clock-ntp-drift/</link><pubDate>Mon, 26 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-02-1-physical-clock-ntp-drift/</guid><description>订单支付完成 0.5 秒后用户取消，取消时间戳却早了 2.5 秒，合并结果仍是 PAID：本文用可运行的 SimulatedClock、NTP 偏移计算和 LWW 寄存器复现这次丢更新，解释墙上时钟与单调时钟的分工、非对称链路对偏移估计的偏差，并给出哪些场景绝不能用时间戳排序的判据表。</description></item><item><title>《后端架构设计·分布式与数据一致性》1.3 远程调用的八个假设与端到端原则</title><link>https://plumephp.com/be-arch-dist-01-3-fallacies-remote-call-end-to-end/</link><pubDate>Sun, 25 Oct 2026 20:40:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-01-3-fallacies-remote-call-end-to-end/</guid><description>网络可靠、延迟为零、带宽无限等八个假设，在订单链路上会以重试放大、重复扣款和超时误判的形式出现。本文用可运行的 Go 重试模拟器测出三层各重试三次会把一次调用放大成 64 次，并说明为什么端到端可靠性必须由调用方与服务端的幂等共同保证，而不能交给中间链路。</description></item><item><title>《后端架构设计·分布式与数据一致性》1.2 故障模型：崩溃、丢包、分区与拜占庭</title><link>https://plumephp.com/be-arch-dist-01-2-failure-model-crash-partition-byzantine/</link><pubDate>Sun, 25 Oct 2026 20:20:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-01-2-failure-model-crash-partition-byzantine/</guid><description>崩溃停止、崩溃恢复、消息丢失、网络分区与拜占庭故障，对调用方暴露的信号并不相同。本文用可复现的确定性网络逐项注入五类故障，配合持久化副本测试说明：订单系统默认按崩溃-恢复建模，是因为稳定存储加幂等重放能够收敛，而拜占庭需要另一套成本高得多的协议。</description></item><item><title>《后端架构设计·分布式与数据一致性》1.1 从单机到分布式：哪些问题真的变了</title><link>https://plumephp.com/be-arch-dist-01-1-distributed-problem-shift/</link><pubDate>Sun, 25 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-01-1-distributed-problem-shift/</guid><description>同一段订单预留逻辑，在进程内调用与跨节点调用下会暴露部分失败、响应丢失与墙上时钟错序。本文用可运行的 Go 双节点模拟器把调用结果分成 APPLIED、NOT_APPLIED、UNKNOWN 三类，并用测试说明未知状态下重试为什么必须依赖按订单号的幂等，而不是调用方的猜测。</description></item><item><title>《后端架构设计·分布式与数据一致性》目录与学习路径</title><link>https://plumephp.com/be-arch-dist-toc/</link><pubDate>Sun, 25 Oct 2026 09:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-toc/</guid><description>《后端架构设计·分布式与数据一致性》的阅读入口：13 章分四段的结构、章节依赖图、三条阅读路径、症状到章节的对照表、arch-lab 在卷三新增的时钟、复制、共识、分片、事务、Outbox、ID 与锁、调度和多活组件，以及实测值、目标值与示例值的口径和读完本卷的五项标准。</description></item><item><title>《后端架构设计·分布式与数据一致性》前言</title><link>https://plumephp.com/be-arch-dist-preface/</link><pubDate>Sun, 25 Oct 2026 08:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-preface/</guid><description>说明卷三怎么用：13 章四段结构、arch-lab 新增的时钟/复制/共识/分片/事务/对账组件、L1–L4 可运行性分级、代码块 file/tier/verify 标记、S1–S3 固定场景、实测与目标与示例的数字口径，以及顺序阅读和带着一次跨库改造来读的两条路线。</description></item><item><title>《后端架构设计·分布式与数据一致性》序</title><link>https://plumephp.com/be-arch-dist-foreword/</link><pubDate>Sun, 25 Oct 2026 07:00:00 +0800</pubDate><guid>https://plumephp.com/be-arch-dist-foreword/</guid><description>为什么卷二之后还要单独写分布式与数据一致性：跨库半成功、库存超卖、切换后订单倒退三个场景，暴露了单机结论的边界。这篇序交代卷二留下的六个未证明假设、本书的四个立场、Go 主线与 Java 21 对照的口径，以及不伪造多节点实测、不承诺生产级 Raft 的边界。</description></item></channel></rss>