【问题标题】:Web services calls in a loop循环中的 Web 服务调用
【发布时间】:2016-07-10 19:44:13
【问题描述】:

我的一些大学为我们制作了一些简单的网络服务界面。

但是,进程运行时间有点长,这很好并且可以预期。但是,问题是,他们是这样想的:

  • 发出第一个请求,得到一个 id 作为响应

  • 使用该 id,循环创建请求,直到处理完成

  • 提出最后一个请求,基本上只是为了进行清理。

创建一个单一的网络方法怎么样,这样我就可以发出一个请求?如果它更长,而且确实如此,那么增加你的超时时间。没关系,我可以等……

不!

会出什么问题?

【问题讨论】:

    标签: web-services rest web architecture


    【解决方案1】:

    通过 HTTP 长时间运行的进程总是给我带来麻烦。 HTTP 不喜欢长时间运行的请求,许多网络设备对请求的长度设置了硬性限制,还有一些默认超时需要调整。

    我更喜欢一系列较小的请求来检查长时间运行的进程的状态。它的代码更多,但它在下游造成的问题要少得多。我通常喜欢使用HTTP 202 响应代码来指示流程是否已完成来实现此模式。

    【讨论】:

    • 感谢您的回答。我不记得长时间运行的网络方法有任何问题。好吧,除了我当然需要调整超时。所以这将是我第一次实现这种模式,对我来说看起来很奇怪。事实上,它类似于 DoS 攻击或简单的滥用。我只是想知道是否有人曾经有过这种实现以及可能出现的问题......
    • 是的,这很常见。如果连接是低延迟的,那么可能值得在调用之间稍微延迟一下,以避免流量。
    • 好吧,如果它相当普遍,为什么直到现在才遇到。而且我仍然不明白如何产生多个、数百甚至数千个新请求(以及新线程、新授权和所有内容)会导致比一个请求更少的问题?
    • 因为网络针对短暂的 http 请求/响应周期进行了优化。我不知道为什么您以前没有遇到过它,也许您不必使用具有长时间运行进程的系统。以下是其他提出类似问题的人的一些示例:stackoverflow.com/questions/16542202/…farazdagi.com/blog/2014/rest-long-running-jobs。阅读谷歌搜索的前几个结果:长时间运行的 http 请求
    • 从服务提供商架构中考虑这一点。一般来说,长时间运行的任务不应该在 Web 服务器上的线程上处理。 Web 服务器的线程数量有限,如果您有成千上万的用户尝试执行长时间运行的操作,您将很快耗尽线程池(负载平衡这也很棘手,因为大多数负载平衡器会根据分派的请求数量进行平衡)。将消息扔到队列中,并让工作进程在进程完成后拾取这些消息并更新数据库会更简洁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2019-06-14
    • 2011-08-11
    相关资源
    最近更新 更多