我的客户网络非常糟糕,包括网关上的错误映射和别名问题。有时它们会顺利度过几天,有时我们的服务会因为无法连接到数据库而失败,或者连接被神秘地丢弃。
程序(即服务)应该恢复或重试多远?让他们的网络人员让它正常工作或者我是否应该自己承受它的瑕疵是否合理?
答案 0 :(得分:2)
1)是的,期待他们的网络运作是合理的......你不会告诉别人他们买的车坏了,因为他们没有,还有开车的路,你呢?
2)那说:防守程序。当你制造汽车时,你不能指望一切都是完美平稳的州际高速公路。
更具体地说,我喜欢在我的系统中构建重试机制:我将在“可重试”逻辑中包装一些东西,它允许您指定重试次数。通常,重试周期将具有二次回退:例如,它在n * n秒之后尝试,对于1..n,其中n是重试次数,或者使用fib(n),因此您有类似1,1,2的东西, 3.5秒重试。退避有助于防止对上游资源造成不必要的压力
如果在经过一定次数的重试后,您可以抛出异常(可以捕获并通知用户或其他模块的错误)或记录,具体取决于严重性。