Documentos de Académico
Documentos de Profesional
Documentos de Cultura
orientadas a eventos
en AWS
R ES U M E N
Los eventos están en todas partes: un evento puede ser cualquier cosa, desde la creación de
una cuenta nueva, un artículo colocado en un carrito de compras, un documento financiero
enviado o un conjunto de datos de atención médica cargado. Los eventos son el centro de una
aplicación en una arquitectura basada en eventos y permiten la comunicación entre los sistemas
integrados y los equipos de desarrollo.
En esta guía se presentan los conceptos y patrones clave para las arquitecturas basadas
en eventos y se identifican las soluciones y los servicios de Amazon Web Services (AWS)
que se utilizan habitualmente para implementarlos. Por último, se describen las prácticas
recomendadas a la hora de crear arquitecturas basadas en eventos, desde el diseño de los
esquemas de eventos hasta el manejo de la idempotencia.
2
SECCIÓ N 1
Información general
y conceptos principales
de la arquitectura
basada en eventos
Componente A Componente B
3
Los acoplamientos ajustados pueden presentar inconvenientes para los sistemas complejos en
los que hay muchos equipos involucrados.
Realizar cambios aislados a un solo componente sin afectar a otros puede resultar difícil y
arriesgado cuando los componentes son interdependientes de manera ajustada. Esto puede
ralentizar los procesos de desarrollo y disminuir la velocidad de las características.
Por ejemplo, una aplicación de comercio electrónico puede tener múltiples servicios (pedidos,
facturación, envíos, inventario) y realizar una cadena sincrónica de llamadas a estos servicios.
4
Reducir el acoplamiento consiste en disminuir la interdependencia que existe entre los
componentes y el grado de conocimiento que cada uno de estos debe tener de los demás.
Al comunicarse con eventos, los componentes únicamente deben estar al tanto de eventos
independientes. No necesitan conocer el componente transmisor ni ningún otro componente
(por ejemplo, el manejo de errores o la lógica de reintentos). Mientras el formato del evento
permanezca igual, los cambios en un solo componente no afectarán a los demás. Esto reduce el
riesgo a la hora de realizar cambios en una aplicación. Cuando los eventos asíncronos abstraen
componentes unos de otros, las aplicaciones complejas se vuelven más resistentes y accesibles.
Agente de eventos
5
Ventajas principales de las arquitecturas basadas en eventos
A la hora de crear una arquitectura basada en eventos es necesario adoptar un cambio de mentalidad,
dado que las características y consideraciones de los sistemas asíncronos son únicas. Sin embargo,
este estilo de arquitectura ofrece importantes beneficios para las aplicaciones complejas. Una
arquitectura basada en eventos le permite:
6
Conceptos principales de arquitecturas basadas en eventos
Un evento es una señal de que un estado ha cambiado. Por ejemplo, un artículo colocado en un
carrito de compras o el envío de una solicitud de tarjeta de crédito. Los eventos ocurren en el
pasado (por ejemplo, “OrderCreated” o “ApplicationSubmitted”) y son inmutables, es decir, no
se pueden modificar. Esto resulta útil en los sistemas distribuidos porque no hay que mantener
sincronizados los cambios en los componentes.
• Los productores de eventos publican eventos. Algunos ejemplos incluyen páginas web
frontend, microservicios, dispositivos del Internet de las cosas (IoT), servicios de AWS y
aplicaciones de software como servicio (SaaS).
• Los consumidores de eventos son componentes descendentes que se activan con los
eventos. Es posible que haya varios consumidores para un mismo evento. El consumo de
eventos puede incluir el inicio de flujos de trabajo, la realización de análisis o la actualización
de bases de datos.
• Los agentes de eventos median entre los productores y los consumidores mediante la
publicación y el consumo de eventos compartidos, a la vez que se mitigan las dos partes.
Algunos ejemplos de estos son los enrutadores de eventos que envían eventos a los destinos
y los almacenes de eventos desde los cuales los consumidores extraen eventos.
7
Casos de uso de ejemplo
Inicio de sesión
Shipping
Events Pedido
completado
Cola FIFO
Plataforma de Actualizacion Retransmisión Amazon
comercio es de pedidos de eventos EventBridge
y clientes AWS DataSync
Pago
Finalización
Pedido
de compra
Envío de Pedido
pedido completado
Enviar pedido Procesar pedido
8
Automatización de TI
La infraestructura con servicios de AWS ya genera eventos, como eventos de cambio de estado de instancias de
Amazon Elastic Compute Cloud (Amazon EC2), eventos de registro de Amazon CloudWatch, eventos de seguridad de
AWS CloudTrail, entre otros. Estos eventos se pueden utilizar para automatizar la infraestructura y validar configuraciones,
leer etiquetas en un registro, auditar el comportamiento del usuario o solucionar incidentes de seguridad.
Los clientes que ejecutan cargas de trabajo que requieren un uso intensivo de la computación, como los análisis
financieros, la investigación genómica o la transcodificación del contenido multimedia, pueden activar los recursos
de computación de modo que se escalen verticalmente para un procesamiento altamente paralelo y se reduzcan
verticalmente una vez que se haya completado el trabajo. Société Générale escala y reduce verticalmente los recursos de
forma automática para realizar análisis del riesgo crediticio.
AWS Cloud
Subred privada
Servicio de procesador
Usuarios del motor Amazon API AWS Lambda
Gateway
Clúster de Amazon ECS
(procesamiento en tiempo real)
Amazon ECR
Computación
en tiempo real
Equilibrador de
carga de aplicación Servicio de procesador
Los clientes que pertenecen a sectores altamente regulados (como la salud y las finanzas) pueden utilizar la arquitectura
basada en eventos para poner en marcha la posición de seguridad en respuesta a un incidente o tomar medidas de
corrección cuando se recibe una alerta de una política de seguridad. nib Group (nib) pone en marcha una posición de
seguridad auditable y limitada en el tiempo para conseguir un acceso seguro a los recursos.
AWS IAM
Usuario de nib
Grupo de seguridad
9
Integración de aplicaciones
Los eventos permiten integrar otras aplicaciones. Puede enviar eventos desde aplicaciones
en las instalaciones hacia la nube y utilizarlos para comenzar a crear nuevas aplicaciones.
Al integrar aplicaciones SaaS es posible crear flujos de trabajos personalizados con esos
eventos. Puede utilizar las aplicaciones SaaS para servicios como la gestión de las relaciones
con los clientes, el procesamiento de los pagos, la atención al cliente o la generación de alertas
y supervisión de aplicaciones.
API de punto
Delivery API de venta
Esperar la
devolución de
llamada
10
Automatización de los flujos de trabajo empresariales
Este caso de uso se observa habitualmente en las transacciones de los servicios financieros o en
la automatización de los procesos empresariales. Numerosos flujos de trabajo empresariales
requieren la repetición de los mismos pasos, y esos pasos se pueden automatizar y ejecutar con
un modelo basado en eventos. Por ejemplo, cuando un cliente crea una solicitud para abrir una
nueva cuenta en un banco, la entidad necesita comprobar algunos datos (documentación de
identidad, dirección, etc.) y algunas cuentas requerirán una fase de aprobación humana. Todos
estos pasos se pueden orquestar a través de un servicio de flujo de trabajo donde este se active
automáticamente cuando se presente una solicitud de cuenta nueva.
Enumerar aplicaciones
marcadas
Revisión humana
Administrar las
decisiones humanas
11
SECCIÓ N 2
Patrones comunes
en arquitecturas
basadas en eventos
En esta sección se describen los componentes básicos y los patrones que habitualmente se
encuentran en las arquitecturas basadas en eventos. Estos patrones permiten una comunicación
desacoplada y asíncrona entre productores y consumidores; a su vez, permiten las características
únicas que son cada vez más necesarias para cumplir con los distintos requisitos de las
aplicaciones.
M1 M2 M1 M2
Ack Ack
12
Por lo general, los servicios como Amazon Simple Queue Service (Amazon SQS) y Amazon MQ
se utilizan como colas de mensajes en arquitecturas basadas en eventos. También se pueden
utilizar invocaciones asíncronas de AWS Lambda.
En las invocaciones sincrónicas, la parte que realiza la llamada espera a que la función de
Lambda finalice su ejecución y la función devuelva un valor. En las invocaciones asíncronas, la
parte que realiza la llamada coloca el evento en una cola interna, que luego es procesada por
la función de Lambda. Con este modelo, ya no es necesario administrar una cola intermediaria
o enrutador. La parte que realiza la llamada puede continuar después de enviar el evento a la
función de Lambda. La función puede enviar el resultado a un destino, con configuraciones
que varían según el éxito o el fracaso. La cola interna entre la parte que realiza la llamada y la
función asegura que los mensajes se almacenen de forma duradera.
M1
Ack M1
Tema
Consumidores
13
Otro tipo de enrutador de eventos es un bus de eventos, que brinda una lógica de enrutamiento
compleja. Mientras que los temas dirigen todos los mensajes enviados a los suscriptores,
los buses de eventos pueden filtrar el flujo entrante de mensajes y dirigirlos a distintos
consumidores en función de los atributos de los eventos.
Azul
¿Azul?
M1
Azul Verde
Receptor
M1 M2
Ack
¿Verde? M2
Receptor
Puede utilizar Amazon Simple Notification Service (Amazon SNS) para crear temas y
Amazon EventBridge para crear buses de eventos. EventBridge admite eventos persistentes
gracias a su funcionalidad de archivo. Amazon MQ también admite los temas y el enrutamiento.
14
Flujo de eventos
El uso de flujos, o secuencias continuas de eventos o datos, es otro método para abstraer
productores y consumidores. A diferencia de los enrutadores de eventos y comparables a las
colas, los flujos normalmente requieren que los consumidores realicen un sondeo para detectar
nuevos eventos. Los consumidores mantienen su única lógica de filtrado para determinar cuáles
son los eventos que deben consumir mientras rastrean su posición en la transmisión.
Los flujos de eventos son secuencias continuas de eventos que se pueden procesar
individualmente o en conjunto en un período de tiempo. Un ejemplo de flujo de eventos es una
aplicación de viajes compartidos, que transmite los cambios de ubicación de un cliente como
eventos. Cada evento de “LocationUpdated” es un punto de datos significativo que se utiliza
para actualizar la ubicación del cliente en el mapa. También podría analizar los eventos de
ubicación a lo largo del tiempo para brindar información, como la velocidad de conducción.
Los flujos de datos difieren de los flujos de eventos porque siempre interpretan datos a lo
largo del tiempo. Con este modelo, los puntos de datos individuales, o registros, no son útiles
por sí solos. Las aplicaciones de flujo de datos con frecuencia se utilizan para que los datos
persistan después de un enriquecimiento opcional o para procesar los datos durante un período
de tiempo para obtener análisis en tiempo real. Un ejemplo podría ser el flujo de datos de
los sensores de los dispositivos IoT. Es posible que los registros individuales de lectura de los
sensores no sean valiosos sin un contexto, pero los registros recopilados durante un periodo
pueden describir algo más completo.
Amazon Kinesis Data Streams y Amazon Managed Streaming para Apache Kafka
(Amazon MSK) se pueden utilizar para casos de uso de flujos de eventos y datos.
AWS Lambda
Servicios de AWS
Microservicios
Amazon Kinesis
Registros Data Analytics
Amazon Kinesis
Sensores Data Streams
y aplicaciones
Transmita datos fácilmente
móviles a cualquier escala
Amazon Kinesis
Capture y envíe datos de Data Firehose
diversas fuentes a Amazon
Kinesis Data Streams
Contenedores
15
Coreografía y orquestación
Coreografía y orquestación se refieren a dos modelos distintos de cómo los servicios distribuidos
se pueden comunicar entre sí. La coreografía logra la comunicación sin un control ajustado.
Al utilizar la orquestación, la comunicación se controla de manera más ajustada. Un servicio
central coordina la interacción y el orden en que se invocan los servicios. Los eventos fluyen
entre servicios sin coordinación centralizada. Muchas aplicaciones utilizarán tanto la coreografía
como la orquestación para distintos casos de uso.
Coreografía Orquestación
Coordinación central
Colaboración
Coreografía
La coreografía suele ser más eficaz en la comunicación entre contextos delimitados. Al utilizar
la coreografía, los productores no tienen expectativas sobre cómo y cuándo se procesará el
evento. Ellos solo son responsables de enviar eventos a un servicio de asimilación de eventos
y adherir al esquema. Esto reduce las dependencias entre los dos contextos delimitados.
16
A continuación, se muestran dos dominios diferentes o contextos delimitados de una solicitud
de procesamiento de reclamaciones de seguros: el dominio del cliente y el dominio del fraude.
El dominio del cliente emite un evento de tipo “ClaimRequested” cada vez que se presenta
una reclamación de seguro. El dominio del fraude debe suscribirse al evento “ClaimRequested”
emitido por el dominio del cliente para poder aplicar su lógica de dominio cuando se presente una
reclamación de seguro. Cuando se emite un evento “ClaimRequested”, se notifica al dominio del
fraude. En todo el proceso de la coreografía de los eventos, ni el dominio del cliente (productor) ni
el del fraude (consumidor) están obligados a conocer la lógica empresarial interna de la otra parte.
Este enfoque coreográfico facilita el acoplamiento flexible.
ClaimRequested ClaimRequested
Notificación
Orquestación
Por lo general, dentro de un contexto delimitado, necesita controlar la secuencia de la integración
del servicio, mantener el estado y administrar los errores y reintentos. Estos casos de uso son
adecuados para la orquestación.
DocumentUploaded
Orquestador
DocumentClassifier
Es la imagen de
Es un DL
un automóvil
DocumentExtractor ImageDetector
17
Los buses de eventos, como EventBridge, se pueden utilizar para coreografías.
Los servicios de orquestación de flujos de trabajo, como AWS Step Functions o
Amazon Managed Workflows para Apache Airflow (Amazon MWAA), pueden ayudar a preparar
la orquestación. La coreografía y la orquestación se pueden utilizar en conjunto, por ejemplo,
al enviar un evento para desencadenar un flujo de trabajo de Step Functions, seguido de la
emisión de eventos en diferentes pasos.
De 100 a
1 000 000 segundos
18
Conexión de orígenes de eventos
Muchas aplicaciones tienen orígenes de eventos externos. Entre estas se encuentran las
aplicaciones SaaS, como las aplicaciones empresariales encargadas de gestionar las nóminas,
almacenar los registros o manejar los tickets. También es posible incorporar eventos desde una
aplicación o base de datos existente que se ejecute en las instalaciones. Las arquitecturas basadas
en eventos pueden utilizar eventos de todos estos orígenes.
Cuando las aplicaciones emiten eventos empresariales, una manera habitual de propagar los
eventos es mediante un conector o agente de mensajes. Estos conectores unen las aplicaciones
SaaS o los orígenes en las instalaciones y envían eventos a un flujo o a un enrutador, lo que
permite que los consumidores los procesen. Puede utilizar los orígenes de eventos de socios de
EventBridge para enviar eventos de las aplicaciones de SaaS integradas a las aplicaciones de AWS.
Combinación de patrones
Aunque los requisitos se pueden satisfacer con un solo patrón, las arquitecturas basadas en
eventos a menudo combinan una serie de patrones que:
M1
AWS Lambda
M1 M1
Correo
electrónico
19
• Filtran y dirigen eventos específicos para enviarlos a distintos destinos.
M1
Step Functions
Regla
M1 M2 M3 M2
M3
Regla
Amazon SNS
• Almacenan el volumen de eventos o mensajes para los consumidores descendentes con una cola.
M1 M1
• Orquestan flujos de trabajo y emiten eventos en pasos dentro del flujo de trabajo.
2 Comenzar
Cuentas 1
Verifique su perfil de riesgo
5 Aceptar o rechazar
Cuenta nueva
Bus del evento rechazada
Servicio al cliente principal 4
Actualice su perfil de riesgo
Correcto Falla
Final
20
• Combinan las plataformas de transmisión de eventos con EventBridge para suscribirse
a eventos empresariales importantes sin tener que escribir un código de integración.
Canales de EventBridge
Procesamiento de
transmisión de
eventos discretos
Bus de eventos de
EventBridge
Destinos
21
SECCIÓ N 3
Consideraciones
al utilizar las
arquitecturas basadas
en eventos
Si bien las arquitecturas basadas en eventos son útiles para crear y operar aplicaciones a escala,
es posible que surjan nuevas complicaciones y desafíos. En esta sección se presentarán las
consideraciones que debe tener en cuenta al diseñar su arquitectura basada en eventos.
Coherencia final
En una arquitectura basada en eventos, los eventos se priorizan y la administración de datos
se descentraliza. En consecuencia, las aplicaciones suelen ser finalmente coherentes, lo que
significa que los datos tal vez no estén perfectamente sincronizados en la aplicación, pero que,
al final, serán coherentes.
La coherencia final puede complicar las cosas al procesar transacciones, manejar duplicados
y determinar el estado general exacto del sistema. Algunos componentes en muchas
aplicaciones son más adecuados que otros para manejar datos que serán finalmente coherentes.
Latencia variable
Las aplicaciones basadas en eventos se comunican a través de redes, a diferencia de las
aplicaciones monolíticas, que ejecutan todos los procesos con el mismo espacio de memoria
en un solo dispositivo. Este diseño genera lo que se conoce como latencia variable. Aunque
es posible diseñar las aplicaciones basadas en eventos de forma que se reduzca al mínimo la
latencia, las aplicaciones monolíticas casi siempre se pueden optimizar para reducir la latencia
a expensas de la escalabilidad y la accesibilidad.
Las cargas de trabajo que requieren rendimientos constantes de baja latencia no son adecuadas
para las arquitecturas basadas en eventos. Las aplicaciones de operaciones bursátiles de alta
frecuencia de los bancos o la automatización robótica en submilisegundos en los almacenes son
ejemplos relevantes.
22
Pruebas y depuración
Las pruebas automatizadas son componentes fundamentales de las arquitecturas basadas en
eventos. Ayudan a garantizar que los sistemas se desarrollen de manera eficiente, precisa y con
alta calidad. En esta sección se proporciona una guía para diseñar pruebas automatizadas para
arquitecturas basadas en eventos y sistemas asíncronos.
23
Configure los productores de eventos de prueba y los consumidores de eventos de prueba
Los instrumentos de prueba suelen estar compuestos por productores de eventos de prueba y consumidores
de eventos de prueba. Los productores proporcionan entradas al sistema bajo prueba (SUT) y los
consumidores están configurados para recibir las salidas. Las pruebas automatizadas envían los eventos
al productor y luego se comunican con el consumidor para examinar la salida. Si la salida cumple con las
expectativas, pasa la prueba.
Consumidor de eventos
Pruebas Sistemas asíncronos y almacenamiento
en fase de prueba (recursos de prueba)
2 3
24
Cree herramientas para realizar pruebas
Las inversiones en herramientas pueden minimizar el impacto de los errores. Utilice las
implementaciones de valores controlados para introducir cambios de código en su entorno de
forma más lenta en incrementos definidos, en lugar de hacerlo todos a la vez. Los indicadores de
funciones permiten introducir código y retirarlo rápidamente. Las inversiones en herramientas
de observabilidad le permiten medir la tasa de errores en sus entornos. Los procedimientos
de reversión bien establecidos en la canalización de integración continua y entrega continua
(CI/CD) le permiten eliminar el código que genera errores. Implementar cambios de código en
incrementos frecuentes y pequeños reduce los riesgos de despliegue y aumenta la agilidad.
Ejemplos de pruebas
Muestras de código
Este repositorio de GitHub contiene muchos ejemplos de pruebas automatizadas.
El proyecto crea un sistema asíncrono simple escrito en Python con pruebas y oyentes
de eventos. Para crear el proyecto y ejecutar las pruebas, siga las instrucciones del
archivo README.
Después de ejecutar las pruebas, examine el código del directorio /tests/ para ver cómo
se escriben.
Después de ejecutar las pruebas, examine el código del directorio /tests/ para ver cómo
se escriben.
25
Cultura organizativa
La adopción de una arquitectura basada en eventos no es solo una decisión tecnológica.
Aprovechar todos sus beneficios requiere de un cambio de mentalidad y cultura de desarrollo.
Además, es posible que se requieran algunos cambios, como organizar equipos en torno
a dominios empresariales, crear un modelo descentralizado de gobernanza con una cultura
DevOps y practicar principios de diseño evolutivo. Aunque para lograr estos cambios es posible
que tenga que ampliar las habilidades de los equipos de trabajo, la arquitectura basada en
eventos ofrece a las aplicaciones beneficios en cuanto a agilidad, escalabilidad y fiabilidad.
Los desarrolladores necesitarán un alto nivel de autonomía para tomar decisiones de tecnología
y arquitectura dentro del contexto de sus propios microservicios. Liderar con barreras de
protección y observabilidad puede ayudarle a implementar con éxito el cambio organizacional
necesario para las arquitecturas basadas en eventos. Con las barreras de protección y la
observabilidad establecidas, puede promover una cultura de autonomía y, al mismo tiempo,
reforzar los estándares.
Barreras de protección
Las barreras de protección son políticas, controles y estándares predefinidos que ayudan
a aplicar las prácticas recomendadas en toda la organización. Mediante el uso de barreras de
protección, las organizaciones pueden ayudar a prevenir errores de configuración accidentales,
hacer cumplir las políticas de seguridad y reducir el riesgo de incidentes de producción. Al
proporcionar pautas claras para un desarrollo y unas operaciones seguros, las barreras de
protección pueden ayudar a establecer una cultura de alta calidad.
Observabilidad
La observabilidad se refiere a la capacidad de monitorear, analizar y medir el comportamiento
de los sistemas y aplicaciones en producción. Como resultado de la implementación de prácticas
de observabilidad, las organizaciones pueden comprender mejor los sistemas en lo que respecta
al rendimiento, la fiabilidad, la seguridad y el cumplimiento. Con una supervisión mínima,
puede identificar los problemas antes de que afecten a los clientes y mejorar continuamente los
sistemas sin afectarlos. Al promover la transparencia, la responsabilidad y la mejora continua, la
observabilidad puede servir para crear una cultura de fiabilidad.
Al proporcionar pautas claras para que el desarrollo y las operaciones sean seguros, y fomentar
la transparencia y la mejora continua, puede conseguir una cultura de alta autonomía,
seguridad y fiabilidad. Los equipos se sentirán empoderados como propietarios de sus sistemas
y aplicaciones cuando estas prácticas se integren en los ciclos de vida del desarrollo del software
y las operaciones de TI.
26
SECCIÓ N 4
Prácticas
recomendadas
En esta sección se describen las prácticas recomendadas para tomar decisiones en materia de
arquitectura y manejar desafíos comunes que se presentan en las arquitecturas basadas en
eventos.
Diseño de eventos
Como se mencionó anteriormente, un evento es una señal de que un estado ha cambiado.
Un evento describe algo que sucedió en el pasado (por ejemplo, “OrderCreated“) y no se
puede modificar.
Antes de diseñar eventos, es importante identificar los eventos dentro del sistema, aquellos
que no solo son importantes para la arquitectura sino también para la empresa. Genere
eventos para que los consumidores descendentes existentes o futuros puedan reaccionar
y procesar la lógica empresarial.
27
Identificación de eventos mediante la tormenta de eventos
La tormenta de eventos es una técnica colaborativa que ayuda a trazar un mapa visual
del comportamiento de un sistema e identificar los eventos en arquitecturas basadas en
eventos. El proceso implica reunir a las partes interesadas de varios dominios del sistema
y facilitar un taller en el que los eventos y acciones del sistema puedan visualizarse y
discutirse en conjunto. El objetivo principal es generar una comprensión compartida del
sistema e identificar los eventos empresariales críticos.
Máquina de
Cliente Sistema
tickets
Cancelar
Crear nuevo Extender la sesión sesión de
ticket de estacionamiento estacionamiento
Espacios de La sesión de
Ticket Ticket Cliente
estacionamiento estacionamiento
creado creado notificado
actualizados ha caducado
Escala de tiempo
Durante el proceso de tormenta de eventos, puede destacar los actores, los comandos,
los agregados y los eventos, lo que puede ayudarle a usted y a su equipo a comprender el
comportamiento del sistema y también a identificar los eventos antes de implementarlos.
La tormenta de eventos se aplica tanto a proyectos nuevos como a proyectos existentes.
Desarrollar un entendimiento compartido entre las partes interesadas puede ser beneficioso
para construir arquitecturas basadas en eventos.
28
Convenciones de nomenclatura de eventos
Dado que los eventos son hechos inmutables que sucedieron en el pasado, la convención de
nomenclatura de los eventos debe ser precisa y clara: debe eliminar cualquier ambigüedad o
vaguedad cuando los consumidores los descubren y utilizan, además de comunicar el significado
y el contexto del evento.
Una vez que se hayan establecido las convenciones de nomenclatura de eventos, es importante
entender los diferentes patrones de eventos que puede considerar. Muchas arquitecturas
basadas en eventos incluyen eventos de notificación y eventos de transferencia de estado
transmitidos por eventos.
Eventos de notificación
Los eventos de notificación tienen el propósito de {
informar a los sistemas descendentes de un suceso. Por “version”: “1”,
“id”: “07fffe3b-4b25-48a7-b4a8-
FP O
ejemplo, si un usuario realiza un pedido, podemos crear
432bcc3bfb2c”,
un evento “OrderCreated“ que indique a los consumidores
“detail-type”: “OrderCreated”,
posteriores sobre la orden recién creada. Los eventos de “source”: “myapp.orders”,
notificación contienen una pequeña carga útil que solo “account”: “123456789”,
transmite la información necesaria a los consumidores “time”: “2022-06-01T00:00:00Z”,
posteriores. Esta simplicidad garantiza que los contratos “region”: “us-west-1”,
“detail”: {
de los productores con los consumidores permanezcan
“data”: {
gestionables, simples y mantenibles.
“orderId”: “3c947443-fd5f-4bfa-
8a12-2aa348e793ae”,
“userId”: “09586e5c-9983-4111-
8395-2ad5cfd3733b”
}
}
}
29
Ejemplo de un evento de notificación de EventBridge con una carga útil simple
Los consumidores posteriores pueden precisar información adicional cuando se trata de eventos
de notificación. Por ejemplo, si un evento “OrderCreated“ se envía de forma descendente con
solo “pedido“, es posible que los consumidores del dominio posterior necesiten obtener más
detalles sobre la orden para procesar el evento. Esto podría provocar una presión negativa
no deseada sobre el productor o sobre otra API para obtener la información necesaria, una
compensación que debe tener en cuenta.
Servicio de
previsión
/orders/ a55e8e73-da24-497b-bad7-cc8fb3cd04f5 (GET)
30
Al publicar eventos con cargas útiles mayores, se deben tener en cuenta varios factores.
La primera consideración es evitar que los detalles de implementación de su dominio o servicio
se filtren a sus eventos. Debe evaluar cuidadosamente qué información incluir en los eventos
y qué información exponer a los consumidores posteriores. Tenga en cuenta que existen
límites entre los servicios y que, a través del esquema de eventos, se crea un contrato entre
los productores y los consumidores. Este contrato requiere mantenimiento y administración,
y cuanta más información incluya en los eventos, más cuidado tendrá que tener a la hora de
gestionar los cambios y las versiones de esos eventos.
El patrón de diseño de eventos que elija dependerá del caso de uso. Muchas aplicaciones
incorporan ambos patrones. Al consumir eventos de notificación o eventos ECST, debe tener en
cuenta los patrones de consumo de los consumidores (mapeos de contexto delimitado). Hacerlo
puede ayudarle a gestionar y mitigar los riesgos cuando se producen cambios importantes entre
los contratos con los productores y los consumidores.
Al consumir un evento publicado, los consumidores pueden elegir entre varias opciones sobre
cómo desean consumir esa información. Pueden adaptarse al evento en sí (conformista), escribir
un contenedor para transformar el evento (capa anticorrupción [ACL]) o ponerse de acuerdo en
un lenguaje público compartido e imponer las transformaciones al productor (servicio de host
abierto [OHS]).
A O
A B A C B A H B
L S
31
Patrón conformista
El patrón conformista es un patrón que se utiliza en la arquitectura basada en eventos para
consumir eventos a medida que se publican sin ninguna transformación o modificación.
Este patrón garantiza que los consumidores posteriores estén alineados con el esquema del
productor, proporcionando un contrato claro entre el productor y el consumidor.
ACL
En una arquitectura basada en eventos, una ACL es un patrón que se utiliza para garantizar
que los datos de un dominio no se corrompan ni se usen indebidamente en otro dominio.
La ACL actúa como mediadora entre dos contextos delimitados que tienen diferentes lenguajes,
modelos o lógica empresarial, y proporciona una capa de traducción entre ellos. Al consumir
eventos de los productores, implementar una ACL puede ayudar a controlar el impacto que
pueden tener las modificaciones en los contratos y a mapear los diferentes modelos de dominio.
OHS
En una arquitectura basada en eventos, el patrón OHS es un patrón de diseño que se utiliza para
permitir que múltiples contextos delimitados se comuniquen entre sí mediante la definición
de un lenguaje público compartido. El patrón OHS implica establecer un lenguaje público
compartido entre dominios, que se puede utilizar como intermediario para la comunicación.
El lenguaje compartido se define mediante un conjunto de interfaces, contratos o esquemas
acordados, que se pueden utilizar para hacer que las transformaciones recaigan en el productor.
32
Idempotencia
La idempotencia es la propiedad de una operación que se puede aplicar varias veces sin cambiar
el resultado más allá de la ejecución inicial. Puede ejecutar con seguridad una operación
idempotente varias veces sin efectos secundarios, como datos incoherentes o duplicados.
Puede tomar la decisión de crear todos los servicios como idempotentes. Esto es útil al
gestionar eventos duplicados para que cualquier operación se pueda ejecutar varias veces
sin efectos secundarios. Sin embargo, este enfoque puede aumentar la complejidad de las
aplicaciones. De otro modo, puede incluir un identificador único en cada evento como una clave
de idempotencia.
Una vez que se procese el evento, actualice el almacén de datos persistente con los resultados.
Si cualquier evento nuevo llega con la misma clave de idempotencia, devuelva el resultado de la
solicitud inicial.
{
“source”: “com.orders”,
“detail-type”: “OrderCreated”,
“detail”: {
“metadata”: {
“idempotency-key”: “c9894c60-0558-
4533-a9b0-8bb579303428”
},
“data”: {
“orderId”: “e92570b8-3fb3-4a4b-
b24b-d697919fe56c”
}
}
}
33
Ordenación
Una consideración importante que se debe tener en cuenta al utilizar arquitecturas basadas
en eventos es si la aplicación requiere que los eventos se envíen en una ordenación específica
(eventos ordenados) o si la ordenación no importa (eventos desordenados). Por lo general, la
ordenación se garantiza dentro de un ámbito específico.
Eventos ordenados
Puede optar por utilizar un servicio que garantice la ordenación, como Kinesis Data Streams
o Amazon SQS FIFO (primero en entrar, primero en salir). Kinesis Data Streams preserva la
ordenación dentro de los mensajes en una partición. Con Amazon SQS FIFO, la ordenación se
preserva dentro de una identificación de un grupo de mensajes. Sin embargo, la ordenación
garantizada tiene inconvenientes, como un aumento de los costos y posibles obstáculos en las
operaciones, en comparación con los eventos desordenados.
Otros servicios, como EventBridge y las colas estándar de Amazon SQS, ofrecen una ordenación
en función del mejor esfuerzo. Esto significa que la aplicación debe asumir que recibirá
mensajes desordenados. Esto no será un problema para muchas aplicaciones. Sin embargo, si su
aplicación requiere una ordenación, AWS facilita la mitigación.
Eventos desordenados
Crear para gestionar los eventos desordenados puede aumentar la resistencia de la aplicación.
Esto garantiza que su aplicación no falle si el evento se envía desordenado. Por ejemplo,
si la aplicación posee órdenes de clientes, podría asumir que no puede recibir un evento
de “OrderUpdated” antes que un evento de “OrderCreated”. Puede gestionar esto al crear
un registro de transacción parcial en una base de datos cuando se reciba un evento de
“OrderUpdated” mientras espera la recepción del evento de “OrderCreated”. Luego, puede
generar un informe operacional con detalles de transacciones incompletas para revisar y
descubrir problemas. En lugar de asumir que los eventos estarán en orden y, de lo contrario,
se producirá un error, puede diseñar un sistema para manejar los eventos desordenados
y aumentar la tolerancia a los errores y la escalabilidad de la aplicación.
34
SECCIÓ N 5
Conclusión
Las arquitecturas basadas en eventos se pueden utilizar para aumentar la agilidad y crear
aplicaciones escalables y fiables en toda la empresa. Mientras que el enfoque puede suponer
nuevos desafíos, las arquitecturas basadas en eventos son un método efectivo para crear
aplicaciones complejas al facultar a varios equipos para que trabajen de manera independiente.
AWS ofrece un conjunto completo de servicios sin servidor para crear arquitecturas basadas
en eventos. Con AWS, puede integrar eventos en más de 200 servicios de AWS, más de
45 aplicaciones SaaS y aplicaciones personalizadas, lo cual facilita y agiliza la creación de
aplicaciones escalables basadas en eventos.
Esperamos que, al leer esta guía, haya adquirido una buena comprensión de los conceptos de
la arquitectura basada en eventos, las prácticas recomendadas y los servicios relevantes que
pueden ayudar a su equipo a crear arquitecturas basadas en eventos exitosas con AWS.
35
SECCIÓ N 6
Recursos
© 2023, Amazon Web Services, Inc. o sus empresas afiliadas. Todos los derechos reservados. 36