ZxdNoob
首页文章简历版本历史AI 向导

ZxdNoob

用心记录,认真生活

按 ⌘K 快速导航到任意页面按 ⌘I 打开 AI 向导(或访问 /agent)

导航

  • 首页
  • 简历
  • 版本历史
  • AI 向导

更多

  • GitHub
  • Sitemap

© 2026 ZxdNoob. All rights reserved.

Built with Next.js · Styled with Tailwind CSS

返回文章列表
2026年5月2日 00:42:001 分钟阅读

Java 精通 01:分布式一致性、事务模式与幂等——从理论到可交付方案

面向资深/专家:CAP 的实践读法、BASE、2PC/Saga/TCC 的取舍、Outbox 与消息语义;Java 业务里如何实现幂等与补偿的可观测闭环。

  • Java
  • 分布式
  • 一致性
  • 架构
AI 共读让 Noob 帮你提炼要点 / 答疑

本篇目标:能把 CAP 讲成工程取舍;能为订单类业务画状态机;能设计幂等键与去重表;能口述 Outbox 解决的原子性问题;知道至少一次投递下为何必须幂等。


1. 知识点:CAP 的工程读法#

分区发生时:一致性 vs 可用性拉扯。多数互联网业务选择「最终一致 + 可观测补偿」,而不是强行线性一致一切读。


2. 知识点:订单状态机(示例)#

状态允许事件下一状态
CREATEDPAYPAID
PAIDSHIPSHIPPED
SHIPPEDCONFIRMDONE

非法迁移返回业务错误码;状态迁移与幂等键同事务写入。


3. 知识点:幂等表(示意 DDL)#

CREATE TABLE idempotency (
  biz_key    VARCHAR(64) PRIMARY KEY,
  response   TEXT NOT NULL,
  created_at TIMESTAMP NOT NULL
);

处理流程:INSERT 幂等键冲突 → 直接返回历史响应;成功则写入响应 JSON。

并发:PRIMARY KEY + 捕获 duplicate key,或用 DB 事务隔离。


4. 知识点:Saga#

长事务拆本地事务 + 补偿:每笔本地事务可提交,失败执行逆操作。要点:补偿也要幂等;状态机记录当前步骤。


5. 知识点:Outbox#

问题:写库成功、发消息失败 → 不一致。

做法:业务事务内写 outbox 表;异步线程扫描 published=false 投递 MQ;成功后标记。

CREATE TABLE outbox (
  id BIGSERIAL PRIMARY KEY,
  payload JSONB NOT NULL,
  published BOOLEAN NOT NULL DEFAULT FALSE,
  created_at TIMESTAMP NOT NULL
);

6. 知识点:消息语义#

语义含义消费者
at-most-once可能丢简单
at-least-once可能重复必须幂等
exactly-once端到端代价高事务消息或幂等 + 去重

7. Lab#

画出「下单→扣库存→支付回调」三状态机;写出幂等键命名规范(bizType + bizId + operation);伪代码 Outbox 发布器循环。


8. 自测清单#

  1. Outbox 相对「先发消息后写库」解决什么?
  2. Saga 补偿失败怎么办?
  3. 为何不能用 wall clock 做全局顺序?
  4. at-least-once + 非幂等 Consumer 会怎样?

相关阅读

基于内容相似度 + 标签/系列加权

  • 2026年5月2日 00:54:001 分钟Java 从基础到精通(初级 · 高级 · 专家路线)
    01

    Java 精通 03:架构演进、模块化单体与领域建模(专家级的边界与治理)

    微服务不是默认答案:模块化单体、限界上下文、聚合与领域事件、API 版本化与契约测试;多团队协作下的架构治理与演进策略。

    • Java
    • 架构
    • DDD
  • 2026年5月2日 00:36:001 分钟Java 从基础到精通(初级 · 高级 · 专家路线)
    02

    Java 进阶 03:Spring 生态与典型服务端架构(IoC、AOP、事务与集成)

    Spring Boot 心智:依赖注入与 Bean 生命周期、AOP 的典型用途、声明式事务传播与失效场景;与 Web、持久化、缓存、消息的常见集成边界。

    • Java
    • Spring
    • 架构
  • 2026年5月2日 00:24:002 分钟Java 从基础到精通(初级 · 高级 · 专家路线)
    03

    Java 进阶 01:JUC、线程池、CompletableFuture 与异步组合实战

    写给高级工程师:happens-before 直觉、Lock 与原子类、ExecutorService 参数含义、超时/取消/组合异步;常见踩坑与背压入门。

    • Java
    • 并发
    • JUC
  • 2026年5月2日 00:48:001 分钟Java 从基础到精通(初级 · 高级 · 专家路线)
    04

    Java 精通 02:性能剖析、容量规划与可观测性(指标 · 日志 · 链路)

    专家必备:从基准测试误区到火焰图/JFR、线程与分配剖析;RED/USE 类指标、结构化日志、分布式追踪与 SLO;压测如何服务于容量决策。

    • Java
    • 性能
    • 可观测性
返回文章列表

目录

8
  1. 1. 知识点:CAP 的工程读法
  2. 2. 知识点:订单状态机(示例)
  3. 3. 知识点:幂等表(示意 DDL)
  4. 4. 知识点:Saga
  5. 5. 知识点:Outbox
  6. 6. 知识点:消息语义
  7. 7. Lab
  8. 8. 自测清单
进入沉浸式阅读