Наша производственная среда состоит из n веб-серверов Apache, к которым браузеры получают доступ через фронтальный балансировщик нагрузки. Очень типично. 99% наших HTTP-запросов без проблем обрабатываются этой параллельной архитектурой.
К сожалению, 1% запросов, обрабатываемых Apache, требует доступа к веб-сервису SOAP уровня на внешнем сервере, который абсолютно неспособен обрабатывать параллелизм, что приводит к множеству критических ошибок.
Я ищу способ канализировать эти запросы SOAP через своего рода прокси, который может ставить в очередь и синхронно блокировать запросы к внешнему серверу.
Реализуют ли такие очереди стандартные прокси, такие как Pound, Nginx, Squid или Varnish?
У Amazon есть услуга, которой вы могли бы воспользоваться. Это называется Simple Queue Service. http://aws.amazon.com/sqs/
Вы можете использовать это, чтобы ставить задания в очередь и выбирать их из очереди по одному.
Когда сообщение получено, оно блокируется на время обработки. Это предотвращает одновременную обработку сообщения другими компьютерами. Если обработка сообщения завершится неудачно, срок блокировки истечет, и сообщение снова станет доступным. В случае, когда приложению требуется больше времени для обработки, таймаут «блокировки» можно изменить динамически с помощью операции ChangeMessageVisibility.
Есть несколько альтернатив, которые подойдут для вашего варианта использования:
Redis может быть решением такой проблемы. Как это обрабатывает атомарные операции.