it-swarm.com.de

Microservices vs. monolithische Architektur

Ich habe etwas über Microservices gelesen und bin ein bisschen fasziniert. Es scheint, als wäre es ein interessantes Konzept. Ich frage mich jedoch, welche Vor- und Nachteile die Verwendung von Mikrodiensten gegenüber der monolithischen Architektur hat und umgekehrt.

Wenn Microservices besser geeignet sind und sich besser für monolithische Architektur eignen.

73
user902383

Ich bin zwar relativ neu in der Microservices-Welt, versuche aber, Ihre Frage so vollständig wie möglich zu beantworten.

Wenn Sie die Microservices-Architektur verwenden, haben Sie eine stärkere Entkopplung und Trennung von Bedenken. Da Sie in der Regel Ihre Bewerbung aufteilen.

Dies führt dazu, dass Ihre Codebasis einfacher zu verwalten ist (jede Anwendung ist unabhängig von den anderen Anwendungen, um funktionsfähig zu bleiben). Daher wird wenn Sie dies richtig machen, es in Zukunft einfacher sein, neue Funktionen hinzuzufügen zu Ihrer Anwendung. Während es bei einer monolithischen Architektur sehr schwierig werden kann, wenn Ihre Anwendung groß ist (und Sie können davon ausgehen, dass dies irgendwann der Fall sein wird).

Außerdem die Bereitstellung der Anwendung ist einfacher, da Sie die unabhängigen Mikrodienste separat erstellen und auf separaten Servern bereitstellen. Dies bedeutet, dass Sie jederzeit Dienste erstellen und bereitstellen können, ohne den Rest Ihrer Anwendung neu erstellen zu müssen.

Da die verschiedenen Dienste klein sind und separat bereitgestellt werden, ist es offensichtlich einfacher zu skalieren mit dem Vorteil, dass Sie bestimmte Dienste Ihrer Anwendung skalieren können (mit einem Monolith skalieren Sie das komplette "Ding", auch wenn Es ist nur ein bestimmter Teil der Anwendung, der überlastet wird.

Für Anwendungen, die nicht zu groß werden sollen, um in Zukunft verwaltet zu werden. Es ist besser, es bei der monolithischen Architektur zu halten. Da die Microservices-Architektur einige ernsthafte Schwierigkeiten mit sich bringt. Ich erklärte, dass es einfacher ist, Mikrodienste bereitzustellen, aber dies gilt nur im Vergleich zu großen Monolithen. Mit Microservices haben Sie die zusätzliche Komplexität, die Services auf verschiedene Server an verschiedenen Standorten zu verteilen, und Sie müssen einen Weg finden, dies alles zu verwalten. Der Aufbau von Microservices hilft Ihnen auf lange Sicht, wenn Ihre Anwendung groß wird. Bei kleineren Anwendungen ist es jedoch einfacher, monolithisch zu bleiben.

68
Kaj

Dies ist eine sehr wichtige Frage, da ein paar Leute von all dem Rummel um Microservices angezogen werden und Kompromisse in Betracht gezogen werden müssen. Was sind die Vorteile und Herausforderungen von Microservices (im Vergleich zum monolithischen Modell)?

Leistungen

  • Bereitstellungsfähigkeit : Mehr Flexibilität bei der Bereitstellung neuer Versionen eines Dienstes aufgrund kürzerer Build-, Test- und Bereitstellungszyklen. Flexibilität beim Einsatz dienstspezifischer Konfigurationen für Sicherheit, Replikation, Persistenz und Überwachung.
  • Zuverlässigkeit : Ein Mikroservice-Fehler betrifft nur diesen Mikroservice und dessen Verbraucher, während im monolithischen Modell ein Servicefehler den gesamten Monolithen zum Erliegen bringen kann.
  • Verfügbarkeit : Das Rollout einer neuen Version eines Mikrodienstes erfordert nur geringe Ausfallzeiten, während das Rollout einer neuen Version eines Dienstes im Monolith einen normalerweise langsameren Neustart von erfordert der gesamte Monolith.
  • Skalierbarkeit : Jeder Mikroservice kann mithilfe von Pools, Clustern und Gittern unabhängig skaliert werden. Aufgrund der Bereitstellungseigenschaften passen Microservices hervorragend zur Elastizität der Cloud.
  • Modifizierbarkeit : Mehr Flexibilität bei der Verwendung neuer Frameworks, Bibliotheken, Datenquellen und anderer Ressourcen. Außerdem sind Mikrodienste lose gekoppelte, modulare Komponenten, die nur über ihre Verträge zugänglich sind und daher weniger dazu neigen, sich in einen großen Schlammballen zu verwandeln.
  • Management : Die Anwendung Entwicklung ist auf kleinere Teams aufgeteilt, die unabhängiger arbeiten.
  • Entwurfsautonomie : Das Team hat die Freiheit, verschiedene Technologien, Frameworks und Muster für den Entwurf und die Implementierung jedes Mikrodienstes einzusetzen und kann jeden Mikrodienst unabhängig voneinander ändern und neu bereitstellen

Herausforderungen

  • Bereitstellungsfähigkeit : Es gibt weitaus mehr Bereitstellungseinheiten, sodass komplexere Jobs, Skripts, Übertragungsbereiche und Konfigurationsdateien für die Bereitstellung überwacht werden müssen. (Aus diesem Grund sind Continuous Delivery und DevOps für Microservice-Projekte äußerst wünschenswert.)
  • Leistung : Dienste müssen mit größerer Wahrscheinlichkeit über das Netzwerk kommunizieren, wohingegen Dienste innerhalb des Monolithen von lokalen Anrufen profitieren können. (Aus diesem Grund sollte das Design "gesprächige" Microservices vermeiden.)
  • Modifizierbarkeit : Vertragsänderungen wirken sich eher auf Verbraucher aus, die an anderer Stelle eingesetzt werden, wohingegen sich Verbraucher im monolithischen Modell eher innerhalb des Monolithen befinden und dies auch tun werden im Gleichschritt mit dem Service ausgerollt. Mechanismen zur Verbesserung der Autonomie, wie z. B. mögliche Konsistenz und asynchrone Aufrufe, erhöhen die Komplexität von Mikrodiensten.
  • Testbarkeit : Integrationstests sind schwieriger einzurichten und auszuführen, da sie sich auf verschiedene Microservices in verschiedenen Laufzeitumgebungen erstrecken können.
  • Verwaltung : Der Aufwand für die Verwaltung von Vorgängen nimmt zu, da mehr Laufzeitkomponenten, Protokolldateien und Punkt-zu-Punkt-Funktionen vorhanden sind. Punkt Interaktionen zu überwachen.
  • Speichernutzung : In jedem Microservice-Bundle werden häufig mehrere Klassen und Bibliotheken repliziert, und der Gesamtspeicherbedarf nimmt zu.
  • Laufzeitautonomie : Im Monolithen ist die gesamte Geschäftslogik zusammengefasst. Bei Microservices ist die Logik über Microservices verteilt. Wenn alles andere gleich ist, ist es wahrscheinlicher, dass ein Mikrodienst mit anderen Mikrodiensten über das Netzwerk interagiert - diese Interaktion verringert die Autonomie. Wenn bei der Interaktion zwischen Mikrodiensten Daten geändert werden, beeinträchtigt die Notwendigkeit einer Transaktionsgrenze die Autonomie zusätzlich. Die gute Nachricht ist, dass wir zur Vermeidung von Problemen mit der Laufzeitautonomie Techniken wie etwa mögliche Konsistenz, ereignisgesteuerte Architektur, CQRS, Cache (Datenreplikation) und die Ausrichtung von Mikrodiensten an DDD-gebundenen Kontexten anwenden können. Diese Techniken sind Microservices nicht inhärent, wurden aber von praktisch jedem Autor vorgeschlagen, den ich gelesen habe.

Sobald wir verstanden haben diese Kompromisse , müssen wir noch etwas wissen, um die andere Frage zu beantworten: Was ist besser, Microservices oder Monolith? Wir müssen die nicht-funktionalen Anforderungen (Qualitätsattributanforderungen) der Anwendung kennen. Wenn Sie erst einmal verstanden haben, wie wichtig Leistung und Skalierbarkeit sind, können Sie die Kompromisse abwägen und eine fundierte Entwurfsentscheidung treffen.

143
Paulo Merson

@Luxo ist genau richtig. Ich möchte nur eine kleine Abwechslung anbieten und die organisatorische Perspektive davon herbeiführen. Microservices ermöglichen nicht nur die Entkopplung der Anwendungen, sondern können auch auf organisatorischer Ebene hilfreich sein. Die Organisation wäre beispielsweise in der Lage, sich in mehrere Teams aufzuteilen, von denen sich jedes auf einer Reihe von Microservices entwickeln kann, die das Team möglicherweise bereitstellt.

In größeren Geschäften wie Amazon gibt es beispielsweise ein Personalisierungsteam, ein E-Commerce-Team, ein Team für Infrastrukturservices usw. Wenn Sie sich mit Microservices befassen möchten, ist Amazon ein sehr gutes Beispiel dafür. Jeff Bezos hat es sich zur Aufgabe gemacht, dass Teams mit den Diensten eines anderen Teams kommunizieren, wenn sie Zugriff auf eine gemeinsame Funktionalität benötigen. Siehe hier für eine kurze Beschreibung.

Darüber hinaus hatten Ingenieure von Etsy und Netflix auch eine kleine Debatte zu Zeiten von Microservices vs. Monolith auf Twitter. Die Debatte ist ein bisschen weniger technisch, kann aber auch einige Einblicke bieten.

10
Will C