4

Our production environment consists in n Apache web servers accessed by browsers via a frontal load balancer. Very typical. 99% of our HTTP requests are gracefully handled by this parallelized architecture with no problem.

Unfortunately, 1% of the requests handled by Apache need to access to a tier SOAP webservice, on a foreign server, which is absolutely unable to handle concurrency, resulting in many critical errors.

I'm looking for a way to canalise those SOAP requests through a sort of proxy, able to queue and lock synchronously the requests to the foreign server.

Do standard proxies like Pound, Nginx, Squid or Varnish implement such queues ?

Tom Desp
  • 205
  • 1
  • 4

2 Answers2

2

Amazon has a service that you could use. It's called Simple Queue Service. http://aws.amazon.com/sqs/

You can use this to queue jobs and pick them off the queue one at a time.

When a message is received, it becomes “locked” while being processed. This keeps other computers from processing the message simultaneously. If the message processing fails, the lock will expire and the message will be available again. In the case where the application needs more time for processing, the “lock” timeout can be changed dynamically via the ChangeMessageVisibility operation.

There are number of alternatives that could suit your use case:

Drew Khoury
  • 4,569
  • 8
  • 26
  • 28
  • Thanks a lot for the clues. Redis seems quite an option since we also make abundant use of shared memory. Could be one stone two birds. – Tom Desp May 14 '13 at 20:23
0

Redis may be a solution to this kind of problem. As it handles atomic operations.