SysteemarchitectuurBackend architect

Beschrijf het patroon "Event Bus", waar het wordt toegepast en welke valkuilen er zijn om rekening mee te houden?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Het "Event Bus"-patroon is een architectonische benadering die communicatie tussen systeemcomponenten mogelijk maakt via publicatie en het luisteren naar evenementen. Hierbij weten componenten niet direct van elkaar, wat leidt tot losjes gekoppelde interactie volgens het "publish-subscribe"-principe.

Gebruik: Dit patroon is nuttig waar schaalbare, uitbreidbare interactie tussen meerdere modules vereist is — bijvoorbeeld in complexe webapplicaties, desktop systemen, microservices-platforms.

Voorbeeldcode in Python met de pyee-bibliotheek:

from pyee import EventEmitter bus = EventEmitter() def on_user_created(user): print(f"Gebruiker gemaakt: {user}") bus.on('user_created', on_user_created) bus.emit('user_created', {"id": 1, "name": "Ivan"})

Kernkenmerken:

  • Verhoogt de modulariteit, omdat services communiceren via de bus en niet rechtstreeks
  • Vergemakkelijkt het toevoegen van nieuwe gebeurtenisverwerkers zonder bestaande code te wijzigen
  • Kan leiden tot moeilijk te traceren fouten door impliciete afhankelijkheden en complicaties bij het volgen van bedrijfsstromen

Vragen met een valstrik.

Moeten alle evenementen in de Event Bus persistent zijn?

Nee, dat is niet noodzakelijk. In de meeste gevallen werkt de Event Bus met ephemeral (vluchtige) evenementen die niet worden opgeslagen. Persistentie is alleen nodig als het belangrijk is dat evenementen niet verloren gaan (bijvoorbeeld via Kafka).

Gaat een evenement verloren als er geen enkele abonnee is geregistreerd op het moment van publicatie?

Ja, als het systeem geen evenementen opslaat (ephemeral), gaat het evenement verloren. Voor gegarandeerde levering is een durable Event Bus nodig (bijvoorbeeld RabbitMQ met persistente wachtrijen).

Kan één Event Bus zonder beperkingen worden gebruikt voor synchronische en asynchronische code?

Nee, een synchronische Event Bus kan de thread blokkeren totdat alle verwerkers zijn voltooid, wat onacceptabel is voor hoge belasting. Voor schaalbare systemen worden asynchronische Event Bussen gebruikt of de verwerking van evenementen wordt naar aparte processen/draad gebracht (bijvoorbeeld via Celery).