Executando o crontab no grupo de dimensionamento automático da AWS

2

Eu tenho a seguinte configuração: 1 servidor com aplicativo X, que executa um crontab uma vez por hora. O crontab se conecta ao banco de dados e executa cálculos pesados e exporta dados para um arquivo de dados especial e reinicia o aplicativo. A exportação pode ser executada de 10 minutos a 40 minutos.

Eu quero:

  • Mova esse servidor para a AWS e use o grupo de escalonamento automático.

  • O crontab é executado em apenas um servidor, faça o cálculo para exportar os dados e, de alguma forma, sincronize-os com todos os outros servidores ativos.

  • Todos os servidores devem detectar automaticamente os novos dados e reiniciar-se com segurança (não durante a sincronização, por exemplo).

  • Os novos servidores que iniciam a partir dos grupos de dimensionamento automático mostram automaticamente os arquivos de dados na inicialização antes de iniciar o aplicativo real.

Não tenho uma ideia "simples" sobre como fazer isso ou qualquer solução específica da AWS.

Esta é a minha ideia:

  • Execute um servidor fora do grupo de escalonamento automático. Execute o crontab apenas nesse servidor. Todos os arquivos de dados serão enviados para o S3.

  • Todos os servidores de escalonamento automático terão um crontab que será executado a cada minuto e verificará um arquivo exclusivo "please_download_me_TIMESTAMP"

  • Quando os arquivos forem baixados, o script reiniciará o serviço.

  • Se um novo servidor for iniciado, na inicialização, ele buscará automaticamente todos os arquivos do S3.

Você acha que isso funcionaria?

    
por dobber 07.10.2015 / 23:05

2 respostas

0

Este é um problema comum no AWS EC2 e foi resolvido. Consulte o link para obter um exemplo com a implementação.

    
por 05.10.2016 / 22:50
0

Reconhecendo que essa é uma pergunta antiga de 2015, contestada por Joe, posso responder também.

Se o trabalho for uma vez por hora e levar de 10 a 40 minutos, você pagará uma hora inteira de qualquer maneira. Não faz sentido iniciar e desligar servidores, apenas deixe um servidor em execução.

Se fosse menos frequente você poderia ter um evento cronometrado que colocasse uma mensagem em uma fila SQS - isso poderia ser feito por um t2.nano ou talvez houvesse uma maneira mais barata de fazer isso com os serviços da Amazon - o Lambda? Escala automática com base no tamanho da fila. Quando há dados a serem processados, um servidor é criado, processa os dados, move-os para onde for necessário e, em seguida, desliga-se.

Outra maneira de fazer isso seria o escalonamento baseado em tempo, mas novamente apenas se fosse menos do que hora a hora.

    
por 05.10.2016 / 23:21