Load Balancing em serviços WCF


Quando precisamos de escalabilidade em nossas aplicações, é muito comum recorrermos a técnicas de cluster, failover ou load balancing para que seja possível atender as muitas requisições que chegam para a mesma.

Serviços WCF não são diferentes. Serviços que estão disponíveis através do protocolo HTTP, se comportam como aplicações ASP.NET. Uma vez que eles são expostos, podem ser acessados por milhares de clientes, afetando a sua performance. Para habilitar a técnica de load balancing para serviços WCF (HTTP), é importante que voce se atente a que funcionalidades que o seu serviço WCF utiliza e, principalmente, qual a forma de gerenciamento de instância configurada.

Quando o serviço é configurado no modo PerCall, cada requisição criará uma instancia do serviço, executará a operação e, quando finalizar, a instancia criada será descartada; uma nova requisição, recria um novo objeto, executa a operação e o descarta e, assim sucessivamente. Já quando o modo é definido como PerSession, a idéia é manter uma instancia do serviço dedicada para cada proxy, atendendo a todas as operações oriundas daquele cliente.

Caso o serviço esteja em um ambiente de load balancing com o modo PerSession definido, podemos ter alguns problemas e, entre eles, a garantia de que a requisição será sempre atendida por um determinado servidor. Neste caso, perdemos o estado do serviço, trazendo resultados inesperados para este modo. O BasicHttpBinding não suporta sessão, ao contrário do WSHttpBinding que, por sua vez, emula o suporte a sessão mas que, é ineficaz neste ambiente, já que o WCF não traz suporte de gerenciamento de estado/sessão “cross-machine” como é o caso do ASP.NET.  Finalmente, o modo Single também necessita um cuidado especial, já que apenas haverá uma única instancia para atender a todas as requisições. Onde será armazenada a instancia da classe que representa o serviço?

Sempre que possível, em um ambiente de alta escalabilidade, opte pela opção PerCall. Mas quando houver a necessidade de armazenar informações entre as requisições do cliente, uma alternativa para serviços PerCall, é incluir um identificador no contrato (ou extraí-lo das informações contextuais) para salvar e/ou carregar o estado e, como repositório, deve ser utilizado um recurso compartilhado, como uma base de dados.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s