「分布式计算的八大谬误」(Eight Fallacies of Distributed Computing)由 Sun 的 Peter Deutsch 等人在上世纪 90 年代提出。它不是 RPC 教程,而是一张反假设清单:若默认下列任一命题为真,系统往往在生产环境中暴露问题。
1. The network is reliable — 网络是可靠的
包会丢失、连接会中断、半开连接可能卡住。跨机器调用没有「一定成功」的保证。
工程含义: 需要超时、带退避与幂等的重试、熔断与降级;远程调用不能等同于本地函数调用。
2. Latency is zero — 延迟为零
本机内存访问是纳秒级,跨机 RTT 是毫秒级,跨区域更高。将「多一次 RPC」视为无成本,延迟预算容易被耗尽。
工程含义: 合并请求、就近缓存、异步化,并关注 p99 而非仅看平均值。
3. Bandwidth is infinite — 带宽是无限的
链路存在上限,且常被多租户、备份流量、大结果集占用。序列化格式、批量大小、是否拉全量都会成为瓶颈。
工程含义: 分页、投影(只取所需字段)、压缩,并关注 payload 体积。
4. The network is secure — 网络是安全的
内网不等于可信。中间人攻击、横向移动、误暴露的管理端口,都可能发生在「被认为安全」的环境中。
工程含义: TLS / mTLS、最小权限、零信任倾向;安全边界不能仅依赖机房或 VPC 边界。
5. Topology doesn't change — 拓扑不会变
节点上下线、VIP 漂移、容器重启、底层基础设施变更都会发生;固定机器地址不可靠。
工程含义: 服务发现、健康检查、客户端负载均衡;硬编码 IP 通常构成技术债。
6. There is one administrator — 只有一个管理员
多团队、多云账号、多套发布流水线下,变更往往彼此不可见。一方的维护窗口可能是另一方的流量高峰。
工程含义: 契约测试、变更可观测、明确所有权;跨团队依赖应按外部依赖对待。
7. Transport cost is zero — 传输是零成本的
序列化、加密、协议栈处理、跨可用区流量计费都会产生 CPU 与金钱成本。
工程含义: 选择合适的编码(如 Protobuf 与 JSON)、控制跨区复制,并关注云账单中的数据传输项。
8. The network is homogeneous — 网络是同构的
不同网段的 MTU、防火墙策略、QoS 乃至协议行为可能不同。在某一环境可达的路径,在另一环境可能静默丢包。
工程含义: 在真实拓扑上做集成测试;不能假设「某一侧可 ping 通」等于业务路径对称可达。
实践含义
设计分布式系统时,可将上述谬误转为检查项:是否有超时、重试是否幂等、拓扑变化后客户端能否发现、跨区流量成本是否评估过。容错不是附加项,而是在这些假设失效后,系统仍能提供可接受行为的能力。