第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
好处:
- 每个服务独立部署
- 一个服务故障不影响其他
- 可以轻松添加新的处理逻辑四、本章小结
面向生产的架构需要松耦合、异步通信和事件驱动。这些设计原则让系统在面对故障时保持韧性。
五、思考与练习
松耦合如何实现?
同步和异步通信如何选择?
事件驱动架构有哪些挑战?
最终一致性如何处理?
如何调试事件驱动系统?