Skip to content
This repository has been archived by the owner on Nov 27, 2023. It is now read-only.

Commit

Permalink
ADD assets/first-spirit-xml/2023-10-17/2023-10-17-das-saga-muster-als…
Browse files Browse the repository at this point in the history
…-zutat-für-erfolgreiche-systeme.xml
  • Loading branch information
jekyll2cms authored and root committed Oct 17, 2023
1 parent fa6e66a commit add66d5
Showing 1 changed file with 149 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<documents>
<document uid="3ade18bbdcc36a5bca510cb38be8e7b5">
<field name="title"><![CDATA[Das Saga-Muster als Zutat für erfolgreiche Systeme]]></field>
<field name="subline"><![CDATA[]]></field>
<field name="teaser"><![CDATA[<p>Um eine Microservicearchitektur erfolgreich umzusetzen, muss man unterschiedliche Aspekte berücksichtigen.
Dazu gehört unter anderem: Wie gehen wir mit Transaktionalität um?
Wie soll das System reagieren, wenn mitten in einem verteilten fachlichen Vorgang ein Fehler auftritt?
In diesem Artikel schauen wir uns Lösungen für diese Problemstellung an.</p>
]]></field>
<field name="language_multi_keyword"><![CDATA[de]]></field>
<field name="content_type_multi_keyword"><![CDATA[blog]]></field>
<field name="mime_type_multi_keyword"><![CDATA[text/html]]></field>
<field name="category_multi_keyword"><![CDATA[Softwareentwicklung]]></field>
<field name="tag_multi_keyword"><![CDATA[Microservices]]></field>
<field name="tag_multi_keyword"><![CDATA[Resilience]]></field>
<field name="tag_multi_keyword"><![CDATA[Saga]]></field>
<field name="date_date"><![CDATA[2023-10-17T13:00:00+02:00]]></field>
<field name="date_l"><![CDATA[1697540400000]]></field>
<field name="change_date"><![CDATA[1697540400000]]></field>

<!--Author Information-->

<field name="author_id"><![CDATA[earaujo]]></field><!--Postcontent-->
<field name="headlines"><![CDATA[Das Saga-Muster als Zutat für erfolgreiche Systeme]]></field>
<field name="display_content"><![CDATA[<div class="i2-intro p-t-1">
<p>Um eine Microservicearchitektur erfolgreich umzusetzen, muss man unterschiedliche Aspekte berücksichtigen.
Dazu gehört unter anderem: Wie gehen wir mit Transaktionalität um?
Wie soll das System reagieren, wenn mitten in einem verteilten fachlichen Vorgang ein Fehler auftritt?
In diesem Artikel schauen wir uns Lösungen für diese Problemstellung an.</p>
</div>]]></field>
<field name="content"><![CDATA[<div class="adesso-text-formate">
<div class="row p-t-2">
<div class="adesso-container">
<div class="col-xl-8 adesso-center p-b-1 p-l-0 p-r-0">
<p>Um eine Microservicearchitektur erfolgreich umzusetzen, muss man unterschiedliche Aspekte berücksichtigen.
Dazu gehört unter anderem: Wie gehen wir mit Transaktionalität um?
Wie soll das System reagieren, wenn mitten in einem verteilten fachlichen Vorgang ein Fehler auftritt?
In diesem Artikel schauen wir uns Lösungen für diese Problemstellung an.</p>
<h4 id="transaktionalität-in-microservicearchitekturen">Transaktionalität in Microservicearchitekturen</h4>
<p>Stell dir vor, du versuchst, einen Kuchen zu backen.
Du nimmst alle Zutaten, mischst sie zusammen und schiebst den Teig in den Ofen.
Du stellst jedoch fest, dass du den Zucker vergessen hast.
Also nimmst du den Teig aus dem Ofen, fügst den Zucker hinzu und schiebst ihn wieder hinein.
Klingt einfach, oder?
Aber was wäre, wenn du diesen Kuchen in einem Restaurant mit 10 verschiedenen Küchenstationen backen müsstest, die jeweils von einem anderen Koch geleitet werden, und jede Station einen Arbeitsschritt ausführen müsste, um den Kuchen fertigzustellen?
Und um alles noch schwieriger zu machen, spricht auch noch jeder Koch eine andere Sprache.
Dann wird das Kuchenbacken zu einem Albtraum.</p>
<p>Diese Analogie steht für das Problem, mit dem eine Microservicearchitektur bei der Implementierung komplexer Geschäftstransaktionen konfrontiert werden kann.
An dieser Stelle kommt das Saga-Muster ins Spiel.</p>
<h4 id="was-ist-das-saga-muster">Was ist das Saga-Muster?</h4>
<p>Das Saga-Muster ist ein Entwurfsmuster, das für die Implementierung komplexer Geschäftstransaktionen in Microservicearchitekturen verwendet wird.
Es stellt sicher, dass die Datenkonsistenz über mehrere Microservices hinweg erhalten bleibt, indem es eine große Transaktion in kleinere, überschaubare Schritte aufteilt.
Das Muster wird “Saga” genannt, weil es ähnlich funktioniert wie eine Geschichte oder eine Reise, die in kleinere Segmente unterteilt wird, von denen jedes sein eigenes Ergebnis hat, das zum Gesamtergebnis der Reise beiträgt.</p>
<h4 id="wie-funktioniert-das-saga-muster">Wie funktioniert das Saga-Muster?</h4>
<p>Bei einer Saga wird eine komplexe Transaktion in mehrere Schritte unterteilt.
Diese werden jeweils in unterschiedlichen Teiltransaktion innerhalb eines Service ausgeführt.
Am Ende jeder Transaktion wird ein Ereignis ausgelöst, das über den abgeschlossenen Prozess informiert und gleichzeitig den nächsten Schritt in der Saga bei einem anderen Service anstößt.</p>
<p><img src="/assets/images/posts/das-saga-muster-als-zutat-für-erfolgreiche-systeme/saga-orchestrator.png" alt="image" />
<em>Beispiel einer Saga für einen Bestellvorgang..</em></p>
<p>Im obigen Diagramm können wir am Beispiel eines E-Commerce-Bestellvorgangs sehen, wie das Saga Pattern agiert:<br />
Nach Eintreten des Auslösers (<em>Bestellung bestätigt</em>), werden die Teiltransaktionen der Saga schrittweise innerhalb jedes Microservice ausgeführt.
Nachdem jeder Service seine internen Vorgänge abgeschlossen hat, wird ein Ereignis ausgelöst, das den nächsten Schritt anstößt.
Am Ende ist der Zustand des Gesamtsystems in einem neuen, konsistenten Zustand.</p>
<p>Bei einem Fehlschlag Mitten in der Saga werden wiederum Ereignisse in umgekehrter Richtung ausgelöst, die sogenannte “kompensierende Transaktionen” anstoßen sollen.
Diese sorgen dafür, dass bei jedem beteiligten Service die vorher vorgenommenen Schritte rückgängig gemacht werden.
Somit wird garantiert, dass die Datenkonsistenz über Microservices hinweg erhalten bleibt.</p>
<p><img src="/assets/images/posts/das-saga-muster-als-zutat-für-erfolgreiche-systeme/saga-orchestrator-error.png" alt="image" />
<em>Beispiel einer Saga für einen Bestellvorgang mit kompensierenden Transaktionen.</em></p>
<h4 id="arten-von-sagas">Arten von Sagas</h4>
<p>Bei Sagas gibt es eine Hauptunterteilung in zwei verschiedenen Arten:</p>
<h5 id="choreografie">Choreografie</h5>
<p>Choreografie-Sagas orientieren sich an unserem oben genannte Beispiel:
Die Microservices, die Teil einer Saga sind, interagieren und steuern selbstständig den gesamten Ablauf.</p>
<p>Eine Choreografie-Saga kann man mit einem einfachen Kochabend mit Freunden vergleichen.
Der Anzahl der Beteiligten ist überschaubar und die Schritte zur Zubereitung der Zutaten sind einfach.
Folglich, ist es nicht notwendig, dass eine dedizierte Person den ganzen Prozess steuert.</p>
<p>Bei der Choreografie kommunizieren die Microservices direkt miteinander, um die Teiltransaktionen auszuführen.
Jeder Microservice kennt seine eigenen Aufgaben und den Kontext der Transaktion.
Die Kommunikation erfolgt in der Regel asynchron über Events oder Nachrichten.
Jeder Microservice führt seine Aufgaben aus und löst die entsprechenden Events aus, um den nächsten Microservice in der Sequenz zu informieren.
Dies setzt voraus, dass sich die einzelnen Microservices koordinieren können, um den Transaktionszustand aufrechtzuerhalten.
Es besteht kein zentraler Kontrollpunkt, der die Ausführung überwacht.</p>
<p>Diese Art von Saga ist in der Regel einfach umzusetzen und eignet sich gut für kurzlaufende Transaktionen mit wenigen Schritten, wo kein Tracing notwendig ist und es keinen Bedarf gibt, den Transaktionsstatus zu tracken.</p>
<p>Auf der anderen Seite, wird es bei einer zu großen Anzahl von beteiligten Services zunehmend schwieriger, festzustellen, wo Fehler eingetreten sind.
Gleichzeitig wird die Anzahl von Laufzeitabhängigkeiten unübersichtlicher und schwerer zu verwalten.</p>
<p>Für diese Herausforderung kommt die andere Art von Sagas infrage:</p>
<h5 id="orchestrator">Orchestrator</h5>
<p>Bei der Saga-Orchestrierung gibt es einen zentralen Orchestrator, der die Ausführung der Teiltransaktionen steuert.
Der Orchestrator ist verantwortlich für die Koordination der beteiligten Microservices und die Verwaltung des Transaktionsstatus.
Er stellt sicher, dass die Schritte in der richtigen Reihenfolge ausgeführt werden und kann bei Bedarf Kompensationsmaßnahmen einleiten, um den vorherigen Zustand wiederherzustellen, falls ein Fehler auftritt.
Der Orchestrator fungiert als zentrale Anlaufstelle für die Transaktionssteuerung und Kommunikation zwischen den Microservices.</p>
<p><img src="/assets/images/posts/das-saga-muster-als-zutat-für-erfolgreiche-systeme/saga-orchestrator-f.png" alt="image" /><br />
<em>Beispiel einer Orchestrator-Saga für einen Bestellvorgang</em>.</p>
<p>Im obigen Diagramm ist der schon bekannten Bestellvorgang abgebildet, diesmal aber als Orchestrator-Saga:
Der Hauptunterschied besteht aus dem Einsatz eines dedizierten Service, der für die Orchestrierung, das Tracking und das Tracing der notwendigen Schritte zuständig ist.</p>
<p>Ein wichtiger Vorteil für diese Art von Saga ist, dass zyklische Abhängigkeiten vermieden werden, da die Services während der Transaktion nicht untereinander kommunizieren, sondern nur mit dem Orchestrator.
Ein weiterer Vorteil besteht aus dem Gewinn an Übersichtlichkeit, da die Definition des gesamten Workflows an einer einzigen Stelle liegt, wo sie angepasst und getestet werden kann.</p>
<p>Dennoch kommen diese Vorteile mit hohen Kosten: Der Orchestrator wird ein Single Point Of Failure, d.h., wenn er nicht verfügbar oder in einem fehlerhaften Zustand ist, kann die ganze Transaktion nicht ausgeführt werden, egal wie zuverlässig die übrigen beteiligten Services sind.
Wegen der erhöhte Komplexität bei der Umsetzung und Wartung eignet sich diese Art von Saga für Geschäftstransaktionen, die viele (i.d.R mehr als 4) teilnehmende Services mit langlaufenden Schritten beinhalten, deren Status getrackt werden muss.</p>
<p>In unserem Küchenbeispiel ist der Orchestrator der Chefkoch, der die Küchenstationen in dem Restaurant koordiniert.
Er gibt jedem Mitarbeitenden in der notwendigen Reihenfolge Anweisungen, welche Zutaten zubereitet werden sollen.
Falls es Probleme bei einem der Schritte gibt, stellt er sicher, dass alle Beteiligten Maßnahmen einleiten, sodass am Ende die Küche in einem ordentlichen Zustand bleibt.</p>
<h4 id="fazit">Fazit</h4>
<p>Wir haben uns das Saga-Muster und dessen Hauptmerkmale kennengelernt.
Ferner haben wir uns mit den Hauptarten von Sagas beschäftigt: Choreografie und Orchestrierung.
Jede hat Vorteile und Nachteile, die bei jedem Anwendungsfall abzuwägen sind.
Bei der Auswahl sind die Anzahl und Dauer der Arbeitsschritte sowie der Bedarf an Status-Tracking entscheidende Faktoren.</p>
<p>Wenn du also das nächste Mal einen Kuchen backst oder versuchst, eine komplexe, verteilte Geschäftstransaktion in einer Microservicearchitektur abzuschließen, denk an das Saga-Muster als Geheimzutat für deinen Erfolg!</p>
</div>
</div>
</div>
</div>]]></field>
</document>
</documents>

0 comments on commit add66d5

Please sign in to comment.