Como devo usar o EC2? Uma instância por aplicativo ou uma para toda a minha arquitetura

5

Eu tenho uma arquitetura complexa envolvendo 5 aplicações diferentes:

  • 1 API
  • 1 quadro de anúncios
  • 1 painel de controle
  • 1 Painel de Administração
  • 1 aplicativo de hospedagem de arquivo público

Todos esses aplicativos estão hospedados em um único servidor dedicado e em execução no Node.js

Eu quero empurrar minha arquitetura na nuvem Amazon AWS, mas ainda estou me questionando sobre a nova arquitetura que quero configurar.

Preciso dividir meus aplicativos e executar uma instância do EC2 para cada aplicativo (e possivelmente um balanceador de carga para cada grupo de aplicativos) ou posso executar todos os meus aplicativos em uma única instância e usar um único balanceador de carga sobre ele .

Eu gostaria de poder ser mais preciso, mas não estou acostumado a técnicas de dimensionamento.

Hugo.

    
por gogson 01.10.2013 / 11:58

2 respostas

3

Supondo que você não esteja preocupado com a alta disponibilidade, se uma instância puder manipular a carga, coloque-as todas em uma única instância. Dito isso, eu colocaria algum monitoramento em torno desses serviços específicos para que você saiba quando é hora de eles terem seus próprios hosts. Você pode achar que serviços diferentes precisarão ser expandidos em taxas diferentes. A única boa maneira de ficar de olho é com bom monitoramento e instrumentação.

Você pode poupar muita dor de cabeça mais tarde, introduzindo alguma abstração entre os serviços. Por exemplo, certifique-se de que quando um serviço está chamando a API, ele o chama por algum nome (o DNS é ótimo para isso). Algo como api.myapp.com vai ficar bem. Talvez inicialmente, todos os nomes apontem para o mesmo host. Mas, no futuro, quando você precisar escalonar, poderá apontar esse nome para um Elastic Load Balancer com várias instâncias por trás dele e nada em seu aplicativo precisará ser alterado para falar com as novas instâncias.

Se você está preocupado com a alta disponibilidade, precisa de mais de uma caixa. ponto final.

    
por 02.10.2013 / 00:45
0

Dadas as informações que você forneceu acima, eu recomendaria a compartimentação ou a abstração de serviços entre si se você quiser mantê-las em uma caixa. Como administrador de sistemas, eu não recomendaria depender de uma única caixa para toda a arquitetura, mas se você não estiver preocupado com a alta disponibilidade e tiver uma solução de backup adequada para qualquer dado que deseje reter no caso de falha, em seguida, vá em frente (mesmo se você está distribuindo sua arquitetura uma caixa por serviço, você ainda deve estar fazendo backup de seus dados e configurações!)

Se, no entanto, você estiver disposto a distribuir seus serviços por várias instâncias do EC2 - o que ajudará na escalabilidade posterior - lembre-se de usar nomes DNS ou endereços IP elásticos EC2, pois os endereços IP internos das caixas podem mudar. Como o tráfego entre os endereços IP internos é mais barato, você pode querer investigar o uso desses e do DNS dinâmico se tiver muito tráfego entre componentes.

Lembre-se também de que se você precisar escalar além de uma única instância por serviço em algum momento, seu design deve levar em consideração o possível uso futuro dos balanceadores de carga elásticos e do Auto Scaling da AWS.

Se você precisar que seu CEO seja capaz de criar uma nova pilha rapidamente em caso de problemas, eu recomendaria investigar o serviço Cloud Formation da AWS. Isso permite usar arquivos de configuração JSON para definir uma pilha composta de vários recursos da AWS e iniciar e encerrar seu serviço com interação mínima.

    
por 02.10.2013 / 18:48