Читать книгу Vom Monolithen zu Microservices - Sam Newman - Страница 29
Zeitliche Kopplung
ОглавлениеZeitliche Kopplung ist vor allem ein Laufzeitthema, bei dem es allgemein um eine der zentralen Herausforderungen synchroner Aufrufe in einer verteilten Umgebung geht. Wann eine Nachricht geschickt und wie diese verarbeitet wird, ist zeitlich relevant, wir reden also von einer zeitlichen Kopplung. Das klingt ein bisschen seltsam, schauen wir uns daher das Beispiel in Abbildung 1-12 an.
Abbildung 1-12: Drei Services nutzen synchrone Aufrufe, um eine Operation durchzuführen – sie sind zeitlich gekoppelt.
Hier sehen wir einen synchronen HTTP-Aufruf von unserem Warehouse-Service zu einem Order-Service, um erforderliche Informationen über eine Bestellung abzurufen. Um den Request zu erfüllen, muss der Order-Service wiederum Informationen vom Customer-Service abrufen – ebenfalls über einen synchronen HTTP-Aufruf. Damit diese Gesamtoperation abgeschlossen werden kann, müssen Warehouse-, Order- und Customer-Service laufen und ansprechbar sein. Sie sind zeitlich gekoppelt.
Wir könnten dieses Problem auf verschiedenen Wegen lösen. So könnten wir über Caching nachdenken – würde der Order-Service die vom Customer-Service abzufragenden Informationen cachen, könnte eine zeitliche Kopplung zum Customer-Service in manchen Fällen vermieden werden. Wir könnten auch einen asynchronen Transportweg nutzen, um die Requests zu schicken, vielleicht so etwas wie einen Message Broker. Damit könnte eine Nachricht an einen folgenden Service geschickt werden, die dann verarbeitet wird, wenn der Folgeservice verfügbar ist.
Eine vollständige Behandlung dieser Art von Service-to-Service-Kommunikation geht über den Rahmen dieses Buchs hinaus, wird aber in Kapitel 4 von Building Microservices genauer besprochen.