【问题标题】:Async/Poll or Sync in HA ArchitectureHA 架构中的异步/轮询或同步
【发布时间】:2010-12-17 17:25:31
【问题描述】:

我正在设计一个 REST 解决方案,用于与不同网络上的多个服务器进行远程通信。有些通话时间相对较短,而有些通话可能需要几分钟。调用本质上是同步的,因此如果调用是异步的,客户端(实际上是服务器)必须轮询响应。轮询不是最理想的,因为它会导致性能下降并将对最终用户的响应延迟轮询间隔的一小部分。我更喜欢使用同步调用,但如果网络连接断开,则无法获得响应。如果是异步的,远程服务器可以返回一个可以轮询的作业 id,并且可以在间歇性网络问题中幸存下来。重试和幂等性是重要的考虑因素。

我正在寻找有关采用哪种方法的一些建议。我们也有由远程服务器发起的调用。这些将通过 HA 的负载平衡器。我也对一些描述 HA 环境中企业通信最佳实践的书籍推荐感兴趣。我似乎找不到任何涵盖此主题的内容。

【问题讨论】:

    标签: java rest remoting


    【解决方案1】:

    您可以设计一个同步系统,在网络出现故障时支持“重新连接”。重新连接呼叫将是客户端“重新附加”到同一呼叫的一种方式。如果服务器恰好完成了断开和重新连接之间的调用,则返回值将被保存,并且可以在重新连接时立即返回。为了支持重新连接,需要为调用分配一个标识符。客户端可以选择标识符作为 guid,并作为初始调用的一部分传递给服务器。然后,服务器将此 guid 与调用相关联。在断开连接并重新连接时,客户端传递相同的 guid,服务器使用它来将客户端重新连接到呼叫。如上所述保存的值可能需要某种生存时间才能从池中清除。你怎么看?

    【讨论】:

    • 我喜欢这种方法,因为它具有同步的优点,同时可以容忍网络连接问题。我看到的唯一缺点是响应缓存。我希望存在一个经过验证的企业模式来解决这个问题。
    • @Andrew - 在任何旨在容忍网络中断的解决方案中都需要响应缓存。网络出现故障,工作完成,它必须去某个地方,除非你想丢弃它,这意味着工作必须重做。
    猜你喜欢
    • 2016-05-10
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多