Neste módulo, você dividirá o aplicativo node.js em vários serviços interconectados e enviará cada imagem do serviço a um repositório do Amazon Elastic Container Registry (Amazon ECR). Comece a criar
A arquitetura final do aplicativo usa o Amazon Elastic Container Service (Amazon ECS) e o Application Load Balancer (ALB).

a. Cliente
O cliente faz solicitações de tráfego pela porta 80.
b. Load Balancer
O ALB direciona o tráfego externo para o serviço correto. O ALB inspeciona a solicitação do cliente e usa as regras de roteamento para direcionar a solicitação a uma instância e uma porta para o grupo de destino que corresponde à regra.
c. Grupos de destino
Cada serviço tem um grupo de destino que monitora as instâncias e portas de cada contêiner em execução para esse serviço.
d. Microsserviços
O Amazon ECS implanta cada serviço em um contêiner em um cluster inteiro do EC2. Cada contêiner lida apenas com um único recurso.
Isolamento de falhas
Mesmo as melhores organizações de engenharia podem ter e têm falhas graves na produção. Além de seguir todas as melhores práticas padrão para lidar com falhas harmoniosamente, uma abordagem que pode limitar o impacto de tais falhas é a criação de microsserviços. Uma boa arquitetura de microsserviço significa que se uma pequena parte do seu serviço falhar, apenas essa parte do seu serviço deixará de funcionar. O resto do serviço poderá continuar a funcionar adequadamente.
Isolamento para segurança
Em um aplicativo monolítico, se um recurso tiver uma violação de segurança, por exemplo, uma vulnerabilidade que permita a execução remota de código, você deverá supor que um invasor pode ter obtido acesso a todos os outros recursos do sistema também. Isso pode ser perigoso se, por exemplo, seu recurso de upload de avatar tiver um problema de segurança que comprometa seu banco de dados com senhas de usuários. Separar recursos em microsserviços usando o Amazon ECS permite que você proteja o acesso a recursos da AWS ao dar a cada serviço sua própria função de AWS Identity and Access Management (IAM). Quando as melhores práticas de microsserviço são seguidas, o resultado é que se um invasor comprometer um serviço, ele só terá acesso aos recursos desse serviço e não poderá 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, o volume de infraestrutura e o número de instâncias usados por cada classe de microsserviço pode ser escalado para mais ou para menos de modo independente. Isso facilita a medição dos custos de um recurso específico e identifica recursos que podem precisar prioritariamente de otimização. Se um recurso específico estiver enfrentando problemas com sua necessidade de reservas, outros recursos não serão impactados e poderão manter sua performance confiável.
Velocidade de desenvolvimento
Microsserviços reduzem os riscos no desenvolvimento, o que pode favorecer uma equipe a criar mais rapidamente. Em um monólito, adicionar um novo recurso pode afetar todos os outros recursos contidos nesse monólito. Os desenvolvedores precisam considerar com cuidado o impacto de qualquer código que eles adicionam e garantir que não corrompam nada. Por outro lado, uma arquitetura adequada de microsserviço tem um novo código para um novo recurso que entra em um novo serviço. Os desenvolvedores podem ter certeza de que qualquer código que eles criem não poderá de fato afetar o código existente, a menos que eles explicitamente criem uma conexão entre dois microsserviços.