服务通过同步方式(REST 或 gRPC 上的 request/response)或异步方式(通过 Kafka 或 RabbitMQ 等 broker 的消息/事件)进行通信。
Synchronous (request/response)
调用者等待回复。简单直观,但会耦合可用性——如果被调用者宕机,调用者会受到影响。
http
GET /orders/42 HTTP/1.1
Host: orders-service
Accept: application/json
Asynchronous (messaging/events)
发送者发布消息并继续;消费者稍后处理它。这在时间上解耦了服务。
text
Order Service ──publish "OrderPlaced"──▶ [ Broker ] ──▶ Email Service
│
└──▶ Inventory Service
何时使用哪种方式
| 需求 | 选择 |
|---|---|
| 需要立即为用户返回答案 | Synchronous |
陷阱
长同步链(A → B → C → D)会倍增延迟和故障概率。尽可能选择异步或聚合。
为什么这很重要
通信方式塑造了系统的弹性:同步调用易于推理但产生紧密的运行时耦合,而异步消息通过最终一致性的代价换取解耦。
大多数实际系统混合使用两者——用户面向的读操作使用同步,后台工作流使用异步。
