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

时间:2014-12-08 18:56:38

标签: java .net algorithm rest design-patterns

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

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

2 个答案:

答案 0 :(得分:7)

重试失败的请求通常是一个好主意,但take care总是设置一个合理的重试限制,与超时成比例。避免使用重试请求关闭服务器的一种非常好的方法是使用exponential backoff。例如,30秒后的第一次重试,300秒后的下一次重试等等。

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

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

答案 1 :(得分:3)

需要记住的是,如果服务请求失败,可能是由于网络过载。在这种情况下,最好的选择是立即失败。 关于使用后备URL,它可能无法解决您的问题,因为它可以使网络处于高负载状态。

建议是看一下以下模式: