Como determinar em que direção dimensionar um aplicativo da Web

1

Atualmente, estou desenvolvendo um aplicativo da web e estou tentando descobrir a melhor maneira de hospedá-lo. Eu olhei em volta, usei dezenas de frases diferentes, li centenas de posts e comentários. mas nenhum deles parece responder a esse aspecto específico da questão. Eles explicam como calcular o número de usuários atuais que uma determinada instância de um aplicativo pode manipular. mas não como determinar para onde ir lá para alcançar seu objetivo. Eu olhei para a nuvem, eu olhei para VPS e, claro, considerei dedicado todos têm preços diferentes, mas no final eu percebi que tudo se resume a qual direção você precisa escalar (verticalmente, adicionar mais poder a qualquer um instância do aplicativo através de mais poder de CPU e mais ram, ou horizontalmente, Adicionar nova instância do aplicativo e carregá-los escala)

Parte 1

Vamos com um pequeno cenário por enquanto Vamos dizer que você tem um aplicativo de API. toma solicitações HTTP e responde com JSON, o clima é construído em Node, Rails, PHP ou qualquer outra coisa é irreverente. Supondo que você possa estimar todos esses fatores em horas de pesquisa: Usuários simultâneos: 100 - > 1000 - > N Solicitações por minuto por usuário: 1? 10? 50? Tamanho dos dados transferidos em média por solicitação: 1Kb? 2 KB? 5 KB? 10?

Como você determina qual direção é a melhor para escalar? é a relação desses fatores? Existe algum ponto que um desses fatores pode chegar onde você terá que escalar na outra direção para lidar com isso?

Parte 2

Desta vez, vamos assumir um tipo diferente de aplicativo. Desta vez, é um aplicativo de soquete da web que lida com a troca de dados em tempo real, como bate-papo ou notificação de eventos (eventos enviados de uma mensagem Q como Redis ou RabbitMQ) Este aplicativo (formulário que eu juntei) será dimensionado de forma completamente diferente dos mesmos fatores da Parte 1, como você determina qual direção seguir?

Geral

Estou fazendo essa pergunta para descobrir qual tipo de hospedagem seria melhor para qual aplicativo. qual me dará mais estabilidade? que vai me deixar mais dinheiro no bolso para o mesmo número de usuários?

    
por Ryex 26.03.2013 / 08:52

1 resposta

1

Esta questão seria quase impossível de responder em sua forma atual, porque é muito amplo de um assunto. As coisas necessárias para responder a isso envolvem todo um campo de engenharia onde as pessoas ganham a vida fazendo tempo integral (inclusive eu). IMHO, é parte ciência e parte arte, e você encontrará vários livros (por meu colega) por aí que falam sobre esse assunto.

Portanto, posso fornecer apenas alguns indicadores breves e amplos.

  • Não existe uma fórmula única para determinar a melhor direção a escalar. Devido a vários aplicativos com as mesmas métricas capturadas e previstas, a maneira de dimensioná-las pode ser totalmente diferente. Tudo depende de onde os gargalos são baseados no comportamento de aplicação (mis).
  • A melhor maneira é realmente testar e medir. Certifique-se de que seu aplicativo esteja instrumentado para que você possa testar o aplicativo com cargas variadas e observar / medir os efeitos em TODOS os seus recursos (servidor, rede, etc.). Você também precisará testar à medida que escala em direções diferentes.
  • A partir da experiência, a maioria dos problemas de escalonamento de aplicativos da web não é (ou não deveria) ser resolvida jogando mais hardware / recursos nele. Mais frequentemente do que não, é o código e suas ineficiências (que eu classifico como um defeito)

Com isso dito, se eu fizesse tudo isso e precisasse escolher uma solução de hospedagem, a que tivesse mais flexibilidade e capacidade, tanto em termos de oferta quanto de controle de custos, seria a Amazon Web Services (AWS). . É o único provedor de hospedagem que usei que se aproxima dos grandes data centers corporativos e fornece a maioria dos recursos que eu estava procurando. Os principais recursos são:

  • Você pode realmente hospedar seu aplicativo lá para começar com um custo (ou quase nenhum) usando o nível gratuito
  • Você pode dimensionar verticalmente (aumentar a CPU e a memória em um único host) com apenas alguns cliques e reinicializar
  • Você pode dimensionar horizontalmente (é claro) com mais servidores e outros serviços dependentes (como balanceadores de carga)
  • Eles têm muitos outros serviços além da hospedagem de VMs (o serviço do EC2 é apenas um dos serviços deles)

Não tenho experiência com outros provedores de IaaS (Rackspace, Microsoft Azure etc.), portanto não posso compará-los nem compará-los. Talvez isso ajude você a seguir um caminho para começar sua pesquisa.

Divulgação: No momento de escrever esta resposta, não possuo ações da Amazon nem trabalho para elas =)

    
por 26.03.2013 / 10:27