分布式计算的八大谬论:你真的能相信网络吗?
副标题 / 摘要 “网络可靠”“延迟为零”是分布式系统的经典谬论。本文用工程案例解释这些误区的代价。 目标读者 架构与后端工程师 需要设计跨服务系统的团队 学习分布式系统的新手 背景 / 动机 系统设计中最危险的错误是假设“网络就是本地”。 理解这些谬论能避免隐蔽的线上故障。 核心概念 网络不可靠:必须处理失败与重试 延迟不为零:跨地域延迟显著 带宽有限:批量传输会放大延迟 实践指南 / 步骤 所有网络调用都设置超时 重试必须有退避与幂等 对跨区域调用做缓存或异步化 监控延迟分布而不是平均值 可运行示例 import random import time def remote_call(): # 模拟网络不可靠 if random.random() < 0.3: raise TimeoutError("network timeout") time.sleep(0.05) return "ok" def call_with_retry(retries=3): for i in range(retries): try: return remote_call() except TimeoutError: time.sleep(0.02 * (i + 1)) return "failed" if __name__ == "__main__": print(call_with_retry()) 解释与原理 分布式系统中,网络可能失败、延迟可变、带宽有限。 因此所有远程调用都必须假设“会失败”。 常见问题与注意事项 重试会不会放大故障? 会,因此要有退避与限流。 网络延迟是固定的吗? 不是,长尾延迟才是主要风险。 本地调用和远程调用能等同吗? 不能,成本差异巨大。 ...