副标题 / 摘要
RPC 看似像本地调用,但它的失败模式与成本完全不同。本文总结 RPC 的通用缺点与工程应对策略。
目标读者
- 设计微服务通信的工程师
- 需要评估 RPC 成本的技术负责人
- 想避免分布式陷阱的开发者
背景 / 动机
RPC 把“跨网络调用”伪装成本地函数。
这会导致开发者低估失败概率与性能成本,从而引发稳定性问题。
核心概念
- 网络不可靠性:超时、丢包、抖动
- 部分失败:某些节点失败,其他正常
- 重试风暴:错误重试导致雪崩
- 版本演进:接口变更与兼容性问题
实践指南 / 步骤
- 为 RPC 设置超时与重试策略
- 避免级联调用
- 引入熔断与降级
- 做好可观测性(日志/追踪)
- 管理版本兼容性
可运行示例
import time
import random
def rpc_call():
time.sleep(random.random() * 0.2)
if random.random() < 0.2:
raise TimeoutError("rpc timeout")
return "ok"
if __name__ == "__main__":
try:
print(rpc_call())
except TimeoutError as e:
print("fail", e)
解释与原理
RPC 的本质是网络调用,失败概率远高于本地函数。
把它当作本地调用,会导致过度耦合与错误传播。
常见问题与注意事项
RPC 一定比消息队列好吗?
不一定,取决于一致性与解耦需求。为什么重试会导致雪崩?
因为失败请求叠加更多压力。RPC 的最大风险是什么?
部分失败与不可预测延迟。
最佳实践与建议
- 所有 RPC 都必须设置超时
- 设计幂等与重试策略
- 限制同步链路长度
小结 / 结论
RPC 的缺点来自网络不可靠性与分布式复杂性。
只有理解并控制这些成本,才能安全使用 RPC。
参考与延伸阅读
- The Fallacies of Distributed Computing
- gRPC 官方指南
- 分布式系统设计最佳实践
元信息
- 阅读时长:7~9 分钟
- 标签:RPC、分布式系统、可靠性
- SEO 关键词:RPC, 分布式系统, 超时
- 元描述:总结 RPC 的通用缺点与工程应对策略。
行动号召(CTA)
检查一次你的 RPC 调用链,看看是否存在超时与重试配置缺失。