Uma solução escalável para URLs multi-tenant no IIS

2

Desenvolvemos um aplicativo ASP.NET com vários inquilinos. Quando um cliente se registra, ele obtém seu próprio subdomínio para usar em seu site (por exemplo, tenant1.ourapp.com).

O processo de configuração do site do cliente precisa estar livre de configuração.

Atualmente, configuramos da seguinte forma:

  • 1 x endereço IP dedicado para o site
  • Registro de DNS A para * .ourapp.com para IP dedicado
  • Site único no IIS (7.5) lidando com todas as solicitações para IP dedicado

O restante é tratado pelo nosso aplicativo (inspecionando o URL e carregando a configuração específica do locatário, etc.).

A grande questão é como isso pode ser escalado? Digamos que eu queira hospedar apenas 50 instâncias de inquilino por site físico no IIS. Eu agora tenho o problema que o site original está lidando com todos os pedidos de ourapp.com (graças ao registro de dns curinga).

Também estamos olhando para o Azure, portanto, uma solução que funcione tanto para um servidor autônomo quanto para o Azure seria excelente!

    
por Ben 28.03.2011 / 18:12

2 respostas

1

Eu alteraria um pouco sua arquitetura:

O Windows Azure vem com um balanceador de carga integrado. Instale todos os seus sites em uma única Webrole que pode ser distribuída em várias instâncias. Configure seu aplicativo multilocatário para rotear as solicitações internamente com base na origem / cliente / url.

Se você é verdadeiramente multi-tenant, você terá uma única base de código. O conteúdo visto pelo usuário depende do contexto / user-id / etc. Dessa forma, você tem um aplicativo, todos compartilham os recursos de suas instâncias de uma maneira round-robin e nenhum servidor único pode suportar uma falha.

Colocar 50 sites em um servidor, outros 50 sites em outro servidor, etc. é a maneira "antiga" e não-nuvem de lidar com as coisas. Seu servidor apaga e 50 clientes estão inativos. E não tem agilidade / escalabilidade quando um dos clientes fica "muito quente" para um único servidor.

    
por 30.03.2011 / 19:03
0

Em geral, com algo assim, se eu entendi sua pergunta corretamente, você deve procurar em um balanceador de carga para distribuir a carga em vários servidores da web. Você enviaria todas as solicitações para o balanceador de carga e encaminharia as solicitações para seus servidores da Web.

Você poderia fazer isso de várias maneiras, você sempre poderia enviar tenant1.ourapp.com para o mesmo servidor, ou você poderia espalhar isso entre todos ou um conjunto de servidores.

Pessoalmente, sou um fã de usar o HAProxy no Linux como um balanceador de carga, também existem outras opções de balanceamento de carga de software e hardware.

    
por 28.03.2011 / 18:26