Estilo de arquitetura condicionada por eventosEvent-driven architecture style

Uma arquitetura condicionada por eventos é constituída por produtores de eventos que geram um fluxo de eventos e por consumidores de eventos que escutam a existência de eventos.An event-driven architecture consists of event producers that generate a stream of events, and event consumers that listen for the events.

Diagrama de um estilo de arquitetura condicionada por eventos

Os eventos são entregues quase em tempo real, pelo que os consumidores podem responder imediatamente aos eventos à medida que estes ocorrem.Events are delivered in near real time, so consumers can respond immediately to events as they occur. Os produtores estão desassociados dos consumidores — um produtor não sabe quais são os consumidores que estão à escuta.Producers are decoupled from consumers — a producer doesn't know which consumers are listening. Os consumidores também estão desassociados uns dos outros e cada consumidor vê todos os eventos.Consumers are also decoupled from each other, and every consumer sees all of the events. Isto difere de um padrão [Consumidores Concorrentes] competing-consumers, no qual os consumidores extraem as mensagens de uma fila e uma mensagem é processada apenas uma vez (partindo do princípio de que não existem erros).This differs from a Competing Consumers pattern, where consumers pull messages from a queue and a message is processed just once (assuming no errors). Em alguns sistemas, como IoT, os eventos têm de ser ingeridos em volumes muito elevados.In some systems, such as IoT, events must be ingested at very high volumes.

Uma arquitetura condicionada por eventos pode utilizar um modelo de publicação/subscrição ou um modelo de fluxo de eventos.An event driven architecture can use a pub/sub model or an event stream model.

  • Pub/sub: A infraestrutura de mensagens mantém um registo das subscrições.Pub/sub: The messaging infrastructure keeps track of subscriptions. Quando um evento é publicado, envia o evento para cada subscritor.When an event is published, it sends the event to each subscriber. Depois de um evento ser recebido, este não pode ser reproduzido e os novos subscritores não veem o evento.After an event is received, it cannot be replayed, and new subscribers do not see the event.

  • Eventos de transmissão em fluxo: Eventos são escritos num registo.Event streaming: Events are written to a log. Os eventos estão criteriosamente ordenados (dentro de uma partição) e são duráveis.Events are strictly ordered (within a partition) and durable. Os clientes não subscrevem o fluxo, em vez disso, um cliente pode ler a partir de qualquer ponto do fluxo.Clients don't subscribe to the stream, instead a client can read from any part of the stream. O cliente é responsável pela progressão da respetiva posição no fluxo.The client is responsible for advancing its position in the stream. Isto significa que um cliente não só pode efetuar a adesão em qualquer altura como pode reproduzir eventos.That means a client can join at any time, and can replay events.

No lado do consumidor, existem algumas variações comuns:On the consumer side, there are some common variations:

  • Processamento de eventos simples.Simple event processing. Um evento aciona imediatamente uma ação no consumidor.An event immediately triggers an action in the consumer. Por exemplo, pode utilizar as Funções do Azure com um acionador do Service Bus, de modo a que uma função seja executada sempre que é publicada uma mensagem num tópico do 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.

  • Processamento de eventos complexos.Complex event processing. Um consumidor processa uma série de eventos, à procura de padrões nos dados dos eventos, com base numa tecnologia como o Azure Stream Analytics ou o 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. Por exemplo, pode agregar as leituras de um dispositivo incorporado ao longo de um certo período de tempo e gerar uma notificação caso a média móvel ultrapasse um determinado limiar.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.

  • Processamento de fluxos de eventos.Event stream processing. Utilize uma plataforma de transmissão em fluxo de dados, como o Hub IoT do Azure ou o Apache Kafka, como um pipeline para ingerir eventos e fornecê-los aos processadores de fluxos.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. Os processadores de fluxos entram em ação para processar ou transformar o fluxo.The stream processors act to process or transform the stream. Podem existir vários processadores de fluxos para diferentes subsistemas da aplicação.There may be multiple stream processors for different subsystems of the application. Esta abordagem é uma boa opção para as cargas de trabalho de IoT.This approach is a good fit for IoT workloads.

A origem dos eventos pode ser externa ao sistema como, por exemplo, dispositivos físicos numa solução de IoT.The source of the events may be external to the system, such as physical devices in an IoT solution. Nesse caso, o sistema tem de ser capaz de ingerir os dados com o volume e o débito de que a origem de dados precisa.In that case, the system must be able to ingest the data at the volume and throughput that is required by the data source.

No diagrama lógico acima, cada tipo de consumidor é mostrado como uma única caixa.In the logical diagram above, each type of consumer is shown as a single box. Na prática, é comum ter várias instâncias de um consumidor, para evitar que o consumidor se transforme num ponto de falha único no sistema.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. Também poderão ser necessárias várias instâncias para processar o volume e a frequência dos eventos.Multiple instances might also be necessary to handle the volume and frequency of events. Além disso, um único consumidor pode processar eventos de vários threads.Also, a single consumer might process events on multiple threads. Isto pode provocar dificuldades se os eventos têm de ser processados por ordem ou exatamente a exigir-semântica de uma vez.This can create challenges if events must be processed in order or require exactly-once semantics. Veja Minimizar a Coordenação.See Minimize Coordination.

Quando utilizar esta arquiteturaWhen to use this architecture

  • Vários subsistemas têm de processar os mesmos eventos.Multiple subsystems must process the same events.
  • Processamento em tempo real com um hiato de tempo mínimo.Real-time processing with minimum time lag.
  • Processamento de eventos complexos, como a agregação ou correspondência de padrões ao longo de períodos de tempo.Complex event processing, such as pattern matching or aggregation over time windows.
  • Volume e velocidade de dados elevados, como IoT.High volume and high velocity of data, such as IoT.

BenefíciosBenefits

  • Os produtores e os consumidores estão desassociados.Producers and consumers are decoupled.
  • Não existem integrações ponto a ponto.No point-to point-integrations. É fácil adicionar novos consumidores ao sistema.It's easy to add new consumers to the system.
  • Os consumidores podem responder de imediato aos eventos, à medida que estes são recebidos.Consumers can respond to events immediately as they arrive.
  • Altamente dimensionável e distribuída.Highly scalable and distributed.
  • Os subsistemas têm vistas independentes do fluxo de eventos.Subsystems have independent views of the event stream.

DesafiosChallenges

  • Entrega garantida.Guaranteed delivery. Em alguns sistemas, especialmente em cenários de IoT, é fundamental garantir que os eventos são entregues.In some systems, especially in IoT scenarios, it's crucial to guarantee that events are delivered.
  • Processamento de eventos por uma ordem ou exatamente uma vez.Processing events in order or exactly once. Normalmente, cada tipo de consumidor é executado em várias instâncias, por uma questão de resiliência e escalabilidade.Each consumer type typically runs in multiple instances, for resiliency and scalability. Isto pode provocar dificuldades se os eventos tiverem de ser processados por uma ordem (no âmbito de um tipo de consumidor) ou se a lógica de processamento não for idempotente.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.