Como balancear a carga do SQL Server 2008 para aplicativos ASP.NET de alto uso?

12

Imagine que você tenha um aplicativo da Web bem-sucedido que usa ASP.NET e IIS 7. Ele gera muitas chamadas para um banco de dados do SQL Server 2008 e espera-se que esteja disponível ao público com 99,9% de tempo de atividade (tempo de inatividade de 8 horas). 45 minutos por ano).

Nossos objetivos são:

  • Instale o Windows Updates no servidor sem causar tempo de inatividade para nossos clientes
  • Impede que falhas de hardware no servidor diminuam os aplicativos ASP.NET devido a tempos limite

Diferentemente do balanceamento de carga de um aplicativo ASP.NET, o SQL de balanceamento de carga parece ser muito mais difícil. Quais são suas práticas recomendadas para configurar um cluster simples do SQL Server 2008 R2 com carga balanceada para um Micro-ISV que usa a pilha da Microsoft?

    
por Yakov-MIK 07.05.2011 / 08:32

5 respostas

4

Se você precisar de alta disponibilidade, o Windows / SQL Server Clustering ou o SQL Server Database Mirroring oferecerão soluções. O cluster requer muito planejamento e familiarização se você nunca fez isso antes, mas será transparente para o aplicativo.

O balanceamento de carga é possível com o SQL Server, mas não é para os mais sensíveis. É uma solução que usa o balanceamento de carga de rede do Windows (NLB) na frente dos SQL Servers. Os próprios SQL Servers no NLB são mais fáceis de gerenciar se forem somente leitura, mas podem ser de leitura / gravação se você usar a replicação transacional com assinantes atualizáveis. Este tipo de replicação está marcado para deprecação em uma versão futura.

Uma possibilidade final é Bancos de Dados Compartilhados Escaláveis, mas eles são definitivamente somente leitura.

Mais leitura:

Veja os livros de Apress de Allan Hirt sobre a Alta Disponibilidade do SQL Server 2005 e a Replicação Pro SQL Server 2005/2008 da Apress.

Bancos de dados compartilhados dimensionáveis: link

    
por 08.05.2011 / 12:06
2

Os sistemas de bancos de dados relacionais raramente são balanceados por carga da mesma maneira que os servidores da Web. O problema com a abordagem clássica ao balanceamento de carga é que todos os bancos de dados precisam estar em constante sincronização. O modelo relacional é inútil se dois servidores não tiverem estado idêntico em qualquer ponto no tempo.

Da sua pergunta, parece que você nem está tentando realizar o balanceamento de carga, que é basicamente uma medida de desempenho para garantir que apenas tantos usuários estejam atingindo cada servidor quanto o servidor puder manipular. Parece que você quer uma configuração de alta disponibilidade . Desde que você diz que você está usando o SQL Server, eu iria olhar para os failovers. Isso significa que, se o banco de dados principal não estiver disponível, os clientes tentarão acessar os servidores de failover. O SQL Server manipula mantendo a instância primária e cada failover em sincronia e também lida com a ressincronização da instância primária para o failover quando o principal volta a ficar online offline.

    
por 07.05.2011 / 11:00
0

Ok, aqui vamos nós. NÃO PODE SER FEITO. Não sem alterações de aplicativos.

  • Instalar atualizações - use clustering ou espelhamento para garantir que você tenha DOIS bancos de dados que funcionem ou que possam fazer failover em outro computador com mais rapidez. Espelhamento strongmente preferido.
  • Reescreva o aplicativo para lidar com isso (ou seja, conexões com falha, precisa reconectar-se de forma transparente para que ele se conecte a uma cópia).

Perceba que você ainda precisa desativar o aplicativo para manutenção quando implantar uma nova cópia / make de alterações no esquema do banco de dados.

    
por 07.05.2011 / 12:02
0

Uma resposta econômica aqui é quase sempre armazenar em buffer o banco de dados com um servidor de hospedagem de nível balanceado de commodity barato, que fornece processamento de lógica e armazenamento de dados que, de outra forma, estaria atrapalhando os recursos do banco de dados. Obviamente, isso requer algum pensamento sobre a volatilidade dos dados e estratégias de armazenamento em cache.

    
por 07.05.2011 / 21:31
-1

Deixe-me dar uma resposta jurássica. Se seus objetivos incluem "instalar atualizações do Windows", você está além do resgate.

Eu tenho a barba grisalha e lembro de uma época em que um aplicativo podia funcionar 10 anos sem ter que sofrer "atualizações do sistema operacional". O tempo de vida útil de um aplicativo foi medido em décadas, não em anos.

Então, meu conselho é este: estabelecer uma versão funcional do seu banco de dados + aplicativo do SQL Server e ISOLAR O SERVIDOR DE BANCO DE DADOS A PARTIR DAS ATUALIZAÇÕES DA MICROSOFT. Se não estiver quebrado, não conserte.

Use discos RAID hot-swappable.

Tenha em mãos um servidor de banco de dados de imagens espelhadas (de acordo com a sugestão da TomTom) para o caso de seu hardware pirar.

    
por 07.05.2011 / 23:25