Como bloquear o acesso simultâneo a um webservice compartilhado de vários servidores web?

3

Nosso ambiente de produção consiste em n servidores da web Apache acessados por navegadores por meio de um balanceador de carga frontal. Muito típico. 99% das nossas solicitações HTTP são manipuladas normalmente por esta arquitetura paralelizada sem nenhum problema.

Infelizmente, 1% das solicitações tratadas pelo Apache precisam acessar um serviço da Web SOAP de camada, em um servidor externo, o qual é absolutamente incapaz de lidar com a simultaneidade , resultando em muitos erros críticos.

Estou procurando uma maneira de canalizar essas solicitações SOAP por meio de um tipo de proxy, capaz de enfileirar e bloquear de forma síncrona as solicitações para o servidor externo.

Proxies padrão como Pound, Nginx, Squid ou Varnish implementam tais filas?

    
por Tom Desp 14.05.2013 / 12:44

2 respostas

2

A Amazon tem um serviço que você pode usar. É chamado de Simple Queue Service. link

Você pode usar isso para colocar trabalhos em fila e selecioná-los da fila um de cada vez.

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.

Há várias alternativas que podem se adequar ao seu caso de uso:

por 14.05.2013 / 15:41
0

O Redis pode ser uma solução para esse tipo de problema. Como ele lida com operações atômicas .

    
por 14.05.2013 / 12:52