我们的生产环境由 n 个 Apache Web 服务器组成,这些服务器通过前端负载均衡器由浏览器访问。这很典型。99% 的 HTTP 请求都可以通过这种并行架构顺利处理,没有任何问题。
不幸的是,Apache 处理的 1% 的请求需要访问外部服务器上的 SOAP Web 服务层,而该服务器完全无法处理并发,导致了许多严重错误。
我正在寻找一种方法来通过某种代理来引导那些 SOAP 请求,能够对外部服务器的请求进行排队和同步锁定。
Pound、Nginx、Squid 或 Varnish 等标准代理是否实现了这样的队列?
答案1
亚马逊有一项你可以使用的服务。它被称为简单队列服务。http://aws.amazon.com/sqs/
您可以使用它来对作业进行排队,并一次从队列中挑选出一个作业。
收到消息后,该消息在处理过程中会“锁定”。这样可防止其他计算机同时处理该消息。如果消息处理失败,锁定将过期,消息将再次可用。如果应用程序需要更多时间进行处理,则可以通过 ChangeMessageVisibility 操作动态更改“锁定”超时。
有多种替代方案可以满足您的用例:
答案2
Redis 可能是解决此类问题的一个方法。因为它处理原子操作。