Este texto se tradujo utilizando el sistema de traducción automatizado de Salesforce. Realice nuestra encuesta para proporcionar comentarios sobre este contenido e indicarnos qué le gustaría ver a continuación.

Uso de las herramientas y los patrones correctos para arquitecturas dirigidas por eventos

Las arquitecturas dirigidas por eventos admiten la producción y el consumo eficientes de eventos, que comunican cambios de estado del sistema o la aplicación. Estas arquitecturas permiten conexiones flexibles entre sistemas y admiten procesos y actualizaciones casi en tiempo real que funcionan entre sistemas. Aunque las ventajas de las arquitecturas dirigidas por eventos son fáciles de ver, los detalles de implementación no siempre son tan claros. ¿Qué funciones necesita tener en cuenta en patrones arquitectónicos dirigidos por eventos? ¿Qué problemas específicos resuelven estos patrones? ¿Qué consideraciones especiales se aplican a sus soluciones y cuáles son los patrones óptimos para abordarlas?

Esta guía presenta patrones utilizados para crear arquitecturas dirigidas por eventos óptimas cuando se trabaja con tecnologías de Salesforce. También analiza herramientas de eventos disponibles en Salesforce y proporciona recomendaciones de herramientas para una selección de casos de uso. Para obtener información acerca de integraciones a nivel de datos que implican Salesforce, consulte nuestra Guía de decisiones de integración de datos.

  • Utilice arquitecturas dirigidas por eventos para procesos que no requieren respuestas síncronas a solicitudes. Los patrones descritos en esta guía están diseñados para la coherencia, la capacidad de ampliación y la reutilización de datos, lo que ayuda a mantener la deuda técnica al mínimo a medida que evoluciona el panorama de aplicaciones de su organización. (Consulte Bien arquitectado - Rendimiento para obtener más información.)

  • Si MuleSoft u otra solución de Enterprise Service Bus (ESB) forma parte de su panorama existente, utilícela donde sea posible. Estas soluciones están creadas específicamente para admitir patrones de arquitectura dirigidos por eventos y tienen potentes funciones que le permiten reutilizar integraciones en su compañía.

  • Utilice la API Pub/Sub para cualquier patrón de publicación/suscripción futuro en vez de crear sus propios controladores de eventos utilizando otras API, incluyendo la API de transmisión. Ahora que la API Pub/Sub está disponible de forma general, utilícela para cualquier nuevo patrón de publicación/suscripción. Planifique migrar comunicaciones de eventos existentes utilizando otras API de plataforma, como la API de transmisión o servicios Apex personalizados, a la API Pub/Sub cuando sea factible hacerlo.

  • Los eventos de plataforma y Captura de datos de cambios (CDC) son los mecanismos preferidos para publicar cambios de registro y campo que necesitan ser consumidos por otros sistemas. No recomendamos utilizar PushTopic y eventos genéricos para nuevas implementaciones. Salesforce seguirá admitiendo PushTopic y eventos genéricos dentro de las funciones actuales, pero no tiene intención de realizar más inversiones en esta tecnología.

Plataforma Salesforce Salesforce Platform es una plataforma integral dirigida por IA que unifica empleados, agentes de IA autónomos, datos de compañía y aplicaciones en un único sistema de confianza para mejorar la productividad y la experiencia del cliente. Permite la creación de una "compañía agencia" conectando aplicaciones Customer 360, Data Cloud y Slack para la automatización de extremo a extremo.
MuleSoft MuleSoft es la plataforma de integración líder de Salesforce que permite a las organizaciones conectar aplicaciones, datos y dispositivos en entornos locales y de nube. MuleSoft es una plataforma que proporciona a TI las plataformas para desbloquear datos entre sistemas, desarrollar marcos de trabajo de automatización e integración ampliables y crear experiencias conectadas diferenciadas rápidamente.

Las arquitecturas dirigidas por eventos (EDA) se recomiendan para escenarios que requieren notificaciones casi en tiempo real, distribuyendo la carga de procesamiento para mensajes de gran volumen o complejos e integrando sistemas como IoT y dispositivos móviles que requieren resiliencia de conectividad a través de colas. Sin embargo, los EDA no deben implementarse para procesos que exigen respuestas humanas inmediatas y síncronas, ya que están diseñados para la ejecución asíncrona. Tampoco se ajustan bien si los datos de origen cambian con tan poca frecuencia que un patrón más sencillo como el procesamiento por lotes sería suficiente.

Estos son varios escenarios comunes que a menudo se ajustan bien a una arquitectura dirigida por eventos:

Punto de decisiónDirectrices
Notificaciones casi en tiempo realLos patrones de arquitectura dirigidos por eventos como publicación/suscripción, fanout y transmisión tienden a funcionar bien en escenarios donde múltiples aplicaciones necesitan ser notificadas de cambios de estado o actualizaciones de registros casi en tiempo real.
Procesamiento paraleloPatrones como publicar/suscribir tienden a funcionar bien en escenarios donde grandes volúmenes de datos o mensajes altamente complejos requieren distribuir la carga de procesamiento entre múltiples sistemas.
Lecturas de gran volumenLos patrones Mensajes pasados y Colocación en cola se utilizan habitualmente en escenarios donde las organizaciones experimentan aumentos y el volumen de mensajes que se están produciendo puede superar la capacidad de los suscriptores para procesarlos inmediatamente.
Escrituras de gran volumenLos patrones de Transmisión y Colas funcionan bien en muchos escenarios donde las organizaciones experimentan aumentos en el número de mensajes producidos.
Envío de los mismos datos a diferentes sistemasAunque la publicación/suscripción tiende a ser una solución bastante común para organizaciones que necesitan enviar los mismos datos a múltiples sistemas, la mayoría de los patrones cubiertos aquí pueden solucionarla. Asegúrese de revisarlos en detalle para encontrar el mejor ajuste.
Introducción frecuente de nuevos sistemas o dispositivosLos patrones de publicación/suscripción, Transmisión y Colocación en cola tienden a funcionar bien para escenarios donde el panorama general tiende a estar en flujo, con nuevos sistemas y dispositivos agregados regularmente. En este escenario, un nuevo sistema o dispositivo simplemente necesita convertirse en un suscriptor del bus de eventos o asociado con una cola, para comenzar a recibir mensajes en vez de requerir una integración de punto a punto personalizada.
Dispositivos IoTDebido a que los dispositivos de IoT normalmente entregan actualizaciones frecuentes y también pueden generar una oleada de mensajes en algunos escenarios, los patrones de Transmisión y Colocación en cola tienden a funcionar bien al integrarlos en un entorno de TI.
Dispositivos y sistemas móviles sin conexiónLos dispositivos móviles que necesitan trabajar en áreas con acceso a Internet de baja calidad o inexistente o sistemas que podrían estar sin conexión en el momento de la entrega de los mensajes se beneficiarán del patrón Colas, que les permite conectarse a sus colas y recuperar cualquier mensaje relevante una vez que vuelvan a estar conectados.

La mayoría de las grandes organizaciones tienen escenarios de TI complejos que tienen una combinación de sistemas con diferentes funciones. Es posible, o quizás probable, que su organización tenga sistemas heredados que no admitan integraciones dirigidas por eventos. También puede tener casos de uso donde las integraciones dirigidas por eventos no tienen sentido, incluso si los sistemas las admitirán (por ejemplo, transferencias de archivos SFTP desde terceros). Si da un paso atrás y observa el panorama de TI de su organización en su conjunto, lo más probable es que, al igual que con otras soluciones arquitectónicas, emplee una mezcla de patrones para dar cobertura a diferentes escenarios. Cuando decida hacer que la gestión de eventos sea su enfoque preferido para las integraciones, piense en ella como otra herramienta en su caja de herramientas. Puede y debe utilizarse en los escenarios correctos, pero no es un enfoque a imponer en cada sistema. Desarrollar una estrategia de integración integral le ayudará a determinar cuándo los patrones descritos en esta guía pueden o no ser apropiados.

Muchos escenarios requieren arquitecturas dirigidas por eventos, y en algunos escenarios, las arquitecturas dirigidas por eventos funcionarán incluso si no son las más adecuadas. Pero en algunos escenarios, las arquitecturas dirigidas por eventos simplemente no se deben utilizar. Estas son algunas preguntas de punto de decisión para ayudarle a identificar estos escenarios:

Punto de decisiónDirectrices/Preguntas para formular
Requisitos de negocio¿Existe una necesidad de negocio genuina para cualquiera de las funciones descritas en la sección [Cuándo utilizar una arquitectura dirigida por eventos](#cuándo utilizar una arquitectura dirigida por eventos)?
Requisitos técnicos¿La integración que está diseñando se ajusta de forma obvia a un patrón diferente, como la virtualización de datos, los lotes o las solicitudes/respuestas? En otras palabras, ¿está intentando encajar una clavija cuadrada en un agujero redondo?
Procesos que requieren que los humanos esperen respuestasCualquier integración que implique un humano esperando una respuesta del sistema de destino no es una buena opción para arquitecturas dirigidas por eventos, ya que están diseñadas para la ejecución asíncrona y no pueden garantizar un tiempo de respuesta. Considere si procesos como este son óptimos para su organización antes de implementar soluciones técnicas. Consulte [Well-Architected - Process Design](/docs/architect/es-mx/well-architected/guide/automated#diseño-de-procesos) para obtener más información.
Cambiar datos de origen con poca frecuenciaSi los datos en su sistema de origen cambian con tan poca frecuencia que las actualizaciones periódicas son suficientes, es probable que pueda simplificar su arquitectura utilizando [patrones por lotes] (https://developer.salesforce.com/docs/atlas.en-us.integration_patterns_and_practices.meta/integration_patterns_and_practices/integ_pat_batch_data_sync.htm) en vez de patrones dirigidos por eventos.
Requisitos de implementación¿La mayoría de los sistemas implicados en su solución admiten arquitecturas dirigidas por eventos? ¿Qué se requeriría para utilizar arquitecturas dirigidas por eventos con los sistemas que no las admiten (por ejemplo, actualizaciones, personalizaciones o middleware)? ¿Qué nivel de esfuerzo sería necesario para cumplir estos requisitos?
Estabilidad de estructura de mensajes¿Con qué frecuencia tendrán que cambiar sus estructuras de mensajes? ¿Qué sistemas se verán afectados por dicho cambio y cuál será el proceso de rehabilitación?
Gobernanza organizativa¿Tiene una estructura de gobernanza establecida para garantizar que todas las partes interesadas estén informadas y puedan ponderar los cambios en las estructuras de mensajes, desencadenadores y otras decisiones relacionadas con la arquitectura y los procesos?
Conjuntos de habilidades requeridos¿Tiene su personal experiencia con arquitecturas dirigidas por eventos y sabrán cómo brindarles asistencia?

Hay una variedad de patrones de arquitectura dirigidos por eventos. Algunos son patrones de propósito general que se pueden aplicar en casos de uso que no tienen ningún requisito especial fuera de estar dirigidos por eventos; por ejemplo, consulte Bien arquitectado - Interoperabilidad. Otros patrones son aplicables a los casos de uso específicos tratados aquí, como integraciones que implican grandes volúmenes de datos o escenarios que requieren una retención de mensajes más larga.

La tabla siguiente compara atributos de los patrones descritos en este documento. Utilícelo como una referencia rápida cuando necesite identificar posibles patrones para un caso de uso concreto.

PatrónCasi en tiempo realCopiar mensaje exclusivoEntrega de garantíaReducir el tamaño de mensajesTransformar datos
Publicar / Suscribir
Fanout
Mensajes pasados
Transmisión
Colocación en cola

Salesforce ofrece múltiples herramientas para ayudarle a solucionar sus casos de uso dirigidos por eventos. Esta tabla contiene una descripción general de alto nivel de las herramientas disponibles.

HerramientaDescripciónHabilidades requeridas
MuleSoftPlataforma AnypointPlataforma que activa la integración de datos utilizando capas de API.Código pro
Conector Salesforce Pub/SubAPI de Connector para Pub/Sub, que proporciona una única interfaz para publicar y suscribirse a eventos de plataforma, eventos de monitoreo de eventos en tiempo real y eventos Captura de datos de cambios.Código pro
MuleSoft Anypoint JMS ConnectorConector que permite enviar y recibir mensajes a colas y temas para cualquier servicio de mensajes que implemente la especificación Servicio de mensajes Java (JMS).Código pro
MuleSoft Anypoint Apache Kafka ConnectorConector para mover datos entre Apache Kafka y aplicaciones y servicios de negocio.Código pro
Conector de consola Anypoint de MuleSoftUn conector para corredores de eventos PubSub+ de Solace con integración de API nativa utilizando el SDK de Java JCSMPCódigo pro
MuleSoft Anypoint MQ ConnectorUn servicio de mensajería en la nube de múltiples arrendatarios que permite a los clientes realizar mensajería asíncrona avanzada entre sus aplicaciones.Código pro
MuleSoft Anypoint MQTT ConnectorUna extensión MuleSoft que cumple el protocolo MQTT (Message Queing Telemetry Transport).Código pro
Conector AMQP de Mulsoft AnypointUn conector que permite a su aplicación publicar y consumir mensajes utilizando un broker compatible con AMQP 0.9.1.Código pro
API dirigida por eventos de MuleSoft Anypoint (ASync)Lenguaje que distingue entre la industria y que admite la publicación de API dirigidas por eventos separándolas en capas de evento, canal y transporte.Código pro
MuleSoft Anypoint MQServicio de mensajería en la nube de múltiples arrendatarios que permite a los clientes realizar mensajería asíncrona avanzada entre sus aplicaciones.Código pro
Transmisiones de datos de MuleSoft AnypointMarco de trabajo disponible en MuleSoft Anypoint para publicar y suscribirse a datos de transmisión.Código pro
Plataforma SalesforceApache Kafka on HerokuComplemento de Heroku que proporciona Apache Kafka como un servicio con integración de plataforma completa en la plataforma Heroku.Código pro
Captura de datosRegistro de eventos de cambio, que publica los cambios en registros de Salesforce. Los cambios incluyen la creación de un nuevo registro, actualizaciones en un registro existente, la eliminación de un registro y la anulación de la eliminación de un registro.Código bajo a código profesional
Mensajes salientesAcciones que envían mensajes XML a extremos externos cuando se actualizan valores de campo en Salesforce.Código bajo
Eventos de plataformaMensajes seguros y ampliables que contienen datos de eventos personalizados.Código bajo a código profesional
API Pub/SubAPI que activa suscripciones a eventos de plataforma, eventos de Captura de datos de cambios y/o eventos de Monitoreo de eventos en tiempo real.Código pro
Retransmisiones de eventosActiva eventos de plataforma y Captura de datos de cambios para enviar desde Salesforce a Amazon EventBridge. Tenga en cuenta que las retransmisiones de eventos solo se conectan a AWS Eventbridge.Código bajo

Cuando un registro crítico cambia de estado en una aplicación principal (por ejemplo, el estado de un pedido pasa de "Procesando" a "Enviado"), es probable que varios otros sistemas requieran una notificación casi en tiempo real para realizar sus tareas respectivas. Una necesidad de negocio específica surge cuando el volumen de estos cambios es alto y los mensajes son complejos, lo que hace que las integraciones punto a punto tradicionales sean onerosas y difíciles de mantener. Establecer conexiones frágiles y personalizadas para cada aplicación dependiente individual lleva a deudas técnicas e inhibe la capacidad de la organización de ampliarse rápidamente. Se necesita un enfoque de integración sólido para gestionar estas sincronizaciones de datos frecuentes sin acoplar el sistema de origen directamente a cada sistema consumidor.

El siguiente diagrama representa un patrón típico de publicación/suscripción con múltiples publicadores y suscriptores compartiendo datos a través de un bus de eventos. Este patrón fundacional forma la base para los patrones más específicos que se pueden encontrar en el resto de esta guía. Algunas características clave de este patrón son:

  • No hay conexión directa entre publicadores y suscriptores. Los publicadores simplemente envían mensajes a un bus de eventos, que los transmite a cualquier otro sistema que desee escucharlos.

  • El mismo sistema puede ser un publicador y un suscriptor.

  • Los sistemas pueden publicar o suscribirse a múltiples tipos de eventos.

  • Al igual que con todos los patrones de esta guía, el patrón de publicación/suscripción recae en una categoría de patrón de integración general conocida como invocación de procedimiento remoto (RPI) o simplemente "disparar y olvidar".

Este diagrama Nivel 2 muestra un ejemplo del patrón de publicación / suscripción que incluye múltiples publicadores, múltiples suscriptores y múltiples eventos que se entregan a través de canales en un bus de eventos. En este patrón, el mismo sistema puede ser un publicador y un suscriptor y un sistema puede suscribirse a múltiples eventos.
Comportamiento y flujo de eventosConsideraciones sobre la carga
Herramientas disponiblesHabilidades requeridasPublicar víaSuscribirse a travésPeriodo de reproducciónEstructura de cargaLímites de carga
MuleSoftPlataforma AnypointCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector Salesforce Pub/SubCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint JMS ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint Apache Kafka ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector de consola Anypoint de MuleSoftCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQ ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQTT ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector AMQP de Mulsoft AnypointCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
API dirigida por eventos de MuleSoft Anypoint (ASync)Código proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Plataforma SalesforceApache Kafka on HerokuCódigo proAPI, registrar cambios en Postgres de HerokuN/A1-6 semanasUsuario definidoUsuario definido
Captura de datosCódigo bajo a código profesionalCambios de registroApex, API, componentes web Lightning (LWC)3 díasPredefinido1 MB
Mensajes salientes*Código bajoReglas de flujo y flujo de trabajoN/A24 horasUsuario definido100 notificaciones por mensaje
Eventos de plataformaCódigo bajo a código profesionalAPI, Apex, FlujoApex, API, Flow, LWC3 díasUsuario definido1 MB
API Pub/SubCódigo proAPI o API Pub/Sub, Apex, FlujoAPI Pub/Sub3 díasUsuario definido1 MB
Retransmisiones de eventos**Código bajoEventos de plataforma, Captura de datos de cambiosAPI3 díasUsuario definido1 MB
*Salesforce seguirá admitiendo mensajes salientes dentro de las funciones actuales, pero no tiene intención de realizar más inversiones en esta tecnología. **Las retransmisiones de eventos solo se conectan a AWS Eventbridge

Cuando una organización necesita enviar actualizaciones instantáneas a un gran número de aplicaciones cliente, como notificaciones distribuidas o mensajes SMS a dispositivos móviles, el proceso tradicional de crear transmisiones exclusivas para cada destinatario se convierte rápidamente en un cuello de botella de capacidad de ampliación. La necesidad de negocio principal, en este caso, es la distribución rápida y de alto desempeño de una sola información (como una alerta de cuenta o un aviso de cambio de servicio crítico) a numerosas aplicaciones de extremo de forma simultánea. Un enfoque simplificado para cumplir este requisito implica el enrutamiento de todos los mensajes a través de una única cola, que actúa como el punto central de la información de eventos para todos los sistemas que consumen. Este enfoque mejora el desempeño eliminando la necesidad de gestionar muchas copias de mensajes separadas.

Con el patrón fanout, los mensajes se entregan a uno o múltiples destinos (es decir, clientes o suscriptores que escuchan) a través de una única cola de mensajes. Los suscriptores recuperan el mismo mensaje de la cola, en vez de su propia copia exclusiva. (Tenga en cuenta que aunque esto mejora el desempeño, también puede hacer más difícil verificar si un suscriptor concreto recibió o no el mensaje.)

Este diagrama de implementación y documentación de Nivel 3 muestra un ejemplo del patrón de abanico. Representa un evento que se publica y se escribe en una única cola cuando se modifica un registro a través de una interacción de usuario, un flujo o un trabajo por lotes. El sistema de suscriptor tiene múltiples servicios que reciben el mismo evento desde la cola de mensajes.
Comportamiento y flujo de eventosConsideraciones sobre la carga
Herramientas disponiblesHabilidades requeridasPublicar víaSuscribirse a travésPeriodo de reproducciónEstructura de cargaLímites de carga
MuleSoftMuleSoft Anypoint JMS ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector Salesforce Pub/SubCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint Apache Kafka ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector de consola Anypoint de MuleSoftCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQ ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQTT ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector AMQP de Mulsoft AnypointCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Plataforma SalesforceApache Kafka on HerokuCódigo proAPI, registrar cambios en Postgres de HerokuN/A1-6 semanasUsuario definidoUsuario definido
Captura de datosCódigo bajo a código profesionalCambios de registroApex, API, componentes web Lightning (LWC)3 díasPredefinido1 MB
Eventos de plataformaCódigo bajo a código profesionalAPI, Apex, FlujoApex, API, Flow, LWC3 díasUsuario definido1 MB
API Pub/SubCódigo proAPI Pub/Sub o Apex, API, FlujoAPI Pub/Sub3 díasUsuario definido1 MB
Retransmisiones de eventos*Código bajoEventos de plataforma, Captura de datos de cambiosAPI3 díasUsuario definido1 MB
*Las retransmisiones de eventos solo envían datos a AWS Eventbridge

Algunos escenarios de eventos se caracterizan por una afluencia significativa de volumen de mensajes que amenaza con abrumar la capacidad de los procesos de sincronización y transformación, o por una lógica compleja de múltiples pasos requerida para procesar y transformar datos de eventos.

Algunos ejemplos incluyen:

  • Picos de volumen estacionales: Puede haber picos de volumen que los minoristas online experimentan cuando una selección de sus productos está "en temporada". Cuando un gran número de clientes están realizando compras al mismo tiempo, el número de eventos generados puede superar temporalmente la capacidad de los procesos de sincronización y transformación. Consulte Bien arquitectado: Gestión de datos para obtener más información.

  • Gestión de casos o reclamaciones: Las compañías basadas en servicio pueden experimentar aumentos en el número de casos o reclamaciones durante cortes.

  • Transformaciones de datos complejas: Las organizaciones que requieren lógica compleja para transformar mensajes a menudo están preocupadas por que los eventos se generen más rápido de lo que se pueden transformar.

Este patrón soluciona el reto de que los mensajes se generen más rápido de lo que se pueden transformar. Garantiza que los grandes volúmenes de mensajes y las manipulaciones de datos requeridas se puedan gestionar de forma fiable, incorporando una plataforma de mensajes de transmisión y segmentando la lógica de gestión de mensajes en componentes exclusivos.

El patrón Mensajes pasados funciona segmentando la lógica de gestión de mensajes en múltiples componentes:

  • Un componente gestiona el enrutamiento de mensajes, determinando las transformaciones requeridas y el destino final.

  • Un conjunto separado de componentes gestiona diferentes capas de transformación de mensajes (por ejemplo, asignaciones de campos, relaciones de objetos, etc.).

  • El último componente redacta el mensaje modificado final.

Este diagrama de implementación y documentación de Nivel 3 muestra un ejemplo de un flujo de proceso para el patrón de mensajes pasados que incluye un publicador, un suscriptor y un mensaje. El mensaje se divide en múltiples partes, que se transforman individualmente y luego se vuelven a ensamblar antes de enviarse al suscriptor.
Comportamiento y flujo de eventosConsideraciones sobre la carga
Herramientas disponiblesHabilidades requeridasPublicar víaSuscribirse a travésPeriodo de reproducciónEstructura de cargaLímites de carga
MuleSoftMuleSoft Anypoint Apache Kafka ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector Salesforce Pub/SubCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Plataforma SalesforceApache Kafka on HerokuCódigo proAPI, registrar cambios en Postgres de HerokuN/A1-6 semanasUsuario definidoUsuario definido
Captura de datosCódigo bajo a código profesionalCambios de registroApex, API, componentes web Lightning (LWC)3 díasPredefinido1 MB
Eventos de plataformaCódigo bajo a código profesionalAPI, Apex, FlujoApex, API, Flow, LWC3 díasUsuario definido1 MB
API Pub/SubCódigo proAPI o API Pub/Sub, flujo ApexAPI Pub/Sub3 díasUsuario definido1 MB
Retransmisiones de eventos*Código bajoEventos de plataforma, Captura de datos de cambiosAPI3 díasUsuario definido1 MB
*Las retransmisiones de eventos solo envían datos a AWS Eventbridge

Algunos productores generan una transmisión continua de eventos. Un ejemplo común es la transmisión de medios, que implica interacciones de usuario que se producen de forma natural como eventos discretos. Múltiples sistemas deben reaccionar al mismo comportamiento de usuario simultáneamente sin bloquear la experiencia de transmisión principal.

Considere los eventos para una plataforma de transmisión de música. Estos pueden incluir:

  • Realizar seguimiento de eventos iniciados/en pausa/omitidos

  • Escuchar eventos de sesión con marcas de tiempo

  • Eventos de creación/modificación de listas de reproducción

  • Eventos de colaboración en redes sociales

  • Descargar para escuchar sin conexión

En el patrón Transmisión, los suscriptores acceden a cada transmisión de evento y procesan los eventos en el orden exacto en que se reciben. Se envían copias exclusivas de cada transmisión de mensajes a cada suscriptor, lo que permite entregar contenido específico del suscriptor e identificar qué suscriptores reciben qué transmisiones.

Este diagrama de implementación y documentación de Nivel 3 muestra un ejemplo del patrón de transmisión que representa una transmisión de eventos que se están publicando. Los suscriptores que están escuchando las transmisiones las reciben y las procesan en consecuencia.
Comportamiento y flujo de eventosConsideraciones sobre la carga
Herramientas disponiblesHabilidades requeridasPublicar víaSuscribirse a travésPeriodo de reproducciónEstructura de cargaLímites de carga
MuleSoftTransmisiones de datos de MuleSoft AnypointCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector Salesforce Pub/SubCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint Apache Kafka ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Plataforma SalesforceApache Kafka on HerokuCódigo proAPI, registrar cambios en Postgres de HerokuN/A1-6 semanasUsuario definidoUsuario definido
API Pub/SubCódigo proAPI o API Pub/Sub, flujo ApexAPI Pub/Sub3 díasUsuario definido1 MB

Para que una transmisión tenga sentido, todos sus eventos y sus mensajes asociados deben estar en el orden correcto. Si origina los datos en una transmisión desde diferentes sistemas, deberá incorporar lógica de pedido adicional como parte del proceso de diseño.

Los casos de uso en cola son omnipresentes. Algunos ejemplos incluyen:

  • Conexiones a Internet de baja calidad: Las organizaciones de servicio de campo u otras organizaciones donde los equipos con dispositivos móviles necesitan trabajar en áreas con acceso a Internet de baja calidad o intermitente se benefician de las colas porque las aplicaciones en estos dispositivos pueden conectarse a sus colas y recuperar cualquier mensaje relevante cuando se restablece la conectividad.

  • Almacenamiento en memoria intermedia de mensajes: Cuando el volumen de mensajes supera ocasionalmente la capacidad de procesamiento de un suscriptor y el aumento de la latencia no crea problemas adicionales, las colas pueden ser un tampón para almacenar mensajes en exceso y evitar la pérdida de datos.

  • Gestión de transporte: Las organizaciones logísticas que necesitan monitorear sus flotas pueden utilizar este patrón para ver las rutas que está realizando cada vehículo casi en tiempo real y garantizar que los conductores son lo más eficientes posible.

  • Dispositivos IoT: Los fabricantes a menudo utilizan sistemas que generan transmisiones rápidas de datos, y estas transmisiones pueden tener efectos descendentes en sistemas adicionales. Este patrón puede utilizarse para identificar secuencias de eventos que requieren intervención humana antes de que se produzcan fallos catastróficos que abarquen múltiples sistemas.

En el patrón Colas, los productores envían mensajes a colas, que mantienen los mensajes hasta que los suscriptores los recuperan. La mayoría de las colas de mensajes siguen el orden de llegada y salida (FIFO) y eliminan cada mensaje después de recuperarlo. Cada suscriptor tiene una cola exclusiva, que requiere pasos de configuración adicionales pero permite garantizar la entrega e identificar qué suscriptores recibieron qué mensajes.

Este diagrama de implementación y documentación de Nivel 3 muestra un ejemplo del patrón de cola que representa un evento que se está publicando y redactando en una cola cuando se modifica un registro. Los suscriptores reciben copias del evento desde sus colas asociadas y realizan las actualizaciones apropiadas en sus propios registros.
Comportamiento y flujo de eventosConsideraciones sobre la carga
Herramientas disponiblesHabilidades requeridasPublicar víaSuscribirse a travésPeriodo de reproducciónEstructura de cargaLímites de carga
MuleSoftMuleSoft Anypoint MQCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector Salesforce Pub/SubCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint Apache Kafka ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQ ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
MuleSoft Anypoint MQTT ConnectorCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Conector AMQP de Mulsoft AnypointCódigo proAPIAPIComo está configuradoUsuario definidoNinguna
Plataforma SalesforceApache Kafka on HerokuCódigo proAPI, registrar cambios en Postgres de HerokuN/A1-6 semanasUsuario definidoUsuario definido
Captura de datosCódigo bajo a código profesionalCambios de registroApex, API, componentes web Lightning (LWC)3 díasPredefinido1 MB
Eventos de plataformaCódigo bajo a código profesionalAPI, Apex, FlujoApex, API, Flow, LWC3 díasUsuario definido1 MB
API Pub/SubCódigo proAPI o API Pub/Sub, Apex, FlujoAPI Pub/Sub3 díasUsuario definido1 MB
Retransmisiones de eventos*Código bajoEventos de plataforma, Captura de datos de cambiosAPI3 díasUsuario definido1 MB
*Las retransmisiones de eventos solo envían datos a AWS Eventbridge

Debido a la naturaleza asíncrona del patrón En cola, puede haber un retraso prolongado entre la incorporación de un mensaje a una cola y la recuperación de ese mensaje. Las colas requieren memoria o espacio de almacenamiento para albergar sus mensajes, de modo que no pueden crecer indefinidamente, lo que significa que un suscriptor que está sin conexión indefinidamente puede provocar un fallo si se acumulan suficientes mensajes en la cola. El almacenamiento en memoria intermedia de mensajes puede tener el mismo efecto si los tiempos de procesamiento de los suscriptores son demasiado largos, lo que provoca que se acumulen grandes volúmenes de mensajes en sus colas. Para mitigar estos riesgos, realice un análisis exhaustivo de los requisitos de almacenamiento para todas las colas de mensajes y, si es necesario, diseñe procesos que purgarán y desactivarán las colas si los mensajes no se recuperan en un tiempo establecido o cuando alcanzan un volumen predeterminado.

Incluso si está completamente convencido de que una arquitectura dirigida por eventos es adecuada para su organización, es posible que esté empezando con un panorama que ya tiene un gran número de integraciones de punto a punto. Obtener financiación para un proyecto para sustituir todas sus integraciones a la vez puede ser difícil, e incluso podría no ser posible utilizar una arquitectura dirigida por eventos directamente con algunos sistemas heredados. En estos escenarios, puede adoptar un enfoque incremental para migrar a una arquitectura acoplada de forma más flexible convirtiendo las aplicaciones más críticas de negocio primero, luego convirtiendo otros sistemas a medida que se actualizan o se sustituyen en proyectos futuros. Este enfoque facilita la tarea de agregar nuevas aplicaciones al bus de eventos y permite que su panorama general de TI se mantenga escalable y resiliente a medida que se siguen agregando sistemas con el tiempo.

Como arquitectos, sabemos que cada arquitectura tiene ventajas. Una arquitectura dirigida por eventos no es una excepción. Aunque un paisaje lleno de sistemas acoplados de forma flexible es altamente ampliable y resistente, también hay algunas ventajas a tener en cuenta:

  • Estrategia general de integración: Independientemente de las herramientas y los patrones que decida utilizar, es importante empezar por crear una estrategia sobre cómo se compartirán los datos entre los diversos sistemas en el panorama de su organización. Esta estrategia debe incluir los objetivos de su organización para sus datos, cómo se pueden compartir los datos y los patrones utilizados, así como orígenes de datos, objetivos, estructuras y requisitos de propiedad y acceso.

  • Compatibilidad con sistemas heredados: Su organización puede tener sistemas heredados que simplemente no admiten patrones de arquitectura dirigidos por eventos. Aunque es posible crear soluciones (por ejemplo, con un proceso que actúa como una transferencia suscribiéndose a eventos y luego enviando el resultado al sistema de destino a través de un medio diferente de transferencia de datos), es posible que desee considerar otros métodos de integración en este caso.

  • Cambios estructurales en mensajes: Una vez definida y acordada la estructura de mensajes inicial entre publicadores y suscriptores, puede ser difícil cambiar, especialmente si los suscriptores son externos. Existen varias formas de solucionar este problema. Puede utilizar extremos versionados, pero asegúrese de definir y comunicar un ciclo de vida claro para cada versión de modo que sus desarrolladores no tengan que mantener demasiadas versiones simultáneamente. Si Apache Kafka en Heroku forma parte de su paisaje, también puede considerar un registro de esquemas o una herramienta similar, pero asegúrese de que los otros sistemas en su paisaje lo admiten (y lo utilizan) también.

  • Falta de visibilidad entre publicadores y suscriptores: En la mayoría de los patrones de arquitectura dirigidos por eventos, los publicadores no conocen el estado de sus suscriptores. Por lo tanto, si un publicador envía un mensaje crítico mientras todos los suscriptores no tienen conexión, es posible que el mensaje nunca se entregue. Puede solucionar este problema haciendo uso de funciones de reproducción o agregando suscriptores redundantes que se ejecutan en servidores separados para todos los mensajes críticos.

  • Cuellos de botella de desempeño: A medida que se amplía una arquitectura dirigida por eventos, el bus de eventos puede convertirse en un cuello de botella para la entrega de mensajes si se ve desbordado por demasiados publicadores que intentan enviar mensajes a demasiados suscriptores de forma simultánea. Puede solucionar esto aumentando la memoria y procesando recursos asignados al bus de eventos o utilizando múltiples buses de eventos para procesar diferentes tipos de mensajes en paralelo.

Antes de implementar una arquitectura dirigida por eventos, considere si realmente necesita utilizar una en primer lugar. La sección anterior describe escenarios de negocio comunes que se ajustan bien a cada patrón de arquitectura dirigido por eventos. También puede leer más en Bien arquitectado - Interoperabilidad. Revise los retos a tener en cuenta al implementar arquitecturas dirigidas por eventos para determinar si los patrones que tiene en mente son los más adecuados para sus casos de uso específicos.

Tenga en cuenta que aunque la mayoría de los escenarios cubiertos en esta guía implican integraciones, las arquitecturas dirigidas por eventos también se pueden utilizar para enviar mensajes dentro de una única organización de Salesforce a través del uso de eventos de plataforma, por ejemplo. Asegúrese de tener en cuenta cualquier límite de asignación de eventos aplicable cuando diseñe procesos que utilizan eventos de plataforma como un sistema de mensajería interno.

Frecuentemente, los antipatrones alrededor de arquitecturas dirigidas por eventos provienen del uso de eventos como una solución para comunicaciones internas en una organización de Salesforce. Los antipatrones comunes incluyen:

  • Publicación de eventos desde desencadenadores Apex asociados con el mismo objeto de evento: Esto dará como resultado un bucle de desencadenador infinito.

  • Publicación de eventos desde Apex antes de que se complete una transacción DML: Si una transacción falla y se revierte, cualquier evento publicado que tenga el comportamiento Publicar inmediatamente no se incluirá en el comportamiento de reversión.

  • Publicación de eventos en Flow para orquestar la automatización posterior: La mejor forma de coordinar la lógica entre múltiples automatizaciones es utilizar subflujos o Flow Orchestrator.

  • Creación de dependencias de tiempo de ejecución: No publique eventos para facilitar la comunicación entre paquetes sin realizar los pasos apropiados para eliminar dependencias de tiempo de ejecución.

  • Cargas innecesariamente grandes: Al realizar solicitudes, es mejor enviar y recibir la menor cantidad de datos posible en la carga. Cada acción de un usuario podría generar múltiples solicitudes, y es importante que se procesen de forma eficiente. El envío de más datos de los necesarios puede contribuir a ralentizar el transporte y aumentar el tiempo de procesamiento.

  • Gestión no selectiva de eventos de aplicación: Cuando hay múltiples componentes escuchando un evento de aplicación, los desarrolladores deben asegurarse de que el controlador de eventos solo se ejecutará cuando sea realmente deseado y útil. Por ejemplo, en Lightning Console, los componentes contenidos en fichas que no están enfocadas pueden seguir escuchando aunque no sean visibles. Un desarrollador puede utilizar varias técnicas como el uso de un elemento de utilidad en segundo plano como el único oyente, o llamar a getEnclosingTabId() para determinar si esta instancia del componente está encerrada dentro de la ficha enfocada para garantizar que cada evento se gestiona solo cuando está pensado.

  • El uso de Eventos de plataforma publica un comportamiento incorrecto: Los eventos de plataforma tienen dos comportamientos de publicación: Publicar inmediatamente y Publicar después de confirmar. Puede ser útil utilizar eventos de plataforma en tiempo real para casos de uso como Registro, donde desea publicar el evento de registro independientemente de si la transacción se realiza correctamente y se confirma. Sin embargo, utilice Publicar inmediatamente con mucho cuidado con eventos de plataforma en tiempo real. Los suscriptores pueden consumir eventos en la misma transacción y provocar bloqueos de filas u otras condiciones de carrera.

Al implementar una arquitectura dirigida por eventos, una de las claves del éxito es establecer estándares para el diseño de los eventos en sí. Las especificaciones variarán dependiendo de los casos de uso de su organización, pero estas son algunas directrices generales:

  • Determine la estructura óptima para sus cargas de eventos. Aunque los tamaños de mensajes más pequeños reducen los tiempos de procesamiento, el bombardeo de suscriptores con volúmenes masivos de mensajes puede causar cuellos de botella de desempeño. Es posible que tenga que iterar en sus tamaños y estructuras de carga para encontrar el equilibrio correcto. MuleSoft y herramientas ESB similares proporcionan la capacidad de diseñar cargas personalizadas en los mensajes asociados con sus eventos, lo que puede ayudarle a visualizar estructuras de datos para mejorar el desempeño en el lado del suscriptor. (Consulte Bien arquitectado - Gestión de API para obtener más información.)

  • Piense en sus procesos de extremo a extremo. Asegúrese de no crear ningún escenario de "bucle infinito", que puede ser difícil de rastrear una vez que se implementen las integraciones. Un ejemplo de esto serían dos sistemas que publican eventos cuando se actualizan registros, mientras también escuchan los eventos del otro, lo que desencadena eventos publicados adicionales cuando se procesan.

    Puede solucionar este tipo de antipatrón agregando lógica a ambos sistemas que garantiza que los cambios realizados como resultado de un evento que se está consumiendo no dan como resultado la publicación de un nuevo evento. También debe asegurarse de documentar todos sus eventos, sus desencadenadores asociados y los sistemas descendentes que pueden verse afectados. Utilice esta documentación como referencia durante sesiones de diseño para ayudar a captar bucles interminables y escenarios similares lo antes posible. (Consulte Bien arquitectado - Diseño de procesos para obtener más información.)

  • Utilice convenciones de nomenclatura comunes entre sistemas. Las convenciones de nomenclatura coherentes son una mejor práctica para todo el desarrollo de software, incluyendo arquitecturas dirigidas por eventos. Tómese su tiempo para documentar un conjunto de estándares para nombres de eventos, estructuras, objetos asociados y procesos de gestión de errores para garantizar la coherencia entre sistemas. (Consulte Estándares de diseño bien diseñados para obtener más información.)

PatrónRecursos
Publicar/SuscribirSalesforce Well-Architected: Rendimiento
Salesforce Well-Architected: Gestión de datos
Salesforce Well-Architected - Interoperabilidad
Publicación de blog: Alcanzar eficiencia arquitectónica con retransmisiones de eventos
Publicación de blog: Anuncio de API Pub/Sub disponible de forma general
Publicación de blog: Paso de RESTful a EVENTful
Publicación de blog: Arquitecturas dirigidas por eventos y la especificación AsyncAPI
Video: Publicar / Suscribir presentación de patrón
FanoutPublicación de blog: Cómo trabajar dentro de los límites de entrega de eventos de plataforma
Video: Presentación de patrón de Fanout
Mensajes pasadosVideo: Presentación de patrón de mensajes pasados
TransmisiónPublicación de blog: Diseño para escrituras de gran volumen en Salesforce
Video: Presentación de patrón de transmisión
Documentación: Transmisión en aplicaciones Mule
Colocación en colaPublicación de blog: Diseño para escrituras de gran volumen en Salesforce
Publicación de blog: Cómo diseñar arquitecturas de pago con API con eventos
Video: Presentación de patrón de cola