同步通信会阻塞调用者直到收到响应;异步通信发送消息后继续执行而不等待。每种都在耦合、延迟和弹性方面做出不同的权衡。
| 方面 | 同步 (REST/gRPC) | 异步 (消息传递) |
|---|
| 调用者等待? | 是 | 否 |
| 时间耦合 | 紧密 | 松散 |
| 对故障的弹性 | 低 | 高 (broker 缓冲) |
| 一致性 | 立即 | 最终 |
| 复杂性 | 较低 | 较高 |
| 可调试性 | 更容易 (线性) | 更难 (流程) |
SYNC: Caller ──request──▶ Service
Caller ◀─response── Service (blocked the whole time)
ASYNC: Caller ──message──▶ [ Queue ] ──▶ Service
Caller continues immediately; Service handles it later
异步隐藏了故障 — 一个丢失或有害的消息可能会无声地破坏工作流。您需要死信队列和监控。
这个选择直接控制故障如何传播:同步调用快速且明显地失败,而异步消息解耦但将问题延迟到消费者。
正确混合使用它们 — 边界处使用同步,工作流中使用异步 — 是构建弹性微服务的核心技能。