Ich überlege, eine monolithische REST-API auf eine Microservice-Architektur umzustellen, und bin etwas verwirrt über die Datenspeicherung. Aus meiner Sicht wären einige der Vorteile von Microservices:
- Horizontal skalierbar - Ich kann mehrere redundante Kopien eines Mikrodienstes ausführen, um die Last und / oder den Ausfall eines Servers zu bewältigen.
- Locker gekoppelt - Ich kann interne Implementierungen von Mikrodiensten ändern, ohne die anderen ändern zu müssen, und ich kann sie unabhängig voneinander bereitstellen und ändern usw.
Mein Problem ist die Datenspeicherung. Aus meiner Sicht gibt es mehrere Möglichkeiten:
- Ein einziger Datenbankdienst, der von allen Microservices gemeinsam genutzt wird - dies scheint den Vorteil einer losen Kopplung vollständig auszuschließen.
- Eine lokal installierte Datenbankinstanz auf jedem Mikroservice - Ich kann dies nicht horizontal skalieren, daher denke ich nicht, dass dies eine Option wäre.
- Jeder Mikrodienst verfügt über einen eigenen Datenbankdienst. Dies scheint am vielversprechendsten zu sein, da die Vorteile der losen Kopplung und der horizontalen Skalierung erhalten bleiben (Verwendung redundanter Datenbankkopien und / oder Splittung über mehrere).
Für mich scheint die dritte Option die einzige Option zu sein, aber für mich ist sie unglaublich schwer und eine überentwickelte Lösung. Wenn ich es richtig verstehe, müsste ich für eine einfache Anwendung mit 4-5 Mikrodiensten 16-20 Server ausführen - zwei tatsächliche Mikrodienstinstanzen pro Mikrodienst (im Falle eines Serverausfalls und für die Bereitstellung ohne Ausfallzeit) und zwei Datenbank-Service-Instanzen pro Microservice (bei Serverausfall etc ...).
Dies scheint, ganz offen gesagt, etwas lächerlich. 16-20 Server für die Ausführung einer einfachen API, wenn man bedenkt, dass ein realistisches Projekt wahrscheinlich mehr als 4-5 Dienste haben wird? Gibt es ein grundlegendes Konzept, das mir fehlt und das dies erklären wird?
Einige Dinge, die bei der Beantwortung helfen können:
- Ich bin der einzige Entwickler für dieses Projekt und werde es auf absehbare Zeit sein.
- Ich verwende Node.js und MongoDB, aber ich würde mich für sprachunabhängige Antworten interessieren - eine Antwort könnte sogar sein, dass ich nur die falschen Technologien verwende!