En este módulo, dividirá la aplicación node.js en varios servicios interconectados e insertará la imagen de cada uno de los servicios en un repositorio de Amazon Elastic Container Registry (Amazon ECR). Empezar a crear

La arquitectura de aplicaciones final utiliza Amazon Elastic Container Service (Amazon ECS) y el balanceador de carga de aplicaciones (ALB). 

información general de la arquitectura

a. Cliente
El cliente realiza solicitudes de tráfico mediante el puerto 80.

b. Balanceador de carga
El ALB dirige el tráfico externo hacia el servicio correcto. El ALB inspecciona la solicitud del cliente y utiliza las reglas de direccionamiento para dirigir la solicitud a una instancia y un puerto del grupo objetivo que coincide con la regla.

c. Grupos objetivo
Cada servicio tiene un grupo objetivo que lleva a cabo el seguimiento de las instancias y los puertos de cada contenedor que se ejecuta para el servicio.

d. Microservicios
Amazon ECS implementa cada servicio en un contenedor dentro de un clúster de EC2. Cada contenedor gestiona una única característica.

Aislamiento de bloqueos
Incluso las mejores organizaciones de ingeniería pueden tener y tienen bloqueos fatales en la producción. Además de seguir todas las prácticas recomendadas estándar para gestionar los bloqueos adecuadamente, un enfoque que puede limitar el impacto de los bloqueos es la creación de microservicios. Una arquitectura de microservicios adecuada implica que, si una microparte del servicio se bloquea, solo dejará de funcionar esa parte del servicio. El resto del servicio puede continuar funcionando correctamente.

Aislamiento para la seguridad
En una aplicación monolítica, si una característica de la aplicación tiene un fallo de seguridad, por ejemplo una vulnerabilidad que permite la ejecución de código de forma remota, se debe dar por hecho que un atacante podría haber obtenido acceso al resto de características del sistema también. Esto puede ser peligroso si, por ejemplo, una característica de carga de avatares tiene un problema de seguridad que termina poniendo en peligro la base de datos con las contraseñas de los usuarios. La separación de características en microservicios con Amazon ECS permite el acceso seguro a los recursos de AWS, ya que se asigna a cada servicio su propio rol de AWS Identity and Access Management (IAM). Cuando se respetan las prácticas recomendadas para los microservicios, el resultado es que si un atacante pone en riesgo un servicio, solo puede tener acceso a los recursos de ese servicio, pero no puede acceder horizontalmente a otros servicios sin vulnerarlos también.

Escalado independiente
Cuando las características se dividen en microservicios, la cantidad de infraestructura y el número de instancias que utiliza cada clase de microservicio se puede aumentar y reducir de forma independiente. Esto facilita la medición del costo de una característica concreta y la identificación de las características que pueden requerir optimización en primer lugar. Si una característica particular tiene problemas con las necesidades de recursos, otras características no se verán afectadas y se puede mantener un rendimiento de confianza.

Velocidad de desarrollo
Los microservicios reducen los riesgos de desarrollo, lo cual permite que un equipo trabaje más rápido. En un monolito, la adición de una nueva característica puede afectar potencialmente a todas las demás características contenidas en el monolito. Los desarrolladores deben tener en cuenta detenidamente el impacto de cualquier código que agregan, así como asegurarse de que no se estropee nada. Por otro lado, una arquitectura de microservicios adecuada tiene código nuevo para cada característica nueva que se agrega a un servicio nuevo. Los desarrolladores pueden confiar en que cualquier código que escriban no podrá afectar realmente al código existente en absoluto, a menos que escriban de forma explícita una conexión entre dos microservicios.

Tiempo de realización: 20 minutos

Servicios utilizados:


Siga las instrucciones paso a paso indicadas a continuación para segmentar el monolito. Seleccione cada uno de los números de paso para ampliar la sección correspondiente.

break-the-monolith
  • Paso 1. Aprovisionar los repositorios de ECR

    En los dos módulos anteriores, implementó su aplicación como un monolito mediante un único servicio y un solo repositorio de imágenes del contenedor. Para implementar la aplicación como tres microservicios, debe aprovisionar tres repositorios (uno por cada servicio) en Amazon ECR.

    Nuestros tres servicios son:

    1. usuarios
    2. subprocesos
    3. publicaciones

    Cree los tres repositorios repitiendo los siguientes pasos para cada servicio:

    • Navegue hasta la consola de Amazon ECR.
    • Seleccione Crear repositorio.
    • En la página Crear repositorio, en el campo Nombre del repositorio, cree un repositorio para el servicio (publicaciones, subprocesos o usuarios).
      ⚐ Nota: Para las opciones de Inmutabilidad de etiquetas, mantenga la configuración predeterminada.

    Debería tener cuatro repositorios en Amazon ECR. Registre la información de los repositorios de cada microservicio creado. Esta información será necesaria en un paso posterior. La información que necesita tiene este formato:
    [ID-cuenta].dkr.ecr.[región].amazonaws.com/[nombre-servicio]

    repositorios
  • Paso 2. Autenticar Docker con AWS (opcional)

    Necesitará acceso a Docker para crear e insertar las imágenes de cada servicio. Si trabaja en este tutorial en distintos momentos, puede que se cierre la sesión de Docker. En tal caso, siga estos pasos para iniciar sesión en Docker de nuevo.

    • Ejecute  $(aws ecr get-login --no-include-email --region [su-región])
      Reemplace [su-región], por ejemplo: $(aws ecr get-login --no-include-email --region us-west-2)

    Si la autenticación es correcta, recibirá el mensaje de confirmación: Inicio de sesión correcto.

  • Paso 3. Crear e insertar las imágenes para cada servicio

    En la carpeta de proyecto amazon-ecs-nodejs-microservices/3-microservices/services, tendrá carpetas con archivos para cada servicio. Observe cómo cada microservicio es básicamente un clon del servicio monolítico anterior.

    Puede ver cómo ahora cada servicio está especializado si compara el archivo db.json de todos los servicios y del servicio de API monolítico. Previamente, las publicaciones, los subprocesos y los usuarios se almacenaban todos en un mismo archivo de base de datos. Ahora, cada uno se almacena en el archivo de base de datos del servicio correspondiente.

    Abra su terminal y establezca la ruta en ~/amazon-ecs-nodejs-microservices/3-microservices/services

    Crear y etiquetar cada imagen

    • En el terminal, ejecute docker build -t [nombre-servicio] ./[nombre-servicio]
      Reemplace [nombre-servicio], por ejemplo: docker build -t posts ./posts

    • Cuando finalice la creación, etiquete la imagen para poder insertarla en el repositorio:
      docker tag [nombre-servicio]:latest [ID-cuenta].dkr.ecr.[región].amazonaws.com/[nombre-servicio]:v1
      Reemplace [nombre-servicio], [ID-cuenta] y [región], por ejemplo: docker tag posts:latest [ID-cuenta].dkr.ecr.us-west-2.amazonaws.com/posts:v1

    • Inserte la imagen en ECR: docker push [ID-cuenta].dkr.ecr.[región].amazonaws.com/[nombre-servicio]:v1
      Reemplace [nombre-servicio], [ID-cuenta] y [región].

    Si va a su repositorio de ECR, debería ver las imágenes etiquetadas con v1. 

    ♻ Repita estos pasos con cada imagen de microservicio.  

    ⚐ NOTA: Asegúrese de crear y etiquetar las tres imágenes.