Estou pensando em como configurar melhor alguns ambientes na AWS. Eu gostaria de configurar dois servidores:
- Servidor de aplicativos (executando o aplicativo da web e os serviços REST)
- Servidor de ferramentas (executando várias tarefas ETL)
O resultado final deve ser dois servidores de aplicativos e dois servidores de ferramentas (por exemplo, um servidor appserver / tools em cada zona de disponibilidade)
- Todos os ambientes estarão falando com o mesmo banco de dados
- Cada ambiente terá seu próprio armazenamento de EBS
- Um único armazenamento compartilhado externo (EFS) que será acessível de qualquer um dos quatro ambientes.
Estou um pouco confuso em termos de como configurar o armazenamento. O objetivo é garantir que, se uma instância do EC2 for perdida, não perco nenhum dado.
Para conseguir isso, eu gostaria de configurá-lo para que o código seja implantado no armazenamento local (EBS) e o conteúdo dinâmico seja armazenado no armazenamento compartilhado externo (EFS).
Todos os appliations estarão em uma pasta com a seguinte estrutura
├─ application
├─ bin
├─ lib
├─ config
├─ logs
├─ data
├─ processed
├─ failed
Em uma instância do EC2, eu gostaria de manter a pasta config, logs e data. As outras pastas (bin e lib) conterão apenas código binário que pode ser reconstruído a partir do GIT.
Para conseguir isso, estou pensando no seguinte armazenamento
EBS no appserver 1 e no appserver 2
├─ applications
├─ finance
├─ appname1
├─ bin
├─ lib
├─ config --> /storage/finance/config
├─ logs --> /storage/finance/logs
├─ data --> /storage/finance/date
Os últimos três serão links simbólicos para pastas no armazenamento externo.
EFS (armazenamento compartilhado)
├─ storage
├─ finance
├─ appname1
├─ config
├─ logs
├─ data
A estrutura acima pode ser um pesadelo de manutenção, mas não consigo pensar em outras alternativas. Com a abordagem acima, o código é implantado em cada servidor de aplicativos, mas os dados são compartilhados entre dois appservers.
Se um servidor de aplicativos em uma zona AV morrer, o outro ainda estará funcional.
Outras opções que considero incluem ter tudo no armazenamento do EBS e contar com backups / imagens. Isso não funcionará porque os arquivos de configuração são dinâmicos e a imagem nem sempre tem os dados mais recentes.
Lendo sobre armazenamento EFS, parece que escrever para ele pode ser lento, o que é algo que está me preocupando um pouco.
Perguntas:
- Existem alternativas para o acima?
- Existem outras desvantagens na abordagem acima?
- Existe uma maneira de ter tudo (código + dados) no armazenamento local do EBS e ainda ser capaz de recuperar (para o segundo) no caso de um desastre.
Obrigado antecipadamente