副标题 / 摘要
“网络可靠”“延迟为零”是分布式系统的经典谬论。本文用工程案例解释这些误区的代价。
目标读者
- 架构与后端工程师
- 需要设计跨服务系统的团队
- 学习分布式系统的新手
背景 / 动机
系统设计中最危险的错误是假设“网络就是本地”。
理解这些谬论能避免隐蔽的线上故障。
核心概念
- 网络不可靠:必须处理失败与重试
- 延迟不为零:跨地域延迟显著
- 带宽有限:批量传输会放大延迟
实践指南 / 步骤
- 所有网络调用都设置超时
- 重试必须有退避与幂等
- 对跨区域调用做缓存或异步化
- 监控延迟分布而不是平均值
可运行示例
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())
解释与原理
分布式系统中,网络可能失败、延迟可变、带宽有限。
因此所有远程调用都必须假设“会失败”。
常见问题与注意事项
重试会不会放大故障?
会,因此要有退避与限流。网络延迟是固定的吗?
不是,长尾延迟才是主要风险。本地调用和远程调用能等同吗?
不能,成本差异巨大。
最佳实践与建议
- 设计“失败即常态”的调用链
- 监控 P95/P99 延迟
- 对跨服务调用做降级与缓存
小结 / 结论
分布式谬论提醒我们:网络不是本地、延迟不是零。
系统必须为失败做好准备。
参考与延伸阅读
- Fallacies of Distributed Computing
- Designing Data-Intensive Applications
元信息
- 阅读时长:6~8 分钟
- 标签:分布式、网络、可靠性
- SEO 关键词:分布式谬论, 网络延迟
- 元描述:解释分布式计算的常见谬论与工程风险。
行动号召(CTA)
检查你的服务间调用,确认是否都有超时与重试策略。