it-swarm.com.de

Microservices: Was sind Vor- und Nachteile?

Was sind die Vor- und Nachteile des Einsatzes von Microservices im Vergleich zu alternativen Architekturen? ... Gibt es eine Faustregel, wann Microservices verwendet werden sollen?

27
user299702

Pros


Sam Newman in Building Microservices , führt die wichtigsten Vorteile von Microservices wie folgt auf:

Technologie Heterogenität

Mit einem System, das aus mehreren kollaborierenden Diensten besteht, können wir entscheiden, verschiedene -Technologien in jedem zu verwenden. Auf diese Weise können wir für jeden Job das richtige Werkzeug auswählen, anstatt, __. Einen einheitlicheren, einheitlichen Ansatz wählen zu müssen, der oft __ der kleinste gemeinsame Nenner ist.

Elastizität

Ein Schlüsselkonzept beim Resilienz-Engineering ist das Schott. Wenn eine Komponente eines Systems Fehlschlägt, der Fehler jedoch nicht kaskadiert wird, können Sie das Problem isolieren und der Rest des Systems kann weiterarbeiten. Service-Grenzen werden zu Ihren offensichtlichen Schotten. Wenn bei einem monolithischen Dienst ____ ein Fehler auftritt, funktioniert alles nicht mehr. Mit einem monolithischen System können wir auf mehreren Maschinen laufen, um die Ausfallwahrscheinlichkeit zu reduzieren. Mit Microservices können wir jedoch Systeme erstellen, die den Totalausfall von Services handhaben und die Funktionalität entsprechend beeinträchtigen.

Skalierung

Mit einem großen monolithischen Service müssen wir alles gemeinsam skalieren. Ein kleiner Teil von Unseres Gesamtsystems ist in der Leistung eingeschränkt, aber wenn dieses Verhalten in einer Riesigen monolithischen Anwendung eingeschlossen ist, müssen wir die Skalierung alles als Ganzes behandeln. Mit Kleineren Diensten können wir einfach die Dienste skalieren, die skaliert werden müssen, sodass wir andere Teile des Systems mit kleinerer, weniger leistungsfähiger Hardware ausführen können.

Einfache Bereitstellung

Bei einer einzeiligen Änderung einer monolithischen Anwendung mit Millionen Zeilen muss die gesamte -Anwendung implementiert werden, um die Änderung freizugeben. Dies könnte eine große Auswirkung und eine hohe Risikobereitstellung sein. In der Praxis werden großflächige Bereitstellungen mit hohem Risiko ohnehin selten aus verständlichen Gründen passieren.

Mit Microservices können wir Änderungen an einem einzelnen Dienst vornehmen und ihn unabhängig vom Rest des Systems bereitstellen. Dadurch können wir unseren Code schneller implementieren. Wenn ein Problem auftritt, kann es schnell zu einem einzelnen Dienst isoliert werden, wodurch ein schnelles Rollback leicht zu erreichen ist.

Organisatorische Ausrichtung

Mithilfe von Microservices können wir unsere Architektur besser auf unser Unternehmen ausrichten und so die Anzahl der Mitarbeiter reduzieren, die an einer Codebase arbeiten, um die Größe und Produktivität des Teams zu erreichen. Wir können auch die Inhaberschaft von Diensten zwischen Teams wechseln, um zu versuchen, __ Personen, die an einem Dienst arbeiten, zusammen zu halten.

Zusammensetzbarkeit

Eines der Hauptversprechen von verteilten Systemen und serviceorientierten Architekturen besteht darin, dass Möglichkeiten zur Wiederverwendung von Funktionalität eröffnet werden. Mit Microservices können wir unsere Funktionalität auf unterschiedliche Weise für unterschiedliche Zwecke nutzen. Dies kann besonders wichtig sein, wenn wir darüber nachdenken, wie unsere Verbraucher unsere Software verwenden.

Optimierung für Austauschbarkeit

Wenn Sie in einer mittelgroßen oder größeren Organisation arbeiten, wissen Sie wahrscheinlich, dass in der Ecke ein großes, unangenehmes Altsystem sitzt. Derjenige, den niemand anfassen möchte. Das, das ist entscheidend für die Funktionsweise Ihres Unternehmens, das jedoch in irgendeiner Fortran -Variante geschrieben wird und nur auf Hardware läuft, die vor 25 Jahren das Ende ihres Lebens erreicht hat. Warum wurde es nicht ersetzt? Sie wissen warum: Es ist zu groß und riskant für einen Job.

Da unsere einzelnen Services klein sind, lassen sich die Kosten für den Ersatz durch eine bessere Implementierung oder gar das Löschen ganz erheblich einfacher verwalten.Cons.


Der wichtigste Nachteil von Microservices besteht darin, dass sie alle damit verbundenen Komplexitäten von verteilten Systemen aufweisen, und obwohl wir bereits viel über das Management verteilter Systeme gelernt haben, ist es immer noch schwierig. Wenn Sie aus monolithischer Systemperspektive ___ kommen, müssen Sie die __ Bereitstellung, das Testen und die Überwachung von ___ verbessern, um die Vorteile zu nutzen. Sie müssen Auch anders darüber nachdenken, wie Sie Ihre Systeme skalieren und sicherstellen, dass sie Belastbar sind. Seien Sie auch nicht überrascht, wenn Dinge wie verteilte Transaktionen oder CAP-Theorem Ihnen auch Kopfschmerzen bereiten!

Schlußbemerkungen


Nur zitieren aus Martin Fowler :

One reasonable argument we've heard is that you shouldn't start with a microservices architecture. Instead begin with a monolith, keep it modular, and split it into microservices once the monolith becomes a problem.

37
Ali Dehghani

Die Vorteile von Micro-Services sind, dass Ihre Anwendungen sehr gut skalierbar sind. Sie teilen Ihre Anwendung in kleine Dienste auf. Es ist schwer zu entscheiden, welche gebundenen Dienste Sie benötigen. Wenn Sie dies jedoch getan haben, können Sie bestimmte Dienste einfach auf mehrere Male skalieren (die Dienste, die tatsächlich am meisten ausgelastet sind), anstatt Ihre gesamte Anwendung zu vergrößern.

Ein weiterer Vorteil ist, dass es neuen Entwicklern leichter fällt, neue Funktionen für Ihre Anwendung zu erstellen, da alles in diese getrennten Dienste unterteilt ist -> Jeder Dienst hat eine eigene (kleine) Codebasis.

Der größte Nachteil bei der Verwendung von Microservices besteht natürlich darin, dass bei der Kommunikation zwischen den verschiedenen Diensten eine höhere Ausfallwahrscheinlichkeit besteht.

Die Verwendung von Microservices zahlt sich normalerweise erst dann aus, wenn Ihre Anwendung zu umfangreich wird, um als monolithische Anwendung beibehalten zu werden. Versuchen Sie, als monolithische Anwendung zu beginnen, aber halten Sie sich während der Entwicklung an die begrenzten Kontexte im Auge (versuchen Sie, sie so getrennt wie möglich zu halten.) Zu einem späteren Zeitpunkt können Sie zu Microservices wechseln.

7
Kaj

Vorteile

1. Dezentralisierte und entkoppelte Architektur, bei der Choreografie anstelle von Orchestrierung verwendet wird, werden Dienste basierend auf Publish-Subscribe erstellt und sind daher vollständig dezentralisiert

2. Machen Sie eine Sache und machen Sie es gut (Unix-Philosophie), fokussierter und einzigartiger mit sehr enger Funktionalität

3. Leichtigkeit, Parallelität und Lastverteilung zu haben, da sie aus Sicht des Geschäftsprozesses feiner ist

4.Statelessness mit einem stateful Microservice ist jedoch gültig, aber nicht das Ideal

5.Individuelle Datenspeicherung vereinfacht die Dienste, um den Datenfluss weiterhin zu verfolgen

6.Einfache und automatisierte Bereitstellung und Ermittlung durch Verwendung von auf Container-Engine basierenden Technologien wie Docker

7.Mehr Interoperabilität, wodurch Dienste flexibler werden können, wenn sie einen neuen/aktuellen Dienst oder ein neues Protokoll akzeptieren/löschen

8.Voll kompatibel mit Representational State Transfer (REST), mit dem zustandslose Dienste erstellt werden können

9.Geeignet für diskrete Systeme, zum Beispiel für Batch-Automatisierungsprozesse

Nachteile 1.Dienstleistungssynchronisation, damit Dienste kooperativ synchronisiert werden

2.Schwierig, systematische Probleme zu finden, zum Beispiel ist es schwieriger, ein Problem in einer Kette von Geschäftsaktivitäten zu finden, wenn ein logischer Fehler im Prozess auftritt, und es ist erforderlich, mehrere Protokolldateien in einem Teil zusammenzufassen

3. Automatisierte Bereitstellung und Erkennung ist ein Muss, wenn die Anzahl der Microservices mehr als einige beträgt

4.Schwierig, die richtige Service-Granularität zu finden, die das gesamte System aufgrund von überlasteter Netzwerkkommunikation und Fehlerverhalten in die Instabilität führen kann

5.Herausforderungen, wenn das Geschäftssystem nicht diskret genug ist, wie die Prozesskontrolle

6.Entwicklung eines automatisierten Tests ist erheblich schwieriger als monolithische Systeme

Im Folgenden finden Sie eine Reihe von Artikeln, die über Microservices in Code-Project veröffentlicht wurden. Sie können Ihre Fragen lesen und kommentieren, wenn Sie möchten.

https://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-Ihttps://www.codeproject.com/Articles/1264113/Dive-into-Microservices -Architektur-Teil-IIhttps://www.codeproject.com/Articles/1264113/Dive-into-Microservices-Architecture-Part-III

0
Aydin Homay