Diseño de una aplicación basada en microservicios

Al diseñar una aplicación mediante la arquitectura de microservicios, considere la posibilidad de adherirse a las mejores prácticas de microservicios y a los 12 patrones de éxito para desarrollar microservicios. Estos patrones incorporan las consideraciones de las aplicaciones de 12 factores y se basan en la experiencia en despliegues de microservicios junto con una base de datos convergente.

Aprenda las mejores prácticas para diseñar microservicios

Al seguir ciertas mejores prácticas a la hora de diseñar microservicios, puede asegurarse de que la aplicación sea fácil de escalar, desplegar y mantener. Tenga en cuenta que no todas las mejores prácticas que se describen aquí pueden ser relevantes para su aplicación.

Cada microservicio debe implantar una sola parte de la funcionalidad de la aplicación. Los equipos de desarrollo deben definir los límites y responsabilidades de cada microservicio. Un enfoque consiste en definir un microservicio para cada tarea solicitada con frecuencia en la aplicación. Un enfoque alternativo es dividir la funcionalidad por tareas de negocio y, a continuación, definir un microservicio para cada área.

Tenga en cuenta los siguientes requisitos en su diseño:

  • Microservicios receptivos: los microservicios deben devolver una respuesta a los clientes solicitantes, incluso cuando el servicio falla.
  • Compatibilidad con versiones anteriores: al agregar o actualizar la funcionalidad de un microservicio, los cambios en los parámetros y métodos de API no deben afectar a los clientes. La API de REST debe seguir siendo compatible con versiones anteriores.
  • Comunicación flexible: cada microservicio puede especificar el protocolo que se debe utilizar para la comunicación entre los clientes y el gateway de API y para la comunicación entre los microservicios.
  • Idempotencia: si un cliente llama a un microservicio varias veces, debe producir el mismo resultado.
  • Operación eficiente: el diseño debe facilitar la supervisión y la resolución de problemas. Un sistema de log se suele utilizar para implantar este requisito.

Comprender los 12 patrones para el éxito en los microservicios

Los microservicios son difíciles de implementar y estos 12 patrones facilitan el aprovechamiento de las ventajas de agilidad y simplicidad de una arquitectura de mircoservicios mediante una plataforma de base de datos convergente junto con contenedores y Kubernetes.

  1. Contextos enlazados: diseñe por adelantado los monolitos o divida los monolitos en microservicios con un asesor de refactorización de datos.
  2. Acoplamiento flexible: desacople los datos aislando el esquema en el microservicio y utilizando una malla de eventos fiable.
  3. CI/CD para microservicios: una base de datos multiinquilino la convierte en una opción natural para los microservicios. Agregue una base de datos conectable (PDB) para desplegarla y crearla de forma independiente. Una aplicación (con Jenkins) y un esquema (Liquibase, Flyway y EBR en la base de datos) también son buenas opciones.
  4. Seguridad para microservicios: proteja cada punto final del gateway de API, del equilibrador de carga, de la malla de eventos y de la base de datos.
  5. Observabilidad unificada para microservicios: métricas, logs y rastreos en un único panel de control para el ajuste y la reparación automática.
  6. Buzón de salida transaccional: envío de un mensaje y una operación de manipulación de datos en una única transacción local.
  7. Malla de eventos fiable: malla de eventos para todos los eventos con mensajería transaccional de alto rendimiento, pub y sub; con transformaciones de eventos y enrutamiento de eventos.
  8. Agregación de eventos: los eventos son efímeros y notifican o disparan una acción en tiempo real; después de lo cual se agregan a la base de datos, la base de datos es el tema compactado final.
  9. Segregación de responsabilidad de consulta de comandos (CQRS): donde hay copias operativas y analíticas de datos disponibles para microservicios.
  10. Sagas: transacciones en microservicios, con soporte de la malla de eventos y el registro de registros en custodia en la base de datos.
  11. Programación políglota: soporte para microservicios y formatos de mensajes en una variedad de lenguajes, utilizando JSON como carga útil.
  12. Back-end como servicio (BaaS): infraestructura de microservicios del tamaño adecuado para despliegues de prueba, desarrollo y producción (pequeño a mediano) en cualquier despliegue en la nube o local; para Spring Boot Apps.

Empezar con un patrón de contexto enlazado

El patrón recomendado para implantar la persistencia para un microservicio es utilizar una única base de datos conectable (PDB) en una base de datos de contenedor. Para cada microservicio, mantenga los datos persistentes privados y cree la base de datos conectable como parte de la implantación del microservicio.

En este patrón, solo se puede acceder a los datos persistentes privados a través de la API de microservicios.

En la siguiente ilustración se muestra el diseño de persistencia para microservicios.

A continuación se muestra la descripción de microservices_persistence.png
Descripción de la ilustración microservices_persistence.png
Las siguientes variantes de esta implantación de microservicios se aplican a bases de datos convergentes:
  • Tablas privadas: cada servicio posee un juego de tablas o documentos.
  • Esquema: cada servicio posee un esquema de base de datos privado o una recopilación.
  • Base de datos: cada servicio posee una base de datos conectable dentro de una base de datos de contenedor, como se muestra en la ilustración.

Un patrón de persistencia para los microservicios consiste en compartir un esquema de base de datos en varios microservicios. Puede implantar transacciones atómicas, consistentes, aisladas y duraderas para conseguir la consistencia de los datos. Una ventaja de este antipatrón es que utiliza una base de datos sencilla. Las desventajas son que los microservicios pueden interferir entre sí al acceder a la base de datos, y los ciclos de desarrollo pueden ralentizarse porque los desarrolladores de diferentes microservicios necesitan coordinar los cambios de esquema, lo que también aumenta las dependencias entre servicios.

Los microservicios se pueden conectar a una instancia de Oracle Database que se ejecuta en Oracle Cloud Infrastructure. La base de datos multi-inquilino de Oracle soporta varias bases de datos de conexión (PDB) dentro de un contenedor. Esta es la mejor opción para la capa de persistencia de los microservicios, para el aislamiento contextual limitado de los datos, la seguridad y la alta disponibilidad. En muchos casos, se pueden utilizar menos PDB con aislamiento de nivel de esquema.

Comprender el valor del despliegue de microservicios en contenedores

Después de crear el microservicio, debe contenerlo. Un microservicio que se ejecuta en su propio contenedor no afecta a los microservicios desplegados en los otros contenedores.

Un contenedor es una unidad de software estandarizada, utilizada para desarrollar, enviar y desplegar aplicaciones.

Los contenedores se gestionan mediante un motor de contenedores, como Docker. El motor de contenedor proporciona las herramientas necesarias para agrupar todas las dependencias de aplicación como contenedor.

Puede utilizar el motor de Docker para crear, desplegar y ejecutar las aplicaciones de microservicios en contenedores. Los microservicios que se ejecutan en contenedores de Docker tienen las siguientes características:

  • Estándar: los microservicios son portátiles. Pueden correr en cualquier lugar.
  • Ligero: Docker comparte el núcleo del sistema operativo (SO), no necesita un sistema operativo para cada instancia y se ejecuta como un proceso sencillo.
  • Seguro: cada contenedor se ejecuta como un proceso aislado. Los microservicios son seguros.

El proceso de contenedorización de un microservicio implica la creación de un archivo Dockerfile, la creación y creación de una imagen de contenedor que incluya sus dependencias y la configuración del entorno, el despliegue de la imagen en un motor de Docker y la carga de la imagen en un registro de contenedor para su almacenamiento y recuperación.

A continuación se muestra la descripción de docker_container_process.png
Descripción de la ilustración docker_container_process.png

Más información sobre la orquestación de microservicios con Kubernetes

Los microservicios que se ejecutan en contenedores deben poder interactuar e integrarse para proporcionar las funcionalidades de aplicación necesarias. Esta integración se puede lograr mediante la orquestación de contenedores.

La orquestación de contenedores permite iniciar, parar y agrupar contenedores en clusters. También permite una alta disponibilidad y escalabilidad. Kubernetes es una de las plataformas de orquestación de contenedores que puede utilizar para gestionar contenedores.

Después de contener los microservicios, puede desplegarlos en Oracle Cloud Infrastructure Container Engine for Kubernetes.

Antes de desplegar la aplicación de microservicios en contenedores en la nube, debe desplegarla y probarla en un motor de Kubernetes local, de la siguiente forma:

  • Cree su aplicación de microservicios.
  • Cree imágenes de Docker para contener sus microservicios.
  • Ejecute los microservicios en el motor de Docker local.
  • Transfiera las imágenes de contenedor a un registro de contenedor.
  • Despliegue y ejecute sus microservicios en un motor de Kubernetes local, como Minikube.

Después de probar la aplicación en un motor de Kubernetes local, despliéguela en Oracle Cloud Infrastructure Container Engine for Kubernetes de la siguiente manera:

  • Crear un Cluster.
  • Descargar el archivo kubeconfig.
  • Instale la herramienta kubectl en un dispositivo local.
  • Prepare el archivo deployment.yaml.
  • Despliegue el microservicio en el cluster.
  • Pruebe el microservicio.

En el siguiente diagrama se muestra el proceso para desplegar una aplicación de microservicios en contenedores en Oracle Cloud Infrastructure Container Engine for Kubernetes.

A continuación se muestra la descripción de oke_deployment_process.png
Descripción de la ilustración oke_deployment_process.png

Más información sobre Oracle Backend for Spring Boot and Microservices

Spring Boot es el marco más popular para crear microservicios en Java. Uno de los 12 patrones para el éxito en la arquitectura de microservicios que se despliega correctamente es el patrón de backend como servicio (BaaS). Oracle BaaS está disponible en OCI Marketplace para desplegar mediante Terraform y Ansible en un plazo de 30 minutos. Oracle BaaS proporciona un juego de servicios de plataforma necesarios para desplegar y utilizar microservicios, y son parte integral del entorno de Spring Boot. Los detalles de la plataforma Oracle Backend for Spring Boot and Microservices se muestran en el siguiente diagrama.