

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Arquitectura de microservicios sencilla en AWS
<a name="simple-microservices-architecture-on-aws"></a>

 Las aplicaciones monolíticas típicas constan de diferentes capas: una capa de presentación, una capa de aplicación y una capa de datos. Las arquitecturas de microservicios, por otro lado, separan las funcionalidades en *verticales* cohesivas según dominios específicos, en lugar de capas tecnológicas. La figura 1 ilustra una arquitectura de referencia para una aplicación de microservicios típica en. AWS

![\[Diagrama que muestra una aplicación de microservicios típica en AWS\]](http://docs.aws.amazon.com/es_es/whitepapers/latest/microservices-on-aws/images/typical-microservices-application.png)


# Interfaz de usuario
<a name="user-interface"></a>

 Las aplicaciones web modernas suelen utilizar JavaScript marcos para desarrollar aplicaciones de una sola página que se comunican con el backend APIs. Por lo general, APIs se crean mediante transferencia de estado representacional (REST) o RESTful APIs APIs GraphQL. El contenido web estático se puede servir mediante Amazon Simple Storage Service ([Amazon S3](https://aws.amazon.com/s3/)) y [Amazon CloudFront](https://aws.amazon.com/cloudfront/). 

# Microservicios
<a name="microservices"></a>

 APIs se consideran la *puerta principal* de los microservicios, ya que son el punto de entrada a la lógica de las aplicaciones. Por lo general, se utilizan la API de servicios RESTful web o GraphQL APIs . Estos APIs gestionan y procesan las llamadas de los clientes y gestionan funciones como la gestión del tráfico, el filtrado de solicitudes, el enrutamiento, el almacenamiento en caché, la autenticación y la autorización. 

## Implementaciones de microservicios
<a name="microservices-implementations"></a>

 AWS ofrece componentes básicos para desarrollar microservicios, incluidos Amazon ECS y Amazon EKS como opciones para los motores de organización de contenedores AWS Fargate y EC2 como opciones de alojamiento. AWS Lambda es otra forma de crear microservicios sin servidores. AWS La elección entre estas opciones de alojamiento depende de los requisitos del cliente para administrar la infraestructura subyacente. 

 AWS Lambda le permite cargar su código, escalar automáticamente y gestionar su ejecución con alta disponibilidad. Esto elimina la necesidad de administrar la infraestructura, por lo que puede avanzar con rapidez y centrarse en la lógica empresarial. Lambda admite [varios lenguajes de programación](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) y se puede activar mediante otros AWS servicios o se puede llamar directamente desde aplicaciones web o móviles. 

 Las aplicaciones basadas en contenedores han ganado popularidad debido a su portabilidad, productividad y eficiencia.AWS ofrece varios servicios para construir, implementar y administrar contenedores. 
+  [App2Container](https://aws.amazon.com/app2container/), una herramienta de línea de comandos para migrar y modernizar aplicaciones web Java y .NET al formato de contenedor. AWS A2C analiza y crea un inventario de las aplicaciones que se ejecutan en equipos físicos, máquinas virtuales, instancias de Amazon Elastic Compute Cloud (EC2) o en la nube. 
+  Amazon Elastic Container Service ([Amazon ECS](https://aws.amazon.com/ecs/)) y Amazon Elastic Kubernetes Service [(Amazon](https://aws.amazon.com/eks/) EKS) administran la infraestructura de contenedores, lo que facilita el lanzamiento y el mantenimiento de aplicaciones en contenedores.  
  +  [Amazon EKS es un servicio de Kubernetes gestionado para ejecutar Kubernetes en la AWS nube y en centros de datos locales (Amazon EKS Anywhere).](https://aws.amazon.com/eks/eks-anywhere/) Esto amplía los servicios en la nube a los entornos locales para el procesamiento de datos local de baja latencia, los altos costos de transferencia de datos o los requisitos de residencia de datos (consulte el documento técnico sobre la [ejecución de cargas de trabajo en contenedores híbridos con Amazon EKS Anywhere](https://d1.awsstatic.com/kubernetes-pmm/eks-a/getting-started/AWS_Whitepaper_Running_Hybrid_Container_Workloads_with_Amazon_EKS_Anywhere.pdf)). Con EKS, puede utilizar todos los complementos y herramientas existentes de la comunidad de Kubernetes. 
  +  Amazon Elastic Container Service (Amazon ECS) es un servicio de organización de contenedores totalmente gestionado que simplifica la implementación, la administración y el escalado de las aplicaciones en contenedores. Los clientes eligen ECS por su simplicidad y su profunda integración con los servicios. AWS 

 Para obtener más información, consulte el blog [Amazon ECS vs Amazon EKS: making sense of AWS container services](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/)es un servicio de aplicaciones de contenedores totalmente gestionado que le permite crear, implementar y ejecutar aplicaciones web y servicios de API en contenedores sin necesidad de experiencia previa en infraestructura o contenedores. 
+  [AWS Fargate](https://aws.amazon.com/fargate/), un motor de cómputo sin servidor, funciona tanto con Amazon ECS como con Amazon EKS para administrar automáticamente los recursos de cómputo de las aplicaciones de contenedores. 
+  [Amazon ECR](https://aws.amazon.com/ecr/) es un registro de contenedores totalmente gestionado que ofrece alojamiento de alto rendimiento, por lo que puede implementar imágenes y artefactos de aplicaciones de forma fiable en cualquier lugar. 

# Integración e implementación continuas (CI/CD)
<a name="continuous-integration-and-continuous-deployment-cicd"></a>

 La integración y la entrega continuas (CI/CD) son una parte crucial de una DevOps iniciativa para realizar cambios rápidos en el software. AWS ofrece servicios CI/CD para implementar microservicios, pero un análisis detallado va más allá del alcance de este documento. Para obtener más información, consulte el documento AWS técnico [Practicar la integración continua y la entrega continua en formato práctico](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

# Red privada
<a name="private-networking"></a>

AWS PrivateLink es una tecnología que mejora la seguridad de los microservicios al permitir conexiones privadas entre su Nube Privada Virtual (VPC) y los servicios compatibles. AWS Ayuda a aislar y proteger el tráfico de microservicios, garantizando que nunca atraviese la Internet pública. Esto es particularmente útil para cumplir con normativas como la PCI o la HIPAA.

# Almacén de datos
<a name="data-store"></a>

 El almacén de datos se utiliza para conservar los datos que necesitan los microservicios. Los almacenes más populares de datos de sesión son las cachés en memoria, como Memcached o Redis. AWS ofrece ambas tecnologías como parte del ElastiCache servicio gestionado de [Amazon](https://aws.amazon.com/elasticache/). 

 Colocar una memoria caché entre los servidores de aplicaciones y una base de datos es un mecanismo común para reducir la carga de lectura en la base de datos, lo que, a su vez, puede permitir que los recursos se utilicen para soportar más escrituras. Las cachés también pueden mejorar la latencia. 

 Las bases de datos relacionales siguen siendo muy populares para almacenar datos estructurados y objetos empresariales. AWS ofrece seis motores de bases de datos (Microsoft SQL Server, Oracle, MySQL, MariaDB, PostgreSQL [y Amazon Aurora) como servicios gestionados a través de Amazon](https://aws.amazon.com/rds/aurora/) [Relational Database Service (Amazon RDS](https://aws.amazon.com/rds/)). 

 Sin embargo, las bases de datos relacionales no están diseñadas para una escala infinita, lo que puede dificultar y llevar mucho tiempo aplicar técnicas que admitan un gran número de consultas. 

 Las bases de datos NoSQL se diseñaron para favorecer la escalabilidad, el rendimiento y la disponibilidad por encima de la coherencia de las bases de datos relacionales. Un elemento importante de las bases de datos NoSQL es que, por lo general, no aplican un esquema estricto. Los datos se distribuyen en particiones que se pueden escalar horizontalmente y se recuperan mediante claves de partición. 

 Como los microservicios individuales están diseñados para hacer bien una cosa, suelen tener un modelo de datos simplificado que podría adaptarse bien a la persistencia de NoSQL. Es importante entender que las bases de datos NoSQL tienen patrones de acceso diferentes a los de las bases de datos relacionales. Por ejemplo, no es posible unir tablas. Si es necesario, la lógica debe implementarse en la aplicación. Puede usar [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) para crear una tabla de base de datos que pueda almacenar y recuperar cualquier cantidad de datos y atender cualquier nivel de tráfico de solicitudes. DynamoDB ofrece un rendimiento de milisegundos de un solo dígito; sin embargo, hay algunos casos de uso que requieren tiempos de respuesta en microsegundos. [DynamoDB](https://aws.amazon.com/dynamodb/dax/) Accelerator (DAX) proporciona capacidades de almacenamiento en caché para acceder a los datos. 

 DynamoDB también ofrece una función de escalado automático para ajustar dinámicamente la capacidad de rendimiento en respuesta al tráfico real. Sin embargo, hay casos en los que la planificación de la capacidad resulta difícil o no es posible debido a los grandes picos de actividad de corta duración de la aplicación. Para estas situaciones, DynamoDB ofrece una opción bajo demanda, que ofrece precios sencillos. pay-per-request DynamoDB on-demand es capaz de atender miles de solicitudes por segundo de forma instantánea sin necesidad de planificar la capacidad. 

 Para obtener más información, consulte [Administración de datos distribuidos](distributed-data-management.md) [Cómo elegir una base de](https://aws.amazon.com/startups/learn/maximizing-performance-with-aws-databases) datos. 

# Simplificar las operaciones
<a name="simplyfing-operations"></a>

 Para simplificar aún más los esfuerzos operativos necesarios para ejecutar, mantener y monitorear los microservicios, podemos usar una arquitectura totalmente sin servidores. 

## Implementación de aplicaciones basadas en Lambda
<a name="deploying-lambda-based-applications"></a>

 Puede implementar el código Lambda cargando un `zip` archivo o creando y cargando una imagen de contenedor a través de la interfaz de usuario de la consola con un URI de imagen de Amazon ECR válido. Sin embargo, cuando una función de Lambda se vuelve compleja, lo que significa que tiene capas, dependencias y permisos, la carga a través de la interfaz de usuario puede resultar difícil de manejar para los cambios de código. 

 El uso de AWS CloudFormation and the AWS Serverless Application Model ([AWS SAM](https://github.com/awslabs/serverless-application-model)) o Terraform agiliza AWS Cloud Development Kit (AWS CDK) el proceso de definición de aplicaciones sin servidor. AWS SAM, compatible de forma nativa con CloudFormation, ofrece una sintaxis simplificada para especificar recursos sin servidor.AWS Lambda Las capas ayudan a administrar las bibliotecas compartidas en varias funciones de Lambda, lo que minimiza el espacio de funciones, centraliza las bibliotecas con reconocimiento de inquilinos y mejora la experiencia del desarrollador. Lambda SnapStart para Java mejora el rendimiento de inicio de las aplicaciones sensibles a la latencia. 

 Para realizar la implementación, especifique las políticas de recursos y permisos en una CloudFormation plantilla, empaquete los artefactos de implementación e implemente la plantilla. SAM Local, una AWS CLI herramienta, permite el desarrollo, las pruebas y el análisis locales de las aplicaciones sin servidor antes de cargarlas a Lambda. 

 La integración con herramientas como AWS Cloud9 IDE y AWS CodePipeline agiliza la creación AWS CodeBuild AWS CodeDeploy, las pruebas, la depuración y la implementación de aplicaciones basadas en SAM. 

 El siguiente diagrama muestra la implementación de AWS Serverless Application Model recursos mediante CloudFormation herramientas de CI/CD. AWS 

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


## Resumiendo las complejidades de la multitenencia
<a name="abstracting-multi-tenancy-complexities"></a>

 En un entorno multiusuario como las plataformas SaaS, es crucial simplificar las complejidades relacionadas con la multitenencia, lo que permite a los desarrolladores concentrarse en el desarrollo de características y funcionalidades. Esto se puede lograr utilizando herramientas como [AWS Lambda Layers](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html), que ofrecen bibliotecas compartidas para abordar problemas transversales. La razón de ser de este enfoque es que las bibliotecas y herramientas compartidas, cuando se utilizan correctamente, gestionan de forma eficiente el contexto de los inquilinos.  

 Sin embargo, no deberían extenderse a la encapsulación de la lógica empresarial debido a la complejidad y el riesgo que pueden suponer. Un problema fundamental de las bibliotecas compartidas es la creciente complejidad que rodea a las actualizaciones, lo que dificulta su administración en comparación con la duplicación de código estándar. Por lo tanto, es esencial lograr un equilibrio entre el uso de bibliotecas compartidas y la duplicación en la búsqueda de la abstracción más eficaz. 

## Administración de API
<a name="api-management"></a>

 La administración APIs puede llevar mucho tiempo, especialmente si se tienen en cuenta las múltiples versiones, las etapas del ciclo de desarrollo, la autorización y otras funciones, como la limitación y el almacenamiento en caché. Además de [API Gateway](https://aws.amazon.com/api-gateway/), algunos clientes también utilizan ALB (Application Load Balancer) o NLB (Network Load Balancer) para la administración de las API. Amazon API Gateway ayuda a reducir la complejidad operativa de la creación y el mantenimiento RESTful APIs. Le permite crear APIs mediante programación, sirve como «puerta de entrada» para acceder a los datos, la lógica empresarial o la funcionalidad desde sus servicios de backend, el control de acceso y autorización, la limitación de velocidad, el almacenamiento en caché, la supervisión y la gestión del tráfico, y funciona sin APIs necesidad de administrar servidores. 

 La figura 3 ilustra cómo API Gateway gestiona las llamadas a la API e interactúa con otros componentes. Las solicitudes de dispositivos móviles, sitios web u otros servicios de backend se envían al CloudFront punto de presencia (PoP) más cercano para reducir la latencia y ofrecer una experiencia de usuario óptima. 

![\[Diagrama que muestra el flujo de llamadas a API Gateway\]](http://docs.aws.amazon.com/es_es/whitepapers/latest/microservices-on-aws/images/api-gateway-call-flow.png)
