Ich habe in letzter Zeit viel über Mikrodienste gelesen und hier sind einige der Schlussfolgerungen, die ich bisher gezogen habe (bitte korrigieren Sie mich, wenn ich mich irgendwann irre).
- Die Mikrodienstarchitektur passt gut zum domänengetriebenen Design. Normalerweise repräsentiert eine MS einen begrenzten Kontext.
- Wenn der Mikrodienst A eine Funktionalität erfordert, die sich im Mikrodienst B befindet , ist mein Modell wahrscheinlich falsch, und A und B sollten eigentlich ein Mikrodienst / BC sein.
- Die synchrone Kommunikation zwischen Mikrodiensten (direkte HTTP-Anforderungen) ist schlecht, da sie den Zweck von Mikrodiensten nicht erfüllt und eine Kopplung zwischen Komponenten einführt.
- Eine asynchrone Kommunikation zwischen Diensten ist wünschenswert. Dienste sollten Ereignisse in Nachrichtenwarteschlangen veröffentlichen, damit andere Dienste ihren Teil des Ereignisses abonnieren und verarbeiten oder ihn zum Replizieren eines Teils der für ihren Kontext erforderlichen Daten verwenden können. Auf diese Weise können Dienste Anforderungen verarbeiten, auch wenn andere Dienste nicht verfügbar sind, was bei der synchronen Kommunikation nicht der Fall wäre.
- Wenn der Mikrodienst A ein Ereignis veröffentlicht, der Mikrodienst B dieses Ereignis abonniert und als Ergebnis ein neues Ereignis erzeugt, sollte der Mikrodienst A nicht dasjenige sein, das das neu erzeugte Ereignis verarbeitet, da dies eine zirkuläre Abhängigkeit wäre. In diesem Fall sollten wir einen dritten Mikrodienst einführen oder A und B zu einem AB- Mikrodienst kombinieren .
- Micro-Service ist eigentlich ein irreführender Begriff. Wir sollten nach kleinen Zusammenhängen streben, aber das muss nicht so sein. Begriff sollte nicht "Mikrodienst" sein, sondern " groß genug, um den Arbeitsdienst zu erledigen ".
- Mit Micro-Services können wir neue Funktionalitäten einfacher einführen, ohne befürchten zu müssen, dass wir das gesamte System beschädigen. Dies kann durch Einführung eines neuen Dienstes oder durch Umgestaltung eines bestehenden Dienstes erfolgen.
- Jeder Mikrodienst sollte über einen eigenen Datenspeicher verfügen. Datenreplikation / -duplikation ist in dieser Architektur ein wünschenswertes Verhalten.
Abgesehen davon, dass mein Verständnis dieser Architektur bestätigt wurde, bezieht sich mein anderer Teil der Frage hauptsächlich auf die Serviceerkennung. Wenn die Services asynchron kommunizieren und eine zentrale Ereigniswarteschlange wie Amazon SQS verwenden, bedeutet dies, dass die Serviceerkennung in einer solchen Architektur keinen Platz hat?
Dienste sollten keine Kenntnisse über andere Dienste im System haben. Sie sind sich nur ihres Kontexts und ihrer Ereignisse bewusst, die sie veröffentlichen oder abonnieren sollten?