我的客户的网络确实很差,包括网关的映射不正确以及别名问题。有时,他们的日子过得很顺利,而其他日子,我们的服务失败是因为它们无法连接到数据库,或者连接被神秘地断开了。

程序(即服务)应恢复到多少距离或重试?让他们的网络伙伴正常工作是否合理,还是应该让自己摆脱脆弱?

最佳答案

1)是的,期望他们的网络正常运行是合理的……您不会告诉某人他们所购买的汽车已损坏,因为他们没有路,无法开车。

2)也就是说:防御性程序。造车时,不能指望一切都是完美的州际高速公路。

更具体地说,我喜欢在系统中构建重试机制:我将某些内容包装在“可重试”逻辑中,该逻辑可让您指定重试次数。通常,重试期将有二次退避:例如,它会在n * n秒后尝试1..n,其中n是重试次数,或使用fib(n)来计算,例如1,1,2, 3,5秒重试。退避有助于防止对上游资源造成不必要的压力

如果在重试一定次数后,您可以抛出异常(可以捕获该异常并将错误通知用户或其他模块),或者根据严重性进行记录。

09-17 20:07