Desarrollo de aplicaciones modernas - Mensajería

Las soluciones de mensajería conectan los componentes de tu aplicación, permitiéndoles intercambiar datos de forma fiable, escalar de forma transparente y lograr un alto nivel de disponibilidad.Permiten separar el procesamiento de los productores de datos, almacenar en buffer eficaz los mensajes no procesados y proporcionar durabilidad de mensajes, escalabilidad de procesamiento y resiliencia de las aplicaciones.

Las aplicaciones orientadas a mensajes abarcan una amplia gama de arquitecturas: la transferencia de datos entre componentes puede formar parte de un pipeline de procesamiento distribuido y convergente bien definido, o los componentes pueden publicar mensajes en varios sistemas descendentes independientes que evolucionen de forma independiente. Hay tres modelos de mensajería modernos comunes, cada uno con requisitos de aplicación compartidos y distintos:

Flujo de eventos

Las aplicaciones de transmisión de eventos ingieren flujos de datos de gran volumen y alta velocidad que se deben procesar en tiempo real. Los datos raw se deben procesar para extraer estadísticas que puedan utilizar otros componentes de la aplicación, para su supervisión o que se puedan almacenar para un análisis posterior.

A continuación se muestra la descripción de maf-messaging-streaming.png
Descripción de la ilustración maf-messaging-streaming.png

maf-messaging-streaming-oracle.zip

En esta aplicación de transmisión de eventos de ejemplo se utiliza Oracle Cloud Infrastructure Streaming u Oracle Transactional Event Queues (TEQ) como solución de mensajería subyacente, Oracle Cloud Infrastructure Functions para el procesamiento en tiempo real y Oracle Autonomous Database como almacén de copia de seguridad.

Publicar-Suscribir

La publicación-suscripción o publicación/suscripción es un patrón de comunicación en el que los productores de datos publican datos en temas específicos que pueden ser consumidos por cualquier número de consumidores descendentes suscribiéndose a esos temas. El acoplamiento entre productores y consumidores es bastante débil, por lo que los consumidores pueden evolucionar de forma independiente sin afectar a los productores ascendentes.

A continuación se muestra la descripción de maf-messaging-publishers-subscribers.png
Descripción de la ilustración maf-messaging-publishers-subscribers.png

maf-messaging-publishers-subscribers-oracle.zip

En este ejemplo se muestra cómo utilizar Oracle Cloud Infrastructure Streaming u Oracle TEQ para implantar un patrón de mensajes pub/sub.

Cola de mensajes

La cola de mensajes permite el procesamiento distribuido con estado en el que los componentes ascendente y descendente están estrechamente enlazados e implantan juntos un flujo de trabajo de aplicación. La solución de mensajería debe soportar semánticas como la entrega al menos una vez para garantizar que los mensajes no se pierdan antes de que se consuman.

A continuación se muestra la descripción de maf-messaging-queuing.png
Descripción de la ilustración maf-messaging-queuing.png

maf-messaging-queuing-oracle.zip

En este ejemplo se muestra cómo utilizar Oracle Cloud Infrastructure Queue o Oracle TEQ para implantar la cola de mensajes.

Principios de diseño

Utilice los siguientes principios de diseño para crear su plataforma o aplicaciones de mensajería.
  • Cree aplicaciones como un conjunto de servicios que se comunican mediante las API de REST

    Utilice API estándar del sector, como Kafka y JMS, para proporcionar interoperabilidad de aplicaciones y crear sin problemas aplicaciones de mensajería híbridas y multinube. Oracle Cloud Infrastructure (OCI) Streaming proporciona una API de compatibilidad de Kafka y Oracle Transaction Event Queues (TEQ) soporta las API de Kafka y JMS. Tanto Kafka como JMS están ampliamente soportados por productos de terceros. Por ejemplo, puede utilizar Confluent Kafka JMS Connector para transferir mensajes entre Oracle TEQ y Kafka. También puede utilizar Kafka Connect desplegado en el cluster de Oracle Container Engine for Kubernetes para conectarse con productos de terceros. Se puede llamar a Oracle Cloud Infrastructure Queue mediante la definición de API RESTful (con una especificación OpenAPI) o mediante el protocolo STOMP estándar del sector.

  • Utilice servicios gestionados para eliminar la complejidad en el desarrollo y las operaciones de aplicaciones

    Utilice servicios totalmente gestionados con parches de seguridad y mantenimiento de infraestructura integrados, como OCI Streaming, OCI Queue y las funciones TEQ y Advanced Queuing (AQ) de Oracle de Oracle Autonomous Database (ADB). Estos servicios cuentan con un alto nivel de disponibilidad gracias a la replicación automática en todos los dominios de disponibilidad y soportan la automatización de ampliación en respuesta a los cambios de carga.

  • Mantener nivel de aplicación sin estado

    El estado relacionado con los mensajes, como la posición en una cola de mensajes, nunca debe almacenarse en la aplicación ni en el sistema de archivos local, ya que esto puede provocar la pérdida de datos si falla una instancia de la aplicación. Las aplicaciones pueden almacenar en caché el contenido del mensaje para su procesamiento, pero la solución de mensajería debe seguir siendo la única fuente de datos de todos los datos de mensajería. Los metadatos relacionados, como la posición en una cola de mensajes, se deben almacenar en una base de datos o en el almacenamiento de objetos para evitar la pérdida de mensajes y garantizar el funcionamiento idempotente. Esto ayuda con la recuperación de fallos, al tiempo que facilita la ampliación o reducción vertical de un servicio sin pérdida de corrección.

  • Seguimiento y supervisión integral del instrumento

    Mantenga un conocimiento autorizado del estado operativo, el rendimiento y el estado de la aplicación. Utilice la cartera de servicios de Oracle Cloud Observability and Management Platform para obtener visibilidad y estadísticas útiles en todas las capas de la pila de aplicaciones, desde los productores y consumidores de datos hasta los propios pipelines de mensajería. Controle la longitud de las colas y la duración del procesamiento para detectar errores y cuellos de botella, así como para detectar problemas con los servicios que se suscriben a los temas.

  • Elimine los puntos de fallo específicos mediante la replicación de datos automatizada y la recuperación ante fallos

    Realice copias de seguridad de los datos de mensajería en el almacenamiento persistente para satisfacer las necesidades normativas y de conformidad. Utilice la copia de seguridad entre regiones para la recuperación ante desastres. Incorpore la idempotencia en sus aplicaciones de mensajería, por ejemplo, mediante timeouts de visibilidad de mensajes en la cola de OCI. Escriba errores irrecuperables en un flujo independiente, una cola de letras muertas o un almacenamiento persistente sin bloquear el pipeline de ejecución principal.

  • Implante un enfoque de defensa en profundidad automatizado para proteger su aplicación y sus datos

    Implante políticas de Oracle Cloud Infrastructure Identity and Access Management (IAM) para que solo los usuarios autorizados puedan crear, enviar o recibir datos de colas y flujos de OCI. Aplique el principio de accesibilidad mínima asegurando el acceso a los puntos finales de mensajería mediante puntos finales privados y un gateway de servicios, lo que limita el acceso desde Internet. Utilice la capacidad lista para usar de OCI Streaming, OCI Queue y TEQ para cifrar datos estáticos y en tránsito para lograr la confidencialidad de los datos. Sin embargo, si necesita aumentar la propiedad de la rotación de claves, utilice el servicio Oracle Cloud Infrastructure Vault para gestionar de forma segura las claves maestras.

Arquitectura

En el siguiente diagrama se muestra cómo puede utilizar OCI Streaming para implantar la transmisión de eventos
A continuación se muestra la descripción de maf-messaging.png
Descripción de la ilustración maf-messaging.png

maf-messaging-oracle.zip

Utilice OCI Streaming para implantar los patrones de transmisión de eventos y mensajes de pub/sub, y Oracle Cloud Infrastructure Queue para implantar la cola de mensajes. Utilice Oracle Autonomous Database para mantener los datos de eventos procesados. Las funciones de OCI se pueden utilizar para procesar datos de eventos antes de que los componentes de la aplicación descendente los consuman o se mantengan en la base de datos.

Implante el aislamiento de red utilizando subredes dedicadas para su aplicación y para la base de datos, así como para los servicios de mensajería. Proteja el acceso a sus flujos mediante puntos finales privados. Utilice las políticas de Oracle Cloud Infrastructure Identity and Access Management (IAM) para limitar el acceso a las colas

Utilice Oracle Cloud Infrastructure Object Storage para la retención de mensajes a largo plazo. Utilice un servicio sin servidor como el conector de servicio para mover fácilmente los datos de OCI Streaming a Object Storage, y permita la copia de seguridad entre regiones de Object Storage para lograr una copia de seguridad entre regiones. Implante una estrategia de recuperación ante desastres entre regiones mediante el uso de Kafka MirrorMaker 2.0 desplegado en un entorno de Oracle Container Engine for Kubernetes (OKE) tolerante a fallos para que replique datos de forma asíncrona entre flujos. Esta configuración activa un objetivo de tiempo de recuperación (RTO) y un objetivo de punto de recuperación (RPO) de minutos. Utilice el intercambio de VCN remoto para garantizar una latencia mínima durante la transferencia de datos.

Utilice colas de letras muertas para aislar los mensajes problemáticos. Las colas de letras muertas se crean automáticamente al crear una cola. Las colas con letras inactivas le ayudan a evitar que los mensajes fallidos bloqueen el pipeline de ejecución principal. Los mensajes de la cola de letras muertas se pueden analizar para determinar por qué fallaron.

Incorpore la idempotencia en las aplicaciones al almacenar los desfases de los mensajes procesados en el almacenamiento externo, como el almacenamiento de objetos. Detectar y desechar duplicados consultando el almacén externo. Clasifique los errores que se pueden recuperar fácilmente y permita la reproducción de mensajes.

Esta arquitectura utiliza los siguientes servicios y tecnologías:

  • Flujo

    Oracle Cloud Infrastructure Streaming proporciona una solución de almacenamiento duradera, ampliable y gestionada para la ingestión de flujos de datos continuos y de alto volumen que puede utilizar y procesar en tiempo real. Puede utilizar Streaming para la ingesta de datos de gran volumen, como logs de aplicación, datos de telemetría operativa, datos de flujo de clics en la web o para otros casos de uso en los que se producen y procesan datos de forma continua y secuencial en un modelo de mensajería de publicación-suscripción.

  • Cola

    La cola de Oracle Cloud Infrastructure proporciona un sistema escalable para procesar mensajes mientras se gestionan tareas de gestión complejas como el procesamiento al menos una vez, el seguimiento y el aislamiento del cliente garantizados. Este servicio centralizado también gestiona el orden y el estado de procesamiento de mensajes, lo que permite que los procesos de cliente sin estado descarguen el seguimiento del cursor.

  • Funciones

    Oracle Cloud Infrastructure Functions es una plataforma de funciones como servicio (FaaS) totalmente gestionada, multi-inquilino, altamente escalable y bajo demanda. Está impulsado por el motor de código abierto Fn Project. Las funciones permiten desplegar el código y llamarlo directamente o dispararlo en respuesta a eventos. Oracle Functions utiliza contenedores de Docker alojados en Oracle Cloud Infrastructure Registry.

  • Conectores de servicio

    Oracle Cloud Infrastructure Service Connector Hub es una plataforma de bus de mensajes en la nube que organiza el movimiento de datos entre servicios en OCI. Puede utilizar conectores de servicio para mover datos de un servicio de origen a un servicio de destino. Los conectores de servicio también le permiten especificar opcionalmente una tarea (como una función) que realizar en los datos antes de que se entreguen al servicio de destino.

    Puede utilizar el hub de conector de servicio de Oracle Cloud Infrastructure para crear rápidamente un marco de agregación de registros para sistemas de información de seguridad y gestión de eventos (SIEM).

Arquitectura alternativa centrada en bases de datos

Esta arquitectura utiliza colas de eventos transaccionales (TEQ) para implantar patrones de mensajería en aplicaciones modernas. TEQ es una función incorporada de Oracle Autonomous Database.

A continuación se muestra la descripción de maf-messaging-alternate.png
Descripción de la ilustración maf-messaging-alternate.png

maf-messaging-alternate-oracle.zip

Esta arquitectura proporciona simplicidad al eliminar la necesidad de utilizar servicios de streaming o colas externos y proporciona capacidades de mensajería transaccional que simplifican los patrones de microservicios comunes.

TEQ combina el procesamiento de datos y mensajes en una infraestructura escalable que simplifica la gestión del ciclo de vida, la seguridad y la recuperación ante desastres, a la vez que proporciona un alto rendimiento. TEQ admite patrones de mensajería comunes, como transmisión, colas y pub/sub. Puede implementar transacciones a través de mensajería y operaciones de base de datos mediante TEQ, e implementar fácilmente patrones de mensajería como buzón de salida transaccional y mensajes exactamente una vez con poco o ningún código adicional. Oracle TEQ proporciona mensajes una sola vez para las aplicaciones que se ejecutan en la base de datos. Esto significa que no necesita mantener los ID de mensajes para comprobar los mensajes duplicados ni crear consumidores idempotentes en el nivel de aplicación. TEQ admite mensajes pequeños que son típicos en el procesamiento de eventos, así como cargas útiles más grandes asociadas con flujos de trabajo empresariales, y también pueden funcionar como una malla de eventos segura.

La eliminación de servicios externos de streaming o colas simplifica la gestión del estado. Los eventos y mensajes se almacenan en la misma base de datos utilizada por la aplicación. Esto le permite lograr y mantener fácilmente la coherencia entre sus eventos, mensajes y cambios en la aplicación. Si se produce un fallo que requiere una recuperación puntual o una recuperación ante desastres, todo (eventos, mensajes y datos de la aplicación) se recupera automáticamente a un estado consistente.

TEQ se beneficia de la alta disponibilidad de Autonomous Database. La replicación entre regiones de ADB mediante Autonomous Data Guard protege y realiza automáticamente una copia de seguridad de los datos de mensajería en TEQ. Puede desplegar Oracle TEQ de forma altamente disponible mediante Oracle Real Application Clusters y Oracle Active Data Guard, ambas funciones incorporadas de Oracle Autonomous Database. Oracle Real Application Clusters proporciona disponibilidad dentro de una región, mientras que Oracle Active Data Guard proporciona protección de recuperación ante desastres entre regiones.

Utilice esta arquitectura si la aplicación realiza alguna de las siguientes acciones:

  • Necesita implantar colas de mensajes y requiere semántica como un buzón transaccional
  • No necesita una escala independiente de la base de datos y el sustrato de mensajería

Esta arquitectura utiliza los siguientes servicios y tecnologías:

  • Colas de eventos transaccionales (TEQ) y Colas avanzadas (AQ)

    Las colas de eventos transaccionales (TEQ) y las colas avanzadas (AQ) son sistemas de cola de mensajes robustos y llenos de funciones integrados con Oracle Database. Las colas de eventos transaccionales (TEQ) son una implantación en memoria particionada de alto rendimiento con varios flujos de eventos por cola. Advanced Queuing (AQ) es adecuado para casos de uso de flujos de trabajo más simples. Estas funciones aprovechan Oracle Database para mantener mensajes y proporcionar un alto rendimiento y escalabilidad.

  • Funciones

    Oracle Cloud Infrastructure Functions es una plataforma de funciones como servicio (FaaS) totalmente gestionada, multi-inquilino, altamente escalable y bajo demanda. Está impulsado por el motor de código abierto Fn Project. Las funciones permiten desplegar el código y llamarlo directamente o dispararlo en respuesta a eventos. Oracle Functions utiliza contenedores de Docker alojados en Oracle Cloud Infrastructure Registry.

Arquitecturas no recomendadas

  • Mensajes monolíticos y aplicaciones de Service Bus

    Las soluciones de mensajería como RabbitMQ pueden soportar la integración con otros componentes mediante estándares abiertos y API. Sin embargo, estas soluciones requieren un esfuerzo administrativo significativo para las PYME y es posible que no ofrezcan redundancia distribuida y alta disponibilidad sin topologías complejas autogestionadas.

  • Clusters de Kafka en un entorno local o en la nube autogestionado

    Esta solución, aunque ofrece escalabilidad y alta disponibilidad, exige un gran conocimiento especializado de los desarrolladores y una amplia sobrecarga en la administración operativa de las PYME. Tenga muy en cuenta antes de seleccionar esta opción debido al plazo de producción y al riesgo de alto costo total de propiedad (TCO).

Consideraciones

Al implementar el patrón de diseño de mensajes, tenga en cuenta estas opciones de implantación.

Elija la plataforma de mensajería adecuada según los requisitos de su aplicación

Las plataformas y los servicios básicos pueden parecer similares y compartir funciones comunes. Sin embargo, cada plataforma tiene características y fortalezas únicas que podrían estar mejor alineadas con los requisitos de su aplicación. Por ejemplo:

  • Utilice OCI Streaming o colas de eventos transaccionales si sus aplicaciones requieren una plataforma de mensajería en tiempo real de alto rendimiento que ofrezca funciones de reproducción de mensajes y pub-sub.
  • Utilice las colas de eventos transaccionales si necesita un buffer de punto a punto escalable y fiable para mover los datos de forma asíncrona.
  • Utilice el hub de conector de servicio (SCH) para activar la integración con los recursos de infraestructura.
  • Utilice las colas de eventos transaccionales (TEQ) en la base de datos a la hora de diseñar nuevos microservicios con mensajería integrada con Oracle Autonomous Database.

Estudios de Casos Públicos

Arquitectura Basada en Streaming de Oracle

Tango Eye convierte el vídeo de vigilancia en información útil para la industria minorista.

  • Oracle Cloud Infrastructure (OCI) Streaming serva como un sistema de mensajes de publicación y suscripción de bajo mantenimiento para varios microservicios. 
  • Oracle Cloud Infrastructure Functions ejecuta trabajos sin servidor sin supervisión de ingeniería.
  • Las políticas de ciclo de vida de Oracle Cloud Infrastructure Object Storage archivan y depuran datos automáticamente, lo que reduce los costos sin disminuir el valor de los análisis basados en IA de Tango Eye.

Arquitectura Basada en TEQ de Oracle

FedEx utiliza Oracle E-Business Suite y el gestor de eventos de negocio creado con Oracle TEQ para las cuentas a cobrar de sus 15,5 millones de paquetes entregados todos los días.

  • FedEx ha trasladado E-Business Suite a Oracle Cloud Infrastructure Object Storage mediante Exadata Cloud Service. Los flujos de trabajo y el sistema de eventos de negocio de E-Business Suite están integrados por completo en los mensajes de Oracle Advanced Queuing (AQ).
  • Oracle AQ es fácil de usar y adecuado para la orquestación de flujos de trabajo. Para los eventos de alto rendimiento, el TEQ de Oracle es la sustitución desplegable de alto rendimiento con varios flujos de eventos por cola, interoperables con apache Kafka.

Despliegue

Universal Health Organization (UHO) es una aplicación de ejemplo que se adhiere a los principios del Modern App Development Framework. En particular, implementa elementos de los patrones de arquitectura web o móvil, de mensajería y basada en eventos, y está disponible en GitHub.
  1. Vaya a GitHub.
  2. Clone o descargue el repositorio en la computadora local.
  3. Siga las instrucciones del documento README.

Log de Cambios

Este log muestra los cambios significativos:

Confirmaciones

Authors: Harshad Kasture, Randall Barnes, Matthias Brantner

Contributors: Hassan Ajan, James Emerson, Parvez Syed Mohamed, Sajan Parihar, Wei Hu, Sreya Dutta, Joshua Stanley