Close

Microservices: understanding what it is and its benefits

Noch vor Kurzem war die bevorzugte Methode zur Entwicklung von Softwareanwendungen die Nutzung einer monolithischen Architektur, d. h. einer einzelnen, autonomen Einheit. Dieser Ansatz funktionierte für viele Entwickler gut, bis die Komplexität der Anwendungen zunahm. Wenn in einem monolithischen System an einem kleinen Codeabschnitt Änderungen vorgenommen werden, muss das gesamte System neu erstellt werden. Dies ist mit Tests am gesamten System und dem Deployment einer völlig neuen Version der Anwendung verbunden.

Dann kamen Microservices ins Spiel – ein Ansatz, der Softwaresysteme in kleinere Einheiten aufteilt, die autonom entwickelt und bereitgestellt werden. Die Entwicklung von Microservice-Architekturen wurde durch die DevOps-Bewegung vorangetrieben, die nach der häufigen Bereitstellung von Updates wie neuen Funktionen, der Behebung von Bugs und Sicherheitsverbesserungen strebt. In vielen Fällen bot dies Unternehmen auch die Möglichkeit, mit modernen Programmiersprachen und Updates an einem Technologie-Stack Legacy-Anwendungen neu zu schreiben.

Microservices sind eine Ansammlung kleiner Einheiten, durch die kontinuierlich große, komplexe Anwendungen realisiert und bereitgestellt werden.

Was sind Microservices?


Eine Microservice-Architektur, die auch einfach als "Microservices" bezeichnet wird, ist ein Ansatz, bei dem eine Anwendung aus einer Reihe von unabhängig bereitstellbaren Services besteht, die dezentral und autonom entwickelt werden. Diese Services sind lose verbunden, können unabhängig voneinander bereitgestellt werden und sind leicht zu warten. Eine monolithische Anwendung wird als einzelne unteilbare Einheit erstellt, während Microservices diese Einheit in eine Ansammlung unabhängiger Einheiten aufteilen, die zum großen Ganzen beitragen. Microservices sind ein wesentlicher Bestandteil von DevOps, schließlich bilden sie die Grundlage für Continuous-Delivery-Praktiken, die Teams eine schnelle Anpassung an Benutzeranforderungen ermöglichen.

Abbildung: Microservices

Ein Microservice ist ein Webservice, der für ein Teilstück der Domain-Logik verantwortlich ist. Mehrere Microservices bilden zusammen eine Anwendung, wobei jeder von ihnen eine Funktion für eine Domain bereitstellt. Microservices interagieren mithilfe von APIs wie REST oder gRPC miteinander, haben jedoch keine Kenntnisse über die interne Funktionsweise der anderen Services. Dieses harmonische Zusammenspiel von Microservices ist eine Microservice-Architektur.

Eine Microservice-Architektur ermöglicht Entwicklern, sich in kleineren Teams zu organisieren, die auf verschiedene Services spezialisiert sind, mit unterschiedlichen Stacks und entkoppelten Deployments. Beispielsweise basiert Jira auf mehreren Microservices, die jeweils spezifische Funktionen bereitstellen, darunter das Suchen nach Vorgängen, Anzeigen von Vorgangsdetails, Kommentieren, Weitergeben von Vorgängen und mehr.

Merkmale von Microservices


Auch wenn es keine formale Definition für eine Microservice-Architektur gibt, haben Microservices einige gemeinsame Muster oder Merkmale, die du kennen solltest.

In einer Microservice-Architektur kann jede Komponente entwickelt, bereitgestellt, betrieben, geändert und neu bereitgestellt werden, ohne die Funktion anderer Services oder die Integrität einer Anwendung zu beeinträchtigen.

Vorteile von Microservices


Microservices provide many advantages. They simplify development and project management. Sometimes, they may eliminate the need for separate operations teams since developers can handle operations for the microservices they build. 

Some other benefits of microservices include:

Abbildung: Waage

Flexible Skalierung

Microservices sind absichtlich dezentralisiert und können in Clustern bereitgestellt werden. Dies ermöglicht eine dynamische horizontale Skalierung über die Servicegrenzen hinweg. Wenn ein Microservice die Grenzen seiner Belastbarkeit erreicht, können neue Instanzen dieses Service schnell im zugehörigen Cluster bereitgestellt werden, um Abhilfe zu schaffen.

Abbildung: Agile

Flexibilität

Da die Services in einer Microservice-Architektur in der Regel von kleinen, unabhängigen Teams entwickelt werden, fördert dies die Anwendung von agilen Praktiken. So sind die Teams in der Lage, unabhängig zu arbeiten und schnell zu handeln, wodurch die Entwicklungszyklen verkürzt werden.

Abbildung eines Werkzeugkasten

Flexible Technologie

Bei der Nutzung einer Microservice-Architektur müssen Teams nicht unbedingt einem festgelegten Ansatz mit einer Toolkette folgen, sondern haben die Möglichkeit, ihre bevorzugten Tools auszuwählen.

Abbildung: Bausteine

Häufige Releases

Ein wichtiger Vorteil von Microservices sind die häufigen und schnelleren Release-Zyklen. Als ein wichtiges Element von Continuous Integration und Continuous Delivery (CI/CD) ermöglichen Microservices Teams, mit neuen Funktionen zu experimentieren und Änderungen rückgängig zu machen, wenn etwas nicht funktioniert. Auf diese Weise kann Code einfacher aktualisiert und die Einführung von neuen Funktionen beschleunigt werden.

Herausforderungen der Microservice-Architektur


Microservices-based architecture has many benefits, but it also comes with challenges. 

One challenge of microservices is that the independent services generate their logs. This is a disadvantage compared to monoliths' centralized logs, which provide a single source of truth for developers and operations teams. Monitoring and infrastructure management are also more complicated since many moving pieces exist. Testing and debugging are challenging because, unlike monoliths, no integrated development environment (IDE) exists.

Atlassian's Compass can help with all these challenges. Compass facilitates collaboration and allows companies to manage the complexities of distributed architectures as they scale. It does this by bringing the disconnected information together in a central, searchable location.

Unkontrollierte Entwicklung

Mit dem Wechsel von einer monolithischen Architektur zu Microservices nimmt die Komplexität zu, da es an mehreren Orten mehr Services gibt, die von mehreren Teams erstellt werden. Das macht es schwierig herauszufinden, welchen Bezug verschiedene Komponenten zueinander haben, wer für eine bestimmte Komponente zuständig ist oder wie verhindert werden kann, dass abhängige Komponenten beeinträchtigt werden. Wenn die unkontrollierte Entwicklung nicht eingedämmt wird, führt dies zu einer langsameren Entwicklungsgeschwindigkeit und einer schlechten Betriebsleistung. Ein zunehmend komplexes System erfordert ein erfahrenes Operations-Team, das die kontinuierlichen neuen Deployments und häufigen Änderungen in der Architektur verwaltet.

Keine klaren Zuständigkeiten

Bei der Nutzung einer Microservice-Architektur entsteht Verwirrung darüber, wer wofür zuständig ist. Ein DevOps-Team kann eine Kombination aus APIs, Komponentenbibliotheken, Überwachungstools und Docker-Images für Benutzer ausführen, um eine Anwendung bereitzustellen. Es ist wichtig, einen Einblick in Informationen zu den Komponenten zu haben, einschließlich ihrer Besitzer und Ressourcen und den sich entwickelnden Beziehungen zwischen anderen Komponenten. Damit alle Beteiligten das zum Verständnis eines Produkts erforderliche Wissen leicht finden können, ist eine klare Kommunikation und Koordination zwischen den zahlreichen Teams erforderlich.

Exponentielle Infrastrukturkosten

Jeder neue Microservice, der dem Produktions-Deployment hinzufügt wird, verursacht eigene Kosten für Testsuite, Deployment-Playbooks, Hosting-Infrastruktur, Überwachungstools und mehr.

Zusätzlicher organisatorischer Aufwand

Ein zusätzliches Maß an Kommunikation und Zusammenarbeit ist erforderlich, um Updates und Schnittstellen zwischen Microservice-Architekturteams zu koordinieren.

Fehlerbehebung

Es kann schwierig sein, Fehler in einer Anwendung zu beheben, die mehrere Microservices mit jeweils eigenen Protokollen enthält. Ein einzelner Geschäftsprozess kann auf mehreren Computern zu unterschiedlichen Zeiten ausgeführt werden, wodurch die Fehlerbehebung noch komplizierter wird.

Reaktion auf Vorfälle

Es ist wichtig, Informationen zur Incident Response für einen Microservice zu haben, wie z. B., wer den Microservice nutzt, wo und wie der Microservice bereitgestellt wurde und an wen du dich wenden kannst, wenn etwas schiefgeht.

Microservices und DevOps: ein unzertrennliches Paar


Angesichts der zunehmenden Komplexität und der Abhängigkeiten zwischen Microservices wird die Anwendung von DevOps-Praktiken zur Automatisierung des Deployments, der Überwachung und des Lebenszyklus als wesentlicher Bestandteil von Microservice-Architekturen betrachtet. Aus diesem Grund werden Microservices oft als erster Schritt zur Einführung einer DevOps-Kultur angesehen, die Folgendes ermöglicht:

  • Automatisierung
  • Bessere Skalierbarkeit
  • Verwaltbarkeit
  • Flexibilität
  • Beschleunigung von Auslieferung und Deployment

Wichtige Technologien und Tools für eine Microservice-Architektur


Ein Container ist vereinfacht nichts anderes als ein Paket, in dem eine Anwendung und all ihre Abhängigkeiten verpackt sind, sodass sie einfach und konsistent bereitgestellt werden kann. Da Container kein eigenes Betriebssystem enthalten, sind sie kleiner und leichter als herkömmliche virtuelle Maschinen. Sie lassen sich schneller hoch- und wieder herunterfahren, sodass sie perfekt zu den kleineren Services in Microservice-Architekturen passen.

Angesichts der hohen Anzahl von Services und Containern ist die Orchestrierung und Verwaltung großer Gruppen von Containern unerlässlich. Docker ist eine beliebte Containerisierungs-Plattform und Container-Laufzeit, mit deren Hilfe Entwickler Container erstellen, bereitstellen und ausführen können. Doch mit Docker allein wird die Ausführung und Verwaltung von Containern im größeren Maßstab eine Herausforderung. Hier schaffen Kubernetes und andere Lösungen wie Docker Swarm, Mesos und HashiCorp Nomad Abhilfe.

Die Containerisierung und das Deployment von Containern ist ein neues Muster der verteilten Infrastruktur. Docker and Kubernetes verpacken einen Service in einen kompletten Container, der schnell bereitgestellt und verworfen werden kann. Diese neuen Infrastrukturtools ergänzen die Microservice-Architektur. Microservices können containerisiert und einfach mit einem Container-Management-System bereitgestellt und verwaltet werden.

Was sind Microservices?


Eine Microservice-Architektur, die auch einfach als "Microservices" bezeichnet wird, ist ein Ansatz, bei dem eine Anwendung aus einer Reihe von unabhängig bereitstellbaren Services besteht, die dezentral und autonom entwickelt werden. Diese Services sind lose verbunden, können unabhängig voneinander bereitgestellt werden und sind leicht zu warten. Eine monolithische Anwendung wird als einzelne unteilbare Einheit erstellt, während Microservices diese Einheit in eine Ansammlung unabhängiger Einheiten aufteilen, die zum großen Ganzen beitragen. Microservices sind ein wesentlicher Bestandteil von DevOps, schließlich bilden sie die Grundlage für Continuous-Delivery-Praktiken, die Teams eine schnelle Anpassung an Benutzeranforderungen ermöglichen.

Abbildung: Microservices

Ein Microservice ist ein Webservice, der für ein Teilstück der Domain-Logik verantwortlich ist. Mehrere Microservices bilden zusammen eine Anwendung, wobei jeder von ihnen eine Funktion für eine Domain bereitstellt. Microservices interagieren mithilfe von APIs wie REST oder gRPC miteinander, haben jedoch keine Kenntnisse über die interne Funktionsweise der anderen Services. Dieses harmonische Zusammenspiel von Microservices ist eine Microservice-Architektur.

Eine Microservice-Architektur ermöglicht Entwicklern, sich in kleineren Teams zu organisieren, die auf verschiedene Services spezialisiert sind, mit unterschiedlichen Stacks und entkoppelten Deployments. Beispielsweise basiert Jira auf mehreren Microservices, die jeweils spezifische Funktionen bereitstellen, darunter das Suchen nach Vorgängen, Anzeigen von Vorgangsdetails, Kommentieren, Weitergeben von Vorgängen und mehr.

Zukunft der Microservices


What tools do people commonly use in microservices?

Businesses often use containerization tools such as Kubernetes and Docker. They also frequently use API gateways between microservices and their clients. These gateways perform API traffic functions such as authentication, access control, and load balancing.

How do microservices differ from monolithic architecture?

Monoliths are large codebases that function as one system. They require system downtime for updates and debugging. Microservices architectures are distributed applications with smaller, independent chunks of functionality. Developers can upgrade, improve, and debug these modules without taking the entire application offline. This simplifies scaling and aids development velocity.

How do microservices impact DevOps?

Those who understand DevOps know that continuous integration and continuous delivery (the DevOps CI/CD pipeline) are the mainstays of DevOps methodologies. The modular nature of microservices aligns perfectly with this approach. Microservices empower developers to swiftly create, test, and deploy small, frequent releases.

Join the Atlassian Community for more microservices articles and discussions.

Navigation deiner Microservices mit Compass

Compass von Atlassian hilft dir, bei der Arbeit mit Microservices die Komplexität einer verteilten skalierbaren Architektur im Griff zu behalten. Die Lösung ist eine erweiterbare Developer-Experience-Plattform, die unzusammenhängende Informationen über die gesamten Entwicklungsergebnisse und die Teamzusammenarbeit an einem zentralen, durchsuchbaren Ort zusammenführt. Compass hilft dir nicht nur dabei, mit dem Komponentenkatalog die ungebremste Verbreitung von Microservices einzudämmen. Die Lösung kann dich auch dabei unterstützen, Best Practices zu erstellen und den Zustand deiner Software mit Scorecards zu messen. Sie gibt dir mithilfe von Erweiterungen, die in die Atlassian Forge-Plattform integriert sind, Daten und Einblicke in die gesamte DevOps-Toolkette an die Hand.

Abbildung: Microservices in Compass