

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Arquitetura simples de microsserviços em AWS
<a name="simple-microservices-architecture-on-aws"></a>

 Os aplicativos monolíticos típicos consistem em diferentes camadas: uma camada de apresentação, uma camada de aplicativo e uma camada de dados. As arquiteturas de microsserviços, por outro lado, separam as funcionalidades em *verticais* coesas de acordo com domínios específicos, em vez de camadas tecnológicas. A Figura 1 ilustra uma arquitetura de referência para um aplicativo típico de microsserviços em. AWS

![\[Diagrama mostrando um aplicativo típico de microsserviços em AWS\]](http://docs.aws.amazon.com/pt_br/whitepapers/latest/microservices-on-aws/images/typical-microservices-application.png)


# Interface do usuário
<a name="user-interface"></a>

 Os aplicativos web modernos geralmente usam JavaScript estruturas para desenvolver aplicativos de página única que se comunicam com o back-end. APIs Normalmente, eles APIs são criados usando Representational State Transfer (REST) ou RESTful APIs GraphQL APIs. [O conteúdo estático da web pode ser servido usando o Amazon Simple Storage Service ([Amazon S3](https://aws.amazon.com/s3/)) e a Amazon. CloudFront](https://aws.amazon.com/cloudfront/) 

# Microsserviços
<a name="microservices"></a>

 APIs são considerados a *porta* de entrada dos microsserviços, pois são o ponto de entrada para a lógica do aplicativo. Normalmente, a API de serviços RESTful web ou o GraphQL APIs são usados. Eles APIs gerenciam e processam chamadas de clientes, gerenciando funções como gerenciamento de tráfego, filtragem de solicitações, roteamento, armazenamento em cache, autenticação e autorização. 

## Implementações de microsserviços
<a name="microservices-implementations"></a>

 AWS oferece elementos básicos para desenvolver microsserviços, incluindo Amazon ECS e Amazon EKS como opções para mecanismos de orquestração de contêineres AWS Fargate e EC2 como opções de hospedagem. AWS Lambda é outra forma sem servidor de criar microsserviços. AWS A escolha entre essas opções de hospedagem depende dos requisitos do cliente para gerenciar a infraestrutura subjacente. 

 AWS Lambda permite que você carregue seu código, escalando e gerenciando automaticamente sua execução com alta disponibilidade. Isso elimina a necessidade de gerenciamento de infraestrutura, para que você possa agir rapidamente e se concentrar em sua lógica de negócios. O Lambda oferece suporte a [várias linguagens de programação](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) e pode ser acionado por outros AWS serviços ou chamado diretamente de aplicativos móveis ou da web. 

 Os aplicativos baseados em contêineres ganharam popularidade devido à portabilidade, produtividade e eficiência.AWS oferece vários serviços para criar, implantar e gerenciar contêineres. 
+  [App2Container](https://aws.amazon.com/app2container/), uma ferramenta de linha de comando para migrar e modernizar aplicativos web Java e.NET em formato de contêiner. AWS O A2C analisa e cria um inventário de aplicativos executados em máquinas virtuais, bare metal, instâncias do Amazon Elastic Compute Cloud (EC2) ou na nuvem. 
+  O Amazon Elastic Container Service ([Amazon ECS](https://aws.amazon.com/ecs/)) e o Amazon Elastic Kubernetes [Service (](https://aws.amazon.com/eks/)Amazon EKS) gerenciam sua infraestrutura de contêineres, facilitando o lançamento e a manutenção de aplicativos em contêineres.  
  +  [O Amazon EKS é um serviço gerenciado de Kubernetes para executar o Kubernetes na AWS nuvem e em datacenters locais (Amazon EKS Anywhere).](https://aws.amazon.com/eks/eks-anywhere/) Isso estende os serviços em nuvem para ambientes locais para processamento de dados local de baixa latência, altos custos de transferência de dados ou requisitos de residência de dados (consulte o whitepaper sobre “[Executando cargas de trabalho de contêineres híbridos com o Amazon EKS](https://d1.awsstatic.com/kubernetes-pmm/eks-a/getting-started/AWS_Whitepaper_Running_Hybrid_Container_Workloads_with_Amazon_EKS_Anywhere.pdf) Anywhere”). Você pode usar todos os plug-ins e ferramentas existentes da comunidade Kubernetes com o EKS. 
  +  O Amazon Elastic Container Service (Amazon ECS) é um serviço de orquestração de contêineres totalmente gerenciado que simplifica sua implantação, gerenciamento e escalabilidade de aplicativos em contêineres. Os clientes escolhem o ECS pela simplicidade e pela profunda integração com AWS os serviços. 

 Para ler mais, consulte o blog [Amazon ECS vs Amazon EKS: compreendendo os serviços de AWS contêineres](https://aws.amazon.com/blogs/containers/amazon-ecs-vs-amazon-eks-making-sense-of-aws-container-services/). 
+  [AWS App Runner](https://aws.amazon.com/apprunner/)é um serviço de aplicativo de contêiner totalmente gerenciado que permite criar, implantar e executar aplicativos web em contêineres e serviços de API sem experiência prévia em infraestrutura ou contêiner. 
+  [AWS Fargate](https://aws.amazon.com/fargate/), um mecanismo de computação sem servidor, trabalha com o Amazon ECS e o Amazon EKS para gerenciar automaticamente os recursos computacionais para aplicativos de contêineres. 
+  [O Amazon ECR](https://aws.amazon.com/ecr/) é um registro de contêineres totalmente gerenciado que oferece hospedagem de alto desempenho, para que você possa implantar imagens e artefatos de aplicativos de forma confiável em qualquer lugar. 

# Integração contínua e implantação contínua (CI/CD)
<a name="continuous-integration-and-continuous-deployment-cicd"></a>

 A integração contínua e a entrega contínua (CI/CD) são uma parte crucial de uma DevOps iniciativa para mudanças rápidas no software. AWS oferece serviços CI/CD para implementação de microsserviços, mas uma discussão detalhada está além do escopo deste documento. Para obter mais informações, consulte o AWS whitepaper [Praticando a integração contínua e a entrega contínua](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

# Redes privadas
<a name="private-networking"></a>

AWS PrivateLink é uma tecnologia que aprimora a segurança dos microsserviços ao permitir conexões privadas entre sua Virtual Private Cloud (VPC) e os serviços compatíveis. AWS Ele ajuda a isolar e proteger o tráfego de microsserviços, garantindo que ele nunca atravesse a Internet pública. Isso é particularmente útil para cumprir regulamentações como PCI ou HIPAA.

# Datastore
<a name="data-store"></a>

 O armazenamento de dados é usado para manter os dados necessários aos microsserviços. Armazenamentos populares para dados de sessão são caches na memória, como Memcached ou Redis. AWS oferece as duas tecnologias como parte do ElastiCache serviço gerenciado [da Amazon](https://aws.amazon.com/elasticache/). 

 Colocar um cache entre os servidores de aplicativos e um banco de dados é um mecanismo comum para reduzir a carga de leitura no banco de dados, o que, por sua vez, pode permitir que recursos sejam usados para suportar mais gravações. Os caches também podem melhorar a latência. 

 Os bancos de dados relacionais ainda são muito populares para armazenar dados estruturados e objetos de negócios. AWS [oferece seis mecanismos de banco de dados (Microsoft SQL Server, Oracle, MySQL, MariaDB, PostgreSQL e [Amazon Aurora) como serviços gerenciados por meio do Amazon](https://aws.amazon.com/rds/aurora/) Relational Database Service (Amazon RDS).](https://aws.amazon.com/rds/) 

 Os bancos de dados relacionais, no entanto, não são projetados para uma escala infinita, o que pode tornar difícil e demorada a aplicação de técnicas para suportar um grande número de consultas. 

 Os bancos de dados NoSQL foram projetados para favorecer a escalabilidade, o desempenho e a disponibilidade em relação à consistência dos bancos de dados relacionais. Um elemento importante dos bancos de dados NoSQL é que eles normalmente não impõem um esquema estrito. Os dados são distribuídos em partições que podem ser escaladas horizontalmente e recuperados usando chaves de partição. 

 Como os microsserviços individuais são projetados para fazer algo bem, eles normalmente têm um modelo de dados simplificado que pode ser adequado à persistência do NoSQL. É importante compreender que os bancos de dados NoSQL têm padrões de acesso diferentes dos bancos de dados relacionais. Por exemplo, não é possível unir tabelas. Se isso for necessário, a lógica deve ser implementada no aplicativo. Você pode usar o [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) para criar uma tabela de banco de dados que pode armazenar e recuperar qualquer quantidade de dados e atender a qualquer nível de tráfego de solicitações. O DynamoDB oferece desempenho de um dígito em milissegundos, no entanto, há certos casos de uso que exigem tempos de resposta em microssegundos. O [DynamoDB](https://aws.amazon.com/dynamodb/dax/) Accelerator (DAX) fornece recursos de cache para acessar dados. 

 O DynamoDB também oferece um recurso de escalabilidade automática para ajustar dinamicamente a capacidade de transferência em resposta ao tráfego real. No entanto, há casos em que o planejamento da capacidade é difícil ou não é possível devido aos grandes picos de atividade de curta duração em seu aplicativo. Para tais situações, o DynamoDB oferece uma opção sob demanda, que oferece preços simples. pay-per-request O DynamoDB on-demand é capaz de atender milhares de solicitações por segundo instantaneamente sem planejamento de capacidade. 

 Para obter mais informações, consulte [Gerenciamento distribuído de dados](distributed-data-management.md) [Como escolher um banco de dados](https://aws.amazon.com/startups/learn/maximizing-performance-with-aws-databases). 

# Simplificando as operações
<a name="simplyfing-operations"></a>

 Para simplificar ainda mais os esforços operacionais necessários para executar, manter e monitorar microsserviços, podemos usar uma arquitetura totalmente sem servidor. 

## Implantação de aplicativos baseados em Lambda
<a name="deploying-lambda-based-applications"></a>

 Você pode implantar seu código Lambda fazendo o upload de um `zip` arquivo arquivado ou criando e carregando uma imagem de contêiner por meio da interface do usuário do console usando um URI de imagem válido do Amazon ECR. No entanto, quando uma função Lambda se torna complexa, o que significa que ela tem camadas, dependências e permissões, o upload por meio da interface do usuário pode se tornar complicado para alterações no código. 

 Usar AWS CloudFormation and the AWS Serverless Application Model ([AWS SAM](https://github.com/awslabs/serverless-application-model)) AWS Cloud Development Kit (AWS CDK), ou Terraform simplifica o processo de definição de aplicativos sem servidor. AWS O SAM, suportado nativamente pelo CloudFormation, oferece uma sintaxe simplificada para especificar recursos sem servidor.AWS Lambda As camadas ajudam a gerenciar bibliotecas compartilhadas em várias funções do Lambda, minimizando o espaço ocupado pelas funções, centralizando bibliotecas com reconhecimento de inquilinos e melhorando a experiência do desenvolvedor. O Lambda SnapStart for Java aprimora o desempenho de inicialização de aplicativos sensíveis à latência. 

 Para implantar, especifique políticas de recursos e permissões em um CloudFormation modelo, empacote artefatos de implantação e implante o modelo. O SAM Local, uma AWS CLI ferramenta, permite o desenvolvimento local, o teste e a análise de aplicativos sem servidor antes do upload para o Lambda. 

 A integração com ferramentas como AWS Cloud9 IDE, AWS CodeBuild, e AWS CodePipeline simplifica a criação AWS CodeDeploy, o teste, a depuração e a implantação de aplicativos baseados em SAM. 

 O diagrama a seguir mostra a implantação de AWS Serverless Application Model recursos usando ferramentas CloudFormation de AWS CI/CD. 

![\[Diagrama mostrando AWS Serverless Application Model (AWS SAM)\]](http://docs.aws.amazon.com/pt_br/whitepapers/latest/microservices-on-aws/images/aws-sam.png)


## Abstraindo as complexidades da multilocação
<a name="abstracting-multi-tenancy-complexities"></a>

 Em um ambiente multilocatário, como plataformas SaaS, é crucial simplificar as complexidades relacionadas à multilocação, permitindo que os desenvolvedores se concentrem no desenvolvimento de recursos e funcionalidades. Isso pode ser feito usando ferramentas como [AWS Lambda Layers](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html), que oferecem bibliotecas compartilhadas para abordar questões transversais. A lógica por trás dessa abordagem é que bibliotecas e ferramentas compartilhadas, quando usadas corretamente, gerenciam com eficiência o contexto do inquilino.  

 No entanto, eles não devem se estender ao encapsulamento da lógica de negócios devido à complexidade e ao risco que podem apresentar. Um problema fundamental com as bibliotecas compartilhadas é o aumento da complexidade das atualizações, tornando-as mais difíceis de gerenciar em comparação com a duplicação de código padrão. Portanto, é essencial encontrar um equilíbrio entre o uso de bibliotecas compartilhadas e a duplicação na busca pela abstração mais eficaz. 

## Gerenciamento de APIs
<a name="api-management"></a>

 O gerenciamento APIs pode ser demorado, especialmente quando se considera várias versões, estágios do ciclo de desenvolvimento, autorização e outros recursos, como limitação e armazenamento em cache. Além do [API Gateway](https://aws.amazon.com/api-gateway/), alguns clientes também usam o ALB (Application Load Balancer) ou o NLB (Network Load Balancer) para gerenciamento de API. O Amazon API Gateway ajuda a reduzir a complexidade operacional de criação e manutenção RESTful APIs. Ele permite que você crie APIs programaticamente, serve como uma “porta de entrada” para acessar dados, lógica de negócios ou funcionalidade de seus serviços de back-end, autorização e controle de acesso, limitação de taxa, armazenamento em cache, monitoramento e gerenciamento de tráfego e é executado sem gerenciar servidores. APIs 

 A Figura 3 ilustra como o API Gateway lida com chamadas de API e interage com outros componentes. Solicitações de dispositivos móveis, sites ou outros serviços de back-end são encaminhadas para o CloudFront Ponto de Presença (PoP) mais próximo para reduzir a latência e fornecer uma experiência de usuário ideal. 

![\[Diagrama mostrando o fluxo de chamadas do API Gateway\]](http://docs.aws.amazon.com/pt_br/whitepapers/latest/microservices-on-aws/images/api-gateway-call-flow.png)
