6Release It!(第2版)

架构

架构设计

松耦合异步通信事件驱动数据一致性

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第6章:架构(Architecture)

一、导读

1.1 本章学习目标

第6章讲解面向生产的架构设计原则。松耦合、异步通信、事件驱动是构建稳定系统的关键。

1.2 为什么第六章如此重要

架构决定了系统的稳定性上限。好的架构设计可以让系统在面对故障时保持韧性。

1.3 核心问题引导

松耦合如何提升稳定性?

异步通信的优势是什么?

事件驱动架构如何设计?

数据一致性如何处理?


二、核心概念详解

6.1 松耦合

松耦合的原则:
- 服务之间通过接口通信,不共享内部实现
- 避免同步调用链过长
- 使用异步通信减少依赖
- 每个服务独立部署和扩展

好处:
- 故障隔离
- 独立演进
- 灵活扩展

6.2 异步通信

java
// 同步调用(脆弱)
public Order createOrder(OrderRequest req) {
    User user = userService.getUser(req.userId());     // 同步
    boolean stock = inventoryService.reserve(req.items()); // 同步
    PaymentResult payment = paymentService.charge(...);    // 同步
    return new Order(user, stock, payment);
}

// 异步通信(韧性)
public void createOrder(OrderRequest req) {
    eventBus.publish(new OrderRequested(req));
    // 立即返回,后续通过事件驱动
}

@EventListener
public void onOrderRequested(OrderRequested event) {
    // 异步处理
    eventBus.publish(new OrderCreated(event.orderId()));
}

6.3 事件驱动架构

事件驱动的优势:
- 松耦合:发布者不知道订阅者
- 可扩展:可以轻松添加新的消费者
- 韧性:一个消费者失败不影响其他

事件驱动的挑战:
- 最终一致性:数据不是立即可用的
- 调试困难:请求跨多个服务
- 事件顺序:需要保证事件顺序

三、实战案例

6.1 事件驱动订单系统

订单流程(事件驱动):
1. OrderService 发布 OrderRequested
2. InventoryService 消费 → 预留库存 → 发布 StockReserved
3. PaymentService 消费 → 处理支付 → 发布 PaymentProcessed
4. OrderService 消费 → 确认订单 → 发布 OrderConfirmed

好处:
- 每个服务独立部署
- 一个服务故障不影响其他
- 可以轻松添加新的处理逻辑

四、本章小结

面向生产的架构需要松耦合、异步通信和事件驱动。这些设计原则让系统在面对故障时保持韧性。


五、思考与练习

松耦合如何实现?

同步和异步通信如何选择?

事件驱动架构有哪些挑战?

最终一致性如何处理?

如何调试事件驱动系统?


6/7架构
0%