Neste módulo, você vai dividir o aplicativo node.js em vários serviços interconectados e enviar cada imagem do serviço a um repositório do Amazon ECR. Comece a compilar
A arquitetura final do aplicativo usa o Amazon Elastic Container Service e o Application Load Balancer.
a. Cliente
O cliente faz solicitações de tráfego na porta 80.
b. Load Balancer
O Application Load Balancer (ALB) direciona o tráfego externo ao serviço correto. O ALB inspeciona a solicitação do cliente e usa as regras de roteamento para direcionar a solicitação para uma instância e uma porta para o grupo-alvo que corresponde à regra.
c. Grupos-alvo
Cada serviço tem um grupo-alvo que mantém o controle das instâncias e portas de cada contêiner em execução para esse serviço.
d. Serviços conteinerizados
O Amazon Elastic Container Service (Amazon ECS) implanta cada serviço em um contêiner em todo um cluster do EC2. Cada contêiner trata apenas de um único recurso.
Isolamento de falhas
Mesmo as melhores organizações de engenharia podem ter e têm falhas fatais na produção. Além de seguir todas as melhores práticas padrão para lidar com falhas, a compilação em microsserviços se apresenta como uma abordagem que pode limitar o impacto de tais falhas. Uma boa arquitetura de microsserviço significa que, se uma pequena parte do seu serviço falhar, então aquela será a única parte a cair. O resto do seu serviço pode continuar a trabalhar adequadamente.
Isolamento para segurança
Em um aplicativo monolítico se um recurso do aplicativo tem uma violação de segurança, por exemplo, uma vulnerabilidade que permite a execução remota de código, então você deve assumir que um invasor pode ter obtido acesso a todos os outros recursos do sistema. Isso pode ser perigoso se, por exemplo, seu recurso de upload de avatar tiver um problema de segurança que acabe comprometendo seu banco de dados com senhas de usuários. A separação de recursos em microsserviços usando o Amazon ECS permite acesso seguro a recursos da AWS, dando a cada serviço sua própria função no IAM. Quando as melhores práticas do microsserviço são seguidas, o resultado é que, se um invasor comprometer um serviço, ele só obtém acesso aos recursos desse determinado serviço e não pode acessar horizontalmente outros recursos de outros serviços sem invadir esses serviços também.
Escalabilidade independente
Quando os recursos são divididos em microsserviços, a quantidade de infraestrutura e o número de instâncias usadas por cada classe de microsserviço pode ser escalada para cima e para baixo de forma independente. Isso torna mais fácil medir o custo de determinado recurso, identificar recursos que podem precisar ser otimizados primeiro, bem como manter o desempenho confiável para outros recursos, se um determinado recurso estiver fora de controle.
Velocidade de desenvolvimento
Microsserviços reduzem os riscos em desenvolvimento, o que pode habilitar uma equipe para compilar mais rapidamente. Em um monólito, adicionar um novo recurso pode afetar todos os outros recursos que o monólito contém. Os desenvolvedores devem considerar o impacto de qualquer código que adicionam e garantir que eles não corrompem nada. Por outro lado, uma arquitetura de microsserviço adequada tem um novo código para um novo recurso que vai para um novo serviço. Desenvolvedores podem ter certeza de que qualquer código que eles escrevam realmente não poderá impactar o código existente, a menos que eles explicitamente escrevam uma conexão entre dois microsserviços.