Was sind Microservices?

Leslie Tsang

Leslie Tsang

December 14, 2022

Technology

Um es klar zu sagen, gibt es keine universelle Architektur; es gibt auch keine beste und schlechteste Architektur, nur diejenige, die am besten zu Ihrem Geschäft passt.

Einführung in Microservices

Die Microservices-Architektur ist eine flexible und skalierbare Softwarearchitektur, die darauf abzielt, große Softwaresysteme einfacher zu entwickeln, bereitzustellen und zu warten.

Die grundlegende Idee hinter Microservices besteht darin, ein großes Softwaresystem in mehrere, relativ unabhängige Dienste aufzuteilen, wobei jeder Dienst auf eine einzige Funktionalität fokussiert ist.

Dienste in einer Microservices-Architektur sind oft Prozesse, die über ein Netzwerk kommunizieren, um ein Ziel zu erreichen, wobei technologieunabhängige Protokolle wie HTTP oder gRPC verwendet werden. Dies ermöglicht es, verschiedene Dienste nach Bedarf zu kombinieren, um unterschiedliche Geschäftsanforderungen zu erfüllen.

Entwicklung der Softwarearchitektur

Beginnen wir mit der Verwendung der monolithischen Architektur als Startarchitektur. Sehen wir, welche Probleme mit verschiedenen Architekturen auftreten, wenn das Geschäft im Laufe der Zeit wächst.

Monolithische Architektur

Die monolithische Architektur ist so konzipiert, dass sie eigenständig ist, wobei die Komponenten oder Funktionen der Anwendung eng miteinander verbunden sind, im Gegensatz zu locker gekoppelten modularen Anwendungen. Es gibt viele Vorteile bei der Verwendung der monolithischen Architektur, weshalb viele Anwendungen immer noch mit diesem Entwicklungsparadigma erstellt werden.

Übersicht über die Bereitstellung einer typischen monolithischen Anwendung. Dieses Design macht die Bereitstellung zweifellos einfacher, aber Rolling Updates sind schwierig, was katastrophal sein könnte, wenn ein Modul ausfällt.

monoliths-deploy.png

Beispielsweise könnten monolithische Anwendungen in Bezug auf den Durchsatz besser abschneiden als modulare. Da jede Komponente und der zugehörige Code vorhanden sein müssen, damit die Anwendung ausgeführt oder kompiliert werden kann, sind monolithische Anwendungen möglicherweise einfacher zu testen und zu debuggen.

Monolithische Anwendungen waren in der Vergangenheit erfolgreich. Im Cloud-Zeitalter sind jedoch immer mehr Menschen von der monolithischen Architektur frustriert, da immer mehr monolithische Anwendungen in der Cloud-Umgebung bereitgestellt werden. Änderungszyklen sind miteinander verbunden – eine Änderung an einem kleinen Teil der Anwendung erfordert, dass der gesamte Monolith neu erstellt und bereitgestellt wird.

Entwickler müssen nach jedem Update die gesamte Codebasis neu kompilieren und die gesamte monolithische Anwendung neu installieren, nicht nur den geänderten Teil. Dies macht kontinuierliche oder routinemäßige Bereitstellungen schwierig, was wiederum die Agilität der Anwendung und des Teams verringert.

monoliths-deploy-scale.png

Es kann schwierig sein, eine monolithische Anwendung im Laufe der Zeit modular in guter Struktur zu halten, was es schwierig macht, Änderungen zu pflegen, die nur ein internes Modul betreffen sollten. Die Skalierung erfordert die Skalierung der gesamten Anwendung, nicht nur der Teile, die mehr Ressourcen benötigen.

Serviceorientierte Architektur

Die serviceorientierte Architektur (SOA) ist eine Softwarearchitektur, die sich auf eine Anwendung bezieht, die aus diskreten und locker gekoppelten Softwareagenten besteht, die eine erforderliche Funktion ausführen, und die eine Möglichkeit definiert, Dienstschnittstellen zu verwenden, um Softwarekomponenten wiederverwendbar zu machen. Diese Schnittstellen nutzen weit verbreitete Kommunikationsprotokolle, sodass sie schnell zu neuen Anwendungen hinzugefügt werden können, ohne eine umfangreiche Integration zu erfordern.

Übersicht über eine typische SOA-Bereitstellung. Die Auswirkungen eines einzelnen Dienstausfalls werden mit einer solchen Architektur effektiv reduziert und die Iterationsrate eines einzelnen Dienstes erhöht.

Eine solche Architektur ist besser geeignet, um die Teamerweiterung zu verwalten, wodurch jedes Team sich auf den spezifischen Dienst selbst konzentrieren kann. Befreien Sie das Team von der schweren Last der Vergangenheit, damit es sich auf eine Aufgabe konzentrieren und sie richtig ausführen kann.

SOA-with-ESB-deploy.png

Die folgenden Vorteile von SOA gegenüber der monolithischen Architektur:

  • Bessere Wartbarkeit: Jeder Dienst ist eine eigenständige Einheit, was Rolling Updates und die Wartung einfach und risikofrei für andere Dienste macht.
  • Höhere Zuverlässigkeit: Große Codeblöcke, wie sie in der monolithischen Architektur verwendet werden, sind schwieriger zu debuggen und zu testen als Dienste. Folglich werden SOA-basierte Produkte zuverlässiger.
  • Parallele Entwicklung: Eine serviceorientierte Architektur fördert die Parallelität im Entwicklungsprozess, da sie Schichten hat. Es ist möglich, unabhängige Dienste gleichzeitig zu erstellen und abzuschließen.

Microservice-Architektur

Die Microservice-Architektur ist eine Form der SOA, die sich auf den Aufbau einer Reihe autonomer Komponenten konzentriert, die eine Anwendung bilden. Im Gegensatz zu monolithischen Anwendungen, die als ein einziges unteilbares Ganzes gebaut werden, bestehen Microservice-Anwendungen aus mehreren unabhängigen Komponenten, die mit APIs zusammengefügt werden.

Der Umfang der Architektur ist der Schlüsselunterschied zwischen SOA und Microservices. Im Gegensatz zu einer Microservice-Architektur, die auf diskreten Diensten basiert, die unabhängig voneinander arbeiten können, ermöglicht ein SOA-Modell, dass Dienste oder Module im gesamten Unternehmen gemeinsam genutzt und wiederverwendet werden können. Mit anderen Worten, während Microservices auf Anwendungen fokussiert sind, hat SOA einen Unternehmensumfang.

Weitere Unterschiede sind in der folgenden Tabelle zusammengefasst:

SOAMicroservices
ArchitekturDienste werden auf Unternehmensebene wiederverwendet und geteiltDienste sind entkoppelt und arbeiten unabhängig
GranularitätRelativ große, modulare DiensteKleinere, flexiblere Dienste, die einem spezifischen Zweck oder einer Funktion des Unternehmens dienen
KommunikationESBAPI
KopplungRessourcenteilung/lockere KopplungBegrenzter Kontext
InteroperabilitätUnterstützt mehrere Nachrichtenprotokolle wie Simple Object Access Protocol (SOAP), Advanced Messaging Queuing Protocol (AMQP) und Microsoft Messaging Queuing (MMQ)Verwendet leichtgewichtige, sprachunabhängige Nachrichtenprotokolle wie HTTP, Representational State Transfers (REST) oder Java Messaging Service (JMS)
DatenverwaltungGemeinsame Datenverwaltung im gesamten Unternehmen aufgrund der KomponententeilungKeine konsistente Datenverwaltung zwischen Teams aufgrund der unabhängigen Natur der Dienste
SpeicherEinzelne Datenspeicherschicht, die von allen Diensten innerhalb einer bestimmten Anwendung gemeinsam genutzt wirdUnabhängiger Datenserver oder Datenbank für die Datenspeicherung für jeden Dienst, wie erforderlich

Übersicht über eine typische Microservice-Bereitstellung

microservice-deploy.png

Skalierungsstrategien für monolithische Architektur und Microservice-Architektur

Monoliths-and-microservices.png

Um mehr im Detail zu lesen: https://martinfowler.com/articles/microservices.html

Im Vergleich zur monolithischen Architektur ist die Microservice-Architektur auch flexibler für iterative Entwicklungsmethoden und Agile-Methoden. Aufgrund der lockeren Interaktion zwischen den verschiedenen Komponenten sind sie auch skalierbarer und können separat getestet werden. Darüber hinaus haben Module ihre eigenen Datenbanken, kommunizieren miteinander und beschleunigen den Programmstart.

Warum Microservices benötigt werden

Die Nutzung von Microservices kann die Effektivität des Entwicklungsbereitstellungszyklus erheblich steigern und die Agilität des Prozesses erhöhen. Die Kombination von DevOps und Microservices beschleunigt die Bereitstellung von Änderungen und neuen Funktionen. Microservices können schneller entwickelt werden als typische groß angelegte Softwareentwicklungsprojekte, die eine monolithische Anwendung beinhalten. Es ist einfacher und schneller, Änderungen zu verwalten.

Die Änderung in Microservices wird flüssiger und reibungsloser sein als in monolithischen Anwendungen. Es gibt keine Wasserfälle im Microservice-Entwicklungsprozess, wie Sie es bei einer monolithischen Anwendung haben. Jeder Microservice ist unabhängig und kann mit jeder Programmiersprache oder Konstruktion entwickelt werden.

Ausfälle in Microservices sind auch weniger schwerwiegend als Ausfälle in größeren Systemen. Ein Ausfall in einem Bereich einer monolithischen Anwendung hat in der Regel erhebliche negative Auswirkungen auf das gesamte System. In einer Microservice-Architektur können Probleme schneller und einfacher gelöst werden. Sie erkennen es, isolieren es und kompensieren es. Wenn Ihre Architektur Microservices verwendet, können Sie die Microservices skalieren, um eine Leistungsbarriere zu umgehen. Der operative Wasserfall einer monolithischen Anwendung kann vermieden werden, indem schnell eine neue Version der fehlerhaften Microservices erstellt wird.

Die Vorteile von Microservices

Die Vorteile von Microservices gegenüber traditionellen Architekturen umfassen Folgendes.

  • Modularität: Ein großes Softwaresystem wird in mehrere relativ unabhängige Dienste aufgeteilt, von denen jeder für die Erfüllung einer spezifischen Funktion verantwortlich ist. Dies ermöglicht es, verschiedene Dienste nach Bedarf zu kombinieren, um unterschiedliche Geschäftsanforderungen zu erfüllen.
  • Skalierbarkeit: Ein wichtiger Vorteil der Microservice-Architektur ist die Skalierbarkeit. Da jeder Dienst relativ unabhängig ist, ist es möglich, jeden Dienst dynamisch nach Bedarf zu skalieren. Dies ermöglicht es, besser mit Schwankungen im Geschäftsverkehr umzugehen.
  • Bereitstellbarkeit: Die Microservice-Architektur ermöglicht es, jeden Dienst unabhängig und flexibel bereitzustellen. Dies ermöglicht es, neue Funktionen schneller bereitzustellen und ermöglicht eine schnelle Iteration, ohne das Gesamtsystem zu beeinträchtigen.
  • Einfach zu erweitern: Die Microservice-Architektur verleiht jedem Dienst einzelne Verantwortlichkeiten und Funktionen. Unter einer solchen Architektur sind Microservices einfacher zu aktualisieren und neu zu konfigurieren als Module in traditionellen Softwarearchitekturen, und der Auswirkungsradius eines einzelnen Dienstausfalls ist beherrschbar.
  • Einfach zu warten: Die Microservice-Architektur macht jeden Dienst kleiner und verantwortlich für die Ausführung nur spezifischer Funktionen. Dies macht die Wartung einfacher und ermöglicht eine schnellere Fehlerbehebung.
  • Technologische Heterogenität: Die Microservice-Architektur macht jeden Dienst nicht mehr auf einen bestimmten Technologie-Stack beschränkt. Die Dateninteraktion zwischen Diensten kann über standardisierte Schnittstellen realisiert werden, und der am besten geeignete Technologie-Stack für das aktuelle Dienstszenario kann für die Dienstentwicklung verwendet werden, um die optimale Lösung zu erreichen.

Zusammenfassung

Softwarearchitekturen haben sich entwickelt, um mit sich ändernden Anforderungen umzugehen, oft unter Einbeziehung neuer Anliegen. Die Microservice-Architektur wird im Cloud-nativen Zeitalter immer beliebter. Um eine bessere Microservice-Architektur zu erstellen, besuchen Sie bitte APISIX, das beste API-Gateway, und API7.ai für weitere kommerzielle Unterstützung.

Tags: