我的客户端网络非常糟糕,包括网关上的映射错误和混叠问题。有时他们几天没有遇到任何问题,有时我们的服务失败,因为它们无法连接到数据库或连接神秘地断开。
程序(即服务)应该走多远才能恢复或重试?让他们的网络人员让它正常工作是否合理,还是我应该承担起自己来承受它的脆弱?
1)是的,期望他们的网络正常工作是合理的......你不会告诉别人他们买的车坏了,因为他们没有道路可以驾驶它,对吧?
2)也就是说:防守程序。 当你制造一辆汽车时,你不能指望一切都是一条完全平稳的州际高速公路。
更具体地说,我喜欢在我的系统中构建重试机制:我将一些东西包装在"可重试"逻辑中,它允许您指定重试次数。通常,重试周期将具有二次退避:例如,它在 n*n 秒后尝试,对于 1..n,其中 n 是重试次数,或者使用 fib(n) 这样您就有大约 1,1,2,3,5 秒的重试次数。 退避有助于防止对上游资源造成不必要的压力
如果在设定的重试次数后,您可以引发异常(可以捕获该异常并将错误通知用户或其他模块),或者根据严重性记录。