重试模式Vs在休息客户端中退回模式

kam*_*oor 6 .net java algorithm rest design-patterns

我们有多个资源作为REST服务公开,并运行设计参数,如果服务因网络和/或应用程序级别故障而不可用,客户端是否需要实现重试逻辑.这值得么?一组认为,如果服务不可用,则没有重新尝试的点,但其他组织认为可能存在网络繁忙问题并且重试可能会有所帮助.目前没有统计数据可以为这两个论点辩护.如何实现回退URL(原始http资源的副本)并在失败期间使用回退服务.

根据您以前的经验提出任何建议吗?

Flo*_*oky 8

重试失败的请求通常是一个好主意,但要注意始终设置合理的重试限制,与超时成比例.避免使用重试请求关闭服务器的一种非常好的方法是使用指数退避.例如,30秒后的第一次重试,300秒后的下一次重试等.

有一些服务器响应通知客户端不重试也很常见.当服务器遇到无法通过稍后再次尝试解决的问题时使用这些问题,例如数据库故障.

回退URL似乎不可靠 - 资源应该有一个端点.对于客户端而言,该端点是由主堆栈还是备份支持无关紧要.通常,调度程序将用于故障转移到不同的服务器池,这样如果主服务器失败,它可以将流量转移到备用服务器,直到问题得到解决.


Luí*_*hin 6

Keep in mind that when a service request is failing, it can be due to network overload or service degradation. In several cases the best option is to just fail immediately. Regarding using a fall back URL, it probably will not solve your problem, since it could keep network under high load.

Suggestion is to take a look in patterns such as: