Pergunta

Eu estou procurando informações sobre como criar um fazenda web ASP.NET - ou seja, como fazer uma aplicação ASP.NET (inicialmente projetado para o trabalho em um único servidor web) o trabalho em 2, 3, 10, etc. servidores?

Nós criamos uma aplicação web que funciona bem quando, digamos, há 500 usuários ao mesmo tempo. Mas agora temos de fazer o trabalho para 10 000 utilizadores (trabalhando com o aplicativo web ao mesmo tempo).

Então, precisamos configurar servidores 20 web e fazer alguma coisa para que 10 000 usuários poderiam trabalhar com o aplicativo web, digitando "www.MyWebApp.ru" em seus navegadores da web, apesar de seus pedidos seria tratado por 20 servidores web, sem o saber isso.

1) Existe especial software padrão para criar um fazenda web ASP.NET ?

2) Ou deveríamos criar uma web farm nos , através da transferência de solicitações entre diferentes servidores web manualmente (usando ASP.NET / C # )?

Eu encontrei muito pouca informação sobre fazendas web ASP.NET e escalabilidade na web: na maioria dos casos, artigos sobre escalabilidade dizer como otimizar e aplicativo ASP.NET e torná-lo correr mais rápido. Mas eu não encontrei nenhum exemplo de uma "Olá, mundo" -como aplicativo ASP.NET Web em execução em 2 servidores web .

Seria ótimo se alguém poderia postar um link para um artigo ou, melhor, contar sobre o próprio experiência no ASP.NET "agricultura web" e abordar problemas de escalabilidade.

Obrigado, Mikhail.

Foi útil?

Solução

1) Existe software padrão especial para criar uma fazenda web ASP.NET?

Não.

2) Ou devemos criar uma fazenda web nós mesmos, através da transferência de solicitações entre diferentes servidores web manualmente (Utilizando ASP.NET / C #)?

Não.

Para construir uma fazenda web, você vai precisar de alguma forma de balanceamento de carga. Para até 8 servidores ou assim, você pode usar o Network Load Balancing (NLB), que é construída no Windows. Por mais de 8 servidores, você deve usar um balanceador de carga de hardware.

No entanto, o balanceamento de carga é realmente apenas a ponta do iceberg. Há muitas outras questões que você deve abordar, incluindo coisas como:

  1. Gerenciamento de Estado (cookies, ViewState, o estado da sessão, etc)
  2. Cache e de invalidação de cache
  3. carregamento de banco de dados (gestão de round-trips, particionamento, subsistema de disco, etc)
  4. gestão de pool de aplicativos (WSRM, resets piscina, particionamento)
  5. Implantação
  6. Monitoramento

No caso que poderia ser útil, eu cubro muitas dessas questões no meu livro: ASP.NET Ultra-fast:. Construir sites ultra-rápida e ultra-escaláveis ??usando ASP.NET e SQL Server

Outras dicas

Eu diria que você deve configurar um cluster NLB (Network Load Balancing), que basicamente divide todos os pedidos entre os nós do cluster (e como um benefício adicional detecta se as coisas estão para baixo e pára de enviar-lhes pede). Há características embutido no Windows para isso, mas eles não se comparam com um dispositivo de hardware para desempenho ou escalabilidade. Se você estiver usando Windows 2008 é realmente simples de configurar uma. Se você fizer isso verifique se você tem um chave compartilhada máquina ou você vai começar a receber exceções para viewstate ser inválido (Quando 1 servidor envia o formulário e ele envia para o outro e eles estão usando chaves diferentes para codificar os dados).

Você também pode usar DNS round-robin, mas a 20 servidores, presumivelmente em um datacenter eu não veria um ponto para ir a tais extremos loucos. Se você tem vários centros de dados que este é definitivamente vale a pena considerar (Como NLB não vai realmente funcionar bem entre data centers).

Você também vai querer ter certeza se um swap de usuário servidores eles não perdem a sessão. A maneira mais simples seria usar um banco de dados estado da sessão (configurável no web.config, ou você pode fazê-lo em todo o servidor em configurações do IIS). Se você não usar sessões embora apenas desligá-los na directiva Páginas do web.config e chamá-lo um dia. Você também pode usar um servidor de estado de sessão, mas eu não tenho nenhuma experiência com isso.

Ele também pode valer a pena considerar passar algum tempo otimizar o código ou a adição de cache directivas para conteúdo estático -. Ele pode ser muito rentável, mesmo se você só cortar a necessidade de alguns desses servidores

Espero que ajude.

Se você mantiver sua apátridas servidor, é fácil com um bom roteador que implementa algum protocolo de Robbin rodada (que enviar a cada chamada para o único IP do servidor publicado em um servidor web diferente).

Se não é apátrida (como - se um login é necessário, ou SSL) do que você precisa para manter cada sessão para o mesmo servidor.

Eis aqui algumas informações sobre MS Aplicação Request Routing - você vai ter tudo lá:

balanceamento de carga IIS

Eu não recomendaria # 2. Você vai fazer muito melhor com um balanceador de carga.

Preste atenção à gestão de estado de sessão. A menos que você configurar o balanceador de carga para manter cada usuário no mesmo servidor web, você terá que usar o servidor de estado de sessão ou banco de dados.

Além disso, verificar o uso de seu código de variáveis ??de aplicação e de Cache. Estes serão diferentes em cada servidor web. Se esses valores são estáticos, você não pode ter um problema. Mas se eles podem mudar, você pode acabar com valores diferentes em cada servidor web.

Costumava haver um problema com ViewState em 1.x, como explicado aqui . Eu não tenho certeza se este problema ainda existe.

Em seguida, há algumas mudanças que você precisa fazer para a chave do computador em web.config, conforme explicado aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top