Style d’architecture basée sur les événementsEvent-driven architecture style

Une architecture basée sur les événements est constituée de producteurs d’événements qui génèrent un flux d’événements et de consommateurs d’événements qui écoutent les événements.An event-driven architecture consists of event producers that generate a stream of events, and event consumers that listen for the events.

Diagramme d’un style d’architecture basée sur les événements

Les événements étant remis en quasi-temps réel, les consommateurs peuvent y répondre immédiatement à mesure qu’ils se produisent.Events are delivered in near real time, so consumers can respond immediately to events as they occur. Les producteurs sont dissociés des consommateurs (un producteur ne peut pas identifier les consommateurs qui sont à l’écoute).Producers are decoupled from consumers — a producer doesn't know which consumers are listening. Les consommateurs sont aussi dissociés les uns des autres, et chaque consommateur voit tous les événements.Consumers are also decoupled from each other, and every consumer sees all of the events. Cela diffère d’un modèle de consommateurs concurrents , où les consommateurs extraient des messages d’une file d’attente et un message est traité une seule fois (en supposant qu’il n’y ait aucune erreur).This differs from a Competing Consumers pattern, where consumers pull messages from a queue and a message is processed just once (assuming no errors). Dans certains systèmes, comme IoT, les événements doivent être ingérés dans de très gros volumes.In some systems, such as IoT, events must be ingested at very high volumes.

Une architecture basée sur les événements peut utiliser un modèle de publication/abonnement ou un modèle de flux d’événements.An event driven architecture can use a pub/sub model or an event stream model.

  • Publication/abonnement : l’infrastructure de messagerie assure le suivi des abonnements.Pub/sub: The messaging infrastructure keeps track of subscriptions. Quand un événement est publié, elle communique l’événement à chaque abonné.When an event is published, it sends the event to each subscriber. Une fois l’événement reçu, il ne peut pas être relu et les nouveaux abonnés ne le voient pas.After an event is received, it cannot be replayed, and new subscribers do not see the event.

  • Diffusion d’événements : les événements sont écrits dans un journal.Event streaming: Events are written to a log. Les événements sont classés dans un ordre strict (au sein d’une partition) et sont durables.Events are strictly ordered (within a partition) and durable. Les clients ne s’abonnent pas au flux, mais ils peuvent lire n’importe quelle partie du flux.Clients don't subscribe to the stream, instead a client can read from any part of the stream. Il revient au client d’avancer sa position dans le flux.The client is responsible for advancing its position in the stream. Cela signifie qu’un client peut se joindre à tout moment et relire les événements.That means a client can join at any time, and can replay events.

Du côté du consommateur, il existe quelques variantes courantes :On the consumer side, there are some common variations:

  • Traitement des événements simples :Simple event processing. un événement déclenche immédiatement une action dans le consommateur.An event immediately triggers an action in the consumer. Par exemple, vous pouvez utiliser Azure Functions avec un déclencheur Service Bus, de telle sorte qu’une fonction s’exécute chaque fois qu’un message est publié dans une rubrique Service Bus.For example, you could use Azure Functions with a Service Bus trigger, so that a function executes whenever a message is published to a Service Bus topic.

  • Traitement des événements complexes :Complex event processing. un consommateur traite une série d’événements, à la recherche de modèles dans les données d’événement, en s’appuyant sur une technologie telle qu’Azure Stream Analytics ou Apache Storm.A consumer processes a series of events, looking for patterns in the event data, using a technology such as Azure Stream Analytics or Apache Storm. Par exemple, vous pouvez agréger les relevés d’un appareil intégré dans une fenêtre de temps et générer une notification si la moyenne mobile dépasse un certain seuil.For example, you could aggregate readings from an embedded device over a time window, and generate a notification if the moving average crosses a certain threshold.

  • Traitement des flux d’événements :Event stream processing. utilisez une plateforme de diffusion de données, telle qu’Azure IoT Hub ou Apache Kafka, comme pipeline pour ingérer les événements et les transmettre aux processeurs de flux.Use a data streaming platform, such as Azure IoT Hub or Apache Kafka, as a pipeline to ingest events and feed them to stream processors. Les processeurs de flux agissent de façon à traiter ou transformer le flux.The stream processors act to process or transform the stream. Il peut exister plusieurs processeurs de flux pour différents sous-systèmes de l’application.There may be multiple stream processors for different subsystems of the application. Cette approche est parfaitement adaptée aux charges de travail IoT.This approach is a good fit for IoT workloads.

La source des événements peut être extérieure au système. Il peut s’agir par exemple des appareils physiques d’une solution IoT.The source of the events may be external to the system, such as physical devices in an IoT solution. Dans ce cas, le système doit pouvoir ingérer les données selon le volume et le débit imposés par la source de données.In that case, the system must be able to ingest the data at the volume and throughput that is required by the data source.

Dans le diagramme logique ci-dessus, chaque type de consommateur est représenté par un cadre unique.In the logical diagram above, each type of consumer is shown as a single box. Dans la pratique, il est courant d’avoir plusieurs instances d’un même consommateur pour éviter que celui-ci devienne un point de défaillance unique dans le système.In practice, it's common to have multiple instances of a consumer, to avoid having the consumer become a single point of failure in system. Plusieurs instances peuvent aussi s’avérer nécessaires pour gérer le volume et la fréquence des événements.Multiple instances might also be necessary to handle the volume and frequency of events. De même, un même consommateur peut traiter les événements de plusieurs threads.Also, a single consumer might process events on multiple threads. Cela peut créer des difficultés si les événements doivent être traités dans l’ordre ou nécessitent une sémantique exacte-once.This can create challenges if events must be processed in order or require exactly-once semantics. Consultez réduire la coordination.See Minimize Coordination.

Quand utiliser cette architectureWhen to use this architecture

  • Plusieurs sous-systèmes doivent traiter les mêmes événements.Multiple subsystems must process the same events.
  • Traitement en temps réel avec un décalage dans le temps minimal.Real-time processing with minimum time lag.
  • Traitement des événements complexes, tel que les critères spéciaux ou l’agrégation dans des fenêtres de temps.Complex event processing, such as pattern matching or aggregation over time windows.
  • Volume et vélocité élevés des données, par exemple IoT.High volume and high velocity of data, such as IoT.

AvantagesBenefits

  • Les producteurs et les consommateurs sont dissociés.Producers and consumers are decoupled.
  • Aucune intégration point à point.No point-to-point integrations. Simplicité d’ajout de nouveaux consommateurs au système.It's easy to add new consumers to the system.
  • Les consommateurs peuvent répondre immédiatement aux événements, dès leur arrivée.Consumers can respond to events immediately as they arrive.
  • Architecture hautement scalable et distribuée.Highly scalable and distributed.
  • Les sous-systèmes ont des vues indépendantes du flux d’événements.Subsystems have independent views of the event stream.

DéfisChallenges

  • Transmission non garantie.Guaranteed delivery. Dans certains systèmes, surtout dans les scénarios IoT, il est essentiel de garantir la transmission des événements.In some systems, especially in IoT scenarios, it's crucial to guarantee that events are delivered.
  • Traitement des événements dans l’ordre ou une seule fois.Processing events in order or exactly once. Chaque type de consommateur s’exécute généralement dans plusieurs instances à des fins de résilience et de scalabilité.Each consumer type typically runs in multiple instances, for resiliency and scalability. Cela peut être une source de problèmes si les événements doivent être traités dans l’ordre (dans un type de consommateur) ou si la logique de traitement n’est pas idempotent.This can create a challenge if the events must be processed in order (within a consumer type), or if the processing logic is not idempotent.