Retries don't fix eventual consistency
6 hours ago
- 重试并不总是正确的解决方案;它们可能被应用于并非实际故障的问题。
- 在分布式系统中,事件乱序到达是最终一致性的正常属性,而不是一个缺陷。
- 一个提议的系统将'订阅'事件到达时缺少'用户'数据视为需要重试的错误,但这是对问题的错误识别。
- 最终一致性意味着信息最终会到达,因此缺失数据只是另一种有效的系统状态,而非异常状态。
- 推荐的方法是存储所有传入的数据,并仅在满足所有先决条件时进行处理,从而避免重试和死信队列。
- 重试或重播消息可能会带来原本不存在的额外问题,如排序和基础设施复杂性。
- 重试对于网络超时等瞬时故障仍然有用,但重复重试的效果应受到质疑。
- 核心教训是在选择解决方案工具之前正确识别问题类型——可用性与最终一致性。
- 解决实际问题可减少运营开销,并使系统更易于推理,即使这意味着完全不进行重试。