副标题 / 摘要

“网络可靠”“延迟为零”是分布式系统的经典谬论。本文用工程案例解释这些误区的代价。

目标读者

  • 架构与后端工程师
  • 需要设计跨服务系统的团队
  • 学习分布式系统的新手

背景 / 动机

系统设计中最危险的错误是假设“网络就是本地”。
理解这些谬论能避免隐蔽的线上故障。

核心概念

  • 网络不可靠:必须处理失败与重试
  • 延迟不为零:跨地域延迟显著
  • 带宽有限:批量传输会放大延迟

实践指南 / 步骤

  1. 所有网络调用都设置超时
  2. 重试必须有退避与幂等
  3. 对跨区域调用做缓存或异步化
  4. 监控延迟分布而不是平均值

可运行示例

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())

解释与原理

分布式系统中,网络可能失败、延迟可变、带宽有限。
因此所有远程调用都必须假设“会失败”。

常见问题与注意事项

  1. 重试会不会放大故障?
    会,因此要有退避与限流。

  2. 网络延迟是固定的吗?
    不是,长尾延迟才是主要风险。

  3. 本地调用和远程调用能等同吗?
    不能,成本差异巨大。

最佳实践与建议

  • 设计“失败即常态”的调用链
  • 监控 P95/P99 延迟
  • 对跨服务调用做降级与缓存

小结 / 结论

分布式谬论提醒我们:网络不是本地、延迟不是零。
系统必须为失败做好准备。

参考与延伸阅读

  • Fallacies of Distributed Computing
  • Designing Data-Intensive Applications

元信息

  • 阅读时长:6~8 分钟
  • 标签:分布式、网络、可靠性
  • SEO 关键词:分布式谬论, 网络延迟
  • 元描述:解释分布式计算的常见谬论与工程风险。

行动号召(CTA)

检查你的服务间调用,确认是否都有超时与重试策略。