En informática , un evento es una ocurrencia o cambio de estado detectable que el sistema está diseñado para monitorear, como la entrada del usuario, una interrupción de hardware, una notificación del sistema o un cambio en los datos o las condiciones. Cuando se asocia con un manejador de eventos, un evento desencadena una respuesta. El manejador puede ejecutarse de forma síncrona, donde el hilo de ejecución se bloquea hasta que el manejador de eventos completa su procesamiento, o de forma asíncrona, donde el evento puede procesarse posteriormente. Incluso cuando el manejo síncrono parece bloquear la ejecución, el mecanismo subyacente en muchos sistemas sigue siendo asíncrono, administrado por el bucle de eventos . [ 1 ] [ 2 ]
Los eventos pueden implementarse mediante diversos mecanismos, como devoluciones de llamada , objetos de mensaje, señales o interrupciones, y los eventos en sí mismos son distintos de los mecanismos de implementación utilizados. Los modelos de propagación de eventos, como el burbujeo , la captura y la publicación/suscripción, definen cómo se distribuyen y gestionan los eventos dentro de un sistema. Otros aspectos clave incluyen bucles de eventos, colas y priorización de eventos, origen de eventos y patrones complejos de procesamiento de eventos. Estos mecanismos contribuyen a la flexibilidad y escalabilidad de los sistemas orientados a eventos . [ 1 ] [ 2 ]
Eventos frente a mensajes
En los sistemas distribuidos , los eventos representan un hecho o un cambio de estado (por ejemplo, OrderPlaced ) y normalmente se transmiten de forma asíncrona a múltiples consumidores, lo que promueve el acoplamiento flexible y la escalabilidad. Si bien los eventos generalmente no esperan una respuesta inmediata, los mecanismos de confirmación suelen implementarse a nivel de infraestructura (por ejemplo, desplazamientos de confirmación de Kafka, estados de entrega de SNS) en lugar de ser una parte inherente del patrón de evento en sí. [ 3 ] [ 4 ]
En cambio, los mensajes cumplen una función más amplia, abarcando comandos (p. ej., ProcessPayment ), eventos (p. ej., PaymentProcessed ) y documentos (p. ej., DataPayload ). Tanto los eventos como los mensajes pueden admitir diversas garantías de entrega, incluyendo al menos una vez, como máximo una vez y exactamente una vez, según la pila tecnológica y la implementación. Sin embargo, la entrega exactamente una vez se suele lograr mediante mecanismos de idempotencia en lugar de una semántica de entrega exactamente una vez a nivel de infraestructura. [ 3 ] [ 4 ]
Los patrones de entrega tanto para eventos como para mensajes incluyen publicación/suscripción (uno a muchos) y punto a punto (uno a uno). Si bien la solicitud/respuesta es técnicamente posible, se asocia más comúnmente con patrones de mensajería que con sistemas puramente basados en eventos. Los eventos destacan en la propagación de estado y las notificaciones desacopladas, mientras que los mensajes son más adecuados para la ejecución de comandos, la orquestación de flujos de trabajo y la coordinación explícita. [ 3 ] [ 4 ]
Las arquitecturas modernas suelen combinar ambos enfoques, aprovechando los eventos para las notificaciones de cambios de estado distribuidos y los mensajes para la ejecución de comandos específicos y flujos de trabajo estructurados basados en requisitos específicos de tiempo, orden y entrega. [ 3 ] [ 4 ]
Estrategias de evolución de eventos
En los sistemas distribuidos , la evolución de eventos plantea desafíos, como la gestión de esquemas de eventos inconsistentes entre servicios y la garantía de compatibilidad durante las actualizaciones graduales del sistema. Las estrategias de evolución de eventos en arquitecturas orientadas a eventos (EDA) pueden asegurar que los sistemas puedan manejar cambios en los eventos sin interrupciones. Estas estrategias pueden incluir eventos de versionado, como el versionado semántico o la evolución del esquema, para mantener la compatibilidad hacia atrás y hacia adelante . Los adaptadores pueden traducir eventos entre formatos antiguos y nuevos, asegurando un procesamiento consistente en todos los componentes. Estas técnicas pueden permitir que los sistemas evolucionen manteniendo la compatibilidad y la fiabilidad en entornos distribuidos complejos. [ 1 ]
semáforo de evento
En informática , un evento (también llamado semáforo de evento ) es un tipo de mecanismo de sincronización que se utiliza para indicar a los procesos en espera cuándo se ha cumplido una condición determinada.
Un evento es un tipo de dato abstracto con un estado booleano y las siguientes operaciones:
- wait : al ejecutarse, provoca la suspensión del proceso en ejecución hasta que el estado del evento se establezca en verdadero. Si el estado ya era verdadero antes de que se llamara a wait, esta no tiene ningún efecto.
- set - establece el estado del evento en verdadero, liberando todos los procesos en espera.
- clear - establece el estado del evento en falso.
Las distintas implementaciones de eventos pueden ofrecer diferentes subconjuntos de estas operaciones posibles; por ejemplo, la implementación de Microsoft Windows proporciona las operaciones wait (WaitForObject y funciones relacionadas), set (SetEvent) y clear (ResetEvent). Una opción que se puede especificar durante la creación del objeto de evento modifica el comportamiento de SetEvent de modo que solo se libera un hilo y el estado se restablece automáticamente a falso una vez liberado dicho hilo.
Los eventos que no tienen función de reinicio , es decir, aquellos que solo pueden completarse una vez , se conocen como futuros. [ 5 ] Los monitores, por otro lado, son más generales ya que combinan la señalización de finalización con mutex y no permiten que el productor y el consumidor se ejecuten simultáneamente en el monitor, lo que lo convierte en una sección de evento+crítica.
Véase también
- Función de devolución de llamada (programación informática)
- Disparador de base de datos
- eventos DOM
- Programación basada en eventos
- Manejo de excepciones
- Controlador de interrupciones
- Interrumpe
- Patrón observador (por ejemplo, oyente de eventos)
- Patrón de reactor frente a patrón de proactor
- Señales y ranuras : una construcción del lenguaje en el framework Qt.
- Sincronización virtual
Referencias
- ^ a b c Stopford, Ben (mayo de 2018). Diseño de sistemas basados en eventos . O'Reilly Media. ISBN 9781492038245.
- ^ a b Fowler, Martin (5 de noviembre de 2002). Patrones de arquitectura de aplicaciones empresariales . Addison-Wesley Professional. ISBN 978-0321127426.
- ^ a b c d Kleppmann, Martin (2017). Diseño de aplicaciones con gran cantidad de datos: Las grandes ideas detrás de los sistemas fiables, escalables y mantenibles . O'Reilly Media. ISBN 978-1449373320.
- ^ a b c d Creación de microservicios basados en eventos: aprovechamiento de los datos organizacionales a gran escala . ISBN 978-1492057895.
- ^ En 500 líneas o menos, "Un rastreador web con corrutinas asyncio" de A. Jesse Jiryu Davis y Guido van Rossum dice: "La implementación usa un asyncio.Event en lugar del Future que se muestra aquí. La diferencia es que un Event se puede reiniciar, mientras que un Future no puede pasar de resuelto a pendiente".
Enlaces externos
- Controladores de eventos y funciones de devolución de llamada de los artículos
- Diseño de alto nivel del gestor de eventos de la subgranja
- Una sintaxis de eventos para XML
- Eventos y notificaciones distribuidos
- Orden del evento
Java DOM Interface EventDocumentación Javadocjava.awt.eventDocumentación de la API Javadoc del paquete Javajavax.swing.eventDocumentación de la API Javadoc del paquete Java- Escribe un controlador de eventos
- Comprender los eventos (registros y métricas)
- Objetos de evento , Red de desarrolladores de Microsoft
- Mecanismos de sincronización de hilos en Python. Archivado el 1 de noviembre de 2020 en Wayback Machine.
- Programación informática
- Eventos (informática)
- Subrutinas
