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