Questa è una versione PDF del contenuto. Per la versione completa e aggiornata, visita:
Verrai reindirizzato automaticamente...
In der Fintech-Landschaft des Jahres 2026 ist die Erwartung der Nutzer Unmittelbarkeit. Es ist nicht mehr akzeptabel, tagelang auf ein vorläufiges Feedback zu einer Finanzierungsanfrage zu warten. Hier kommt die Event-Driven Architecture: Echtzeit-Verwaltung der Antragsbearbeitung ins Spiel, ein Paradigma, das monolithische und langsame Bankprozesse in reaktive und skalierbare Datenströme verwandelt. Dieser technische Artikel untersucht, wie man ein verteiltes System entwickelt, das den Lebenszyklus einer Hypothek verwalten kann und dabei Resilienz sowie Datenkonsistenz gewährleistet.
Traditionell erfolgte die Orchestrierung eines Hypothekenantrags über monolithische Architekturen oder Microservices, die über HTTP (REST/gRPC) gekoppelt waren. Dieser Ansatz weist strukturelle Schwachstellen auf:
In einer ereignisgesteuerten Architektur kommunizieren Microservices nicht direkt miteinander. Stattdessen produzieren und konsumieren sie Events (Ereignisse). Ein Event ist eine unveränderliche Tatsache, die in der Vergangenheit stattgefunden hat (z. B. MortgageApplicationSubmitted).
Für unseren Anwendungsfall vergleichen wir zwei dominierende technologische Backbones:
Architekturentscheidung: Für ein komplexes Hypothekensystem, das Historisierung und strenge Audits erfordert, verwenden wir Apache Kafka als zentralen Event Bus und integrieren Schema Registry-Muster (z. B. Avro oder Protobuf), um die Kompatibilität der Datenverträge zu gewährleisten.
Die Verwaltung eines Hypothekenantrags ist ein Long-Running Process (langlaufender Prozess). Wir müssen entscheiden, wie wir die Dienste koordinieren:
Wir verwenden einen hybriden Ansatz: Choreografie für Status-Events (Pub/Sub) und Orchestrierung (über das Saga-Pattern) für das Management der transaktionalen Konsistenz.
In einem verteilten System können wir keine ACID-Transaktionen der lokalen Datenbank für Prozesse verwenden, die mehrere Dienste durchlaufen. Wir müssen die Eventual Consistency akzeptieren. Aber was passiert, wenn das Bank Gateway den Antrag ablehnt, nachdem der Scoring Service ihn genehmigt hatte?
Wir müssen das Saga-Pattern implementieren, um Rollbacks (kompensierende Transaktionen) zu verwalten.
Stellen wir uns den erfolgreichen Ablauf und den Fehlerfall vor:
Der Nutzer sendet die Anfrage. Der Application Service veröffentlicht das Event:
{
"eventId": "uuid-1234",
"eventType": "MortgageApplicationSubmitted",
"payload": {
"applicationId": "M-999",
"amount": 200000,
"applicant": "Mario Rossi"
}
}Der Scoring Service und der Document Service hören auf das Event.
Der Scoring Service genehmigt und veröffentlicht CreditScoreApproved.
Der Document Service validiert die PDFs und veröffentlicht DocumentsValidated.
Das Bank Gateway wartet auf beide Events. Sobald diese empfangen wurden, versucht es, den Antrag auf dem Bank-Mainframe zu finalisieren.
Wenn der Mainframe mit einem Fehler antwortet (z. B. «Unzureichende Deckung» oder «Timeout»), veröffentlicht das Bank Gateway das Event MortgageFinalizationFailed.
An diesem Punkt greifen die Compensating Transactions:
In Kafka ist die Exactly-once-Zustellung komplex. Es ist sicherer, die Consumer so zu gestalten, dass sie idempotent sind. Wenn der Notification Service das Event MortgageApproved zweimal empfängt, muss er (anhand einer eindeutigen Event-ID, die in Redis oder DB gespeichert ist) erkennen können, dass er die E-Mail bereits gesendet hat, und das Duplikat verwerfen.
Was passiert, wenn ein Event fehlerhaft ist und den Consumer zum Absturz bringt? Wir können die Queue nicht blockieren. Das problematische Event muss nach X fehlgeschlagenen Versuchen in eine Dead Letter Queue verschoben werden, damit das Engineering-Team es manuell analysieren kann, ohne den Fluss der anderen Anträge zu stoppen.
Hypothekenanträge ändern sich im Laufe der Zeit (neue Vorschriften, neue Datenfelder). Die Verwendung einer Schema Registry ist grundlegend. Producer und Consumer müssen sich auf das Schema einigen (z. B. Avro). Wenn wir das Feld vorzugszinssatz hinzufügen, dürfen die alten Consumer nicht kaputtgehen (Backward Compatibility).
Hier ist ein Beispiel, wie man einen Consumer konfiguriert, der das Transaktionsmanagement in einem Spring Cloud Stream-Kontext unterstützt:
@Bean
public Consumer<MortgageEvent> mortgageProcessor() {
return event -> {
if (event.getType().equals("MortgageApplicationSubmitted")) {
try {
scoringService.calculate(event.getPayload());
} catch (Exception e) {
// Logik zum Senden an DLQ oder automatischer Retry
throw new AmqpRejectAndDontRequeueException(e);
}
}
};
}Der Übergang zu einer Event-Architektur für das Hypothekenmanagement ist nicht nur eine technologische Stilübung, sondern eine geschäftliche Notwendigkeit. Sie ermöglicht es, Entwicklungsteams zu entkoppeln (das Team «Dokumente» kann Updates veröffentlichen, ohne sich mit dem Team «Bank» abzustimmen), Dienste unabhängig zu skalieren (mehr Ressourcen für das Scoring während Antragsspitzen) und dem Endnutzer eine flüssige und transparente Erfahrung zu bieten.
Die Komplexität, die durch das Management der Eventual Consistency und der Kompensationsmuster eingeführt wird, ist der Preis für ein resilientes System, das hohe Volumina ohne die Flaschenhälse zentralisierter relationaler Datenbanken bewältigen kann.
Diese Architektur überwindet die Grenzen monolithischer Systeme, indem sie die zeitliche Kopplung und ineffizientes Polling eliminiert. Sie ermöglicht die Umwandlung langsamer Prozesse in reaktive Abläufe, gewährleistet eine unabhängige Skalierbarkeit der Dienste und liefert sofortiges Feedback an den Nutzer, anstatt ihn vor einem endlosen Ladevorgang warten zu lassen.
Das Saga-Pattern verwaltet die Datenkonsistenz durch eine Reihe koordinierter lokaler Transaktionen. Wenn ein Schritt fehlschlägt, wie etwa eine Ablehnung durch das Bank-Gateway, führt das System kompensierende Transaktionen aus, um die vorherigen Operationen rückgängig zu machen, wodurch sichergestellt wird, dass der Endzustand des Systems konsistent bleibt, ohne Ressourcen zu blockieren.
Apache Kafka ist vorzuziehen, wenn eine strenge Historisierung und die Fähigkeit zur erneuten Verarbeitung vergangener Events erforderlich sind, was für banktechnische Audit-Trails unerlässlich ist. Im Gegensatz zu EventBridge, das hervorragend für Serverless-Routing geeignet ist, bewältigt Kafka hohe Payloads besser und garantiert eine unveränderliche Datenpersistenz On-Premise oder hybrid.
Idempotenz ist die Fähigkeit eines Systems, dasselbe Event mehrmals zu verarbeiten, ohne doppelte Nebeneffekte zu erzeugen. Sie ist in Architekturen wie Kafka entscheidend, wo die Exactly-once-Zustellung komplex ist; Consumer müssen bereits verarbeitete Events erkennen, um beispielsweise das Versenden doppelter Benachrichtigungen an den Kunden zu vermeiden.
Um zu verhindern, dass ein fehlerhaftes Event die gesamte Verarbeitungswarteschlange blockiert, werden Dead Letter Queues (DLQ) verwendet. Nach einer definierten Anzahl fehlgeschlagener Versuche wird das problematische Event in diese spezielle Warteschlange verschoben, um von Ingenieuren manuell analysiert zu werden, sodass der Hauptfluss der Anträge ohne Unterbrechungen fortgesetzt werden kann.