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.
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.
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.
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:
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.
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.
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.
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.
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.
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.