Microservices sind ein heißes Thema in der Softwareentwicklung, und das aus gutem Grund. Durch die Aufteilung einer monolithischen Anwendung in kleinere, unabhängig voneinander einsetzbare Dienste können Teams die Geschwindigkeit und Flexibilität ihres Entwicklungsprozesses erhöhen. Die Bereitstellung und Verwaltung von Microservices in einer Produktionsumgebung ist jedoch eine Herausforderung. Deshalb ist es wichtig, Best Practices zu befolgen, um die Stabilität und Zuverlässigkeit Ihres Microservices-basierten Systems zu gewährleisten.
Führende Unternehmen haben diese Praktiken getestet und die Leistung und Zuverlässigkeit von Microservices-basierten Systemen erheblich verbessert. Lesen Sie also weiter, wenn Sie das Beste aus Ihren Microservices herausholen wollen!
- Warum Microservices
- Best Practice Nr. 1: Definieren Sie klare Verantwortlichkeiten und Zuständigkeiten für jeden Microservice
- Option 1: Individuelle Verantwortung für eine Reihe von Services
- Option 2: Individuelle Verantwortung für eine Reihe von Features
- Best Practice Nr. 2: Versionierung und semantische Versionierung für alle Microservices verwenden
- Best Practice Nr. 3: Verwenden Sie eine CI/CD-Pipeline für automatisiertes Testen und Deployment
- Best Practice Nr. 4: Verwenden Sie Container und Container-Orchestrierungstools:
- Best Practice Nr. 5: Verwenden Sie ein API-Gateway, um den externen Zugriff auf Microservices zu verwalten
- Best Practice Nr. 6: Überwachen Sie den Zustand und die Leistung von Microservices:
- Best Practice Nr. 7: Implementieren Sie eine rollierende Bereitstellungsstrategie:
- Best Practice Nr. 8: Verwenden Sie ein zentrales Protokollierungs- und Überwachungssystem
- Best Practice Nr. 9: Verwenden Sie Schutzschalter und Abschottungen, um Kaskadenausfälle zu verhindern
- Best Practice Nr. 10: Implementierung einer angemessenen Teststrategie
- Fazit
Warum Microservices
Microservices werden für Unternehmen verwendet, die von traditionellen Lizenzierungs- zu Abonnementmodellen, wie SaaS-Lösungen, übergehen. Dies ist oft notwendig, wenn von einer On-Premise-Bereitstellung zu einer globalen, öffentlichen Cloud-Bereitstellung mit elastischen Funktionen übergegangen wird. Unternehmen wie Atlassian haben ihre Produkte in Microservices umgewandelt und in der Cloud bereitgestellt, um ihre Anwendungen weltweit verfügbar zu machen. Microservices sind jedoch komplex und nicht für jedes Unternehmen geeignet, vor allem nicht für Startups in der Anfangsphase.
Für Unternehmen ist der Übergang von einem traditionellen Lizenzmodell zu einem abonnementbasierten Modell von entscheidender Bedeutung, um in der digitalen Landschaft von heute bestehen zu können. Die Vorteile dieser Umstellung lassen sich am Erfolg von SaaS-Lösungen wie Google Mail ablesen, bei denen die Kunden nur eine geringe monatliche Gebühr für den Zugang zu einer breiten Palette von Funktionen zahlen.
Dieses Konzept lässt sich auch auf Microservices anwenden und macht sie zu einem unverzichtbaren Werkzeug für Unternehmen, die diesen Wandel vollziehen wollen. Nehmen wir zum Beispiel Atlassian und sein Produkt Jira. Bisher wurde Jira in On-Premise-Umgebungen eingesetzt, doch für die Umstellung auf ein abonnementbasiertes Modell benötigte das Unternehmen eine globale Reichweite, die nur in der Public Cloud erreicht werden kann. Dieser Schritt ermöglichte Elastizität, so dass die Anwendung je nach Bedarf horizontal skaliert und ohne Einschränkungen an Laständerungen angepasst werden konnte.
Best Practice Nr. 1: Definieren Sie klare Verantwortlichkeiten und Zuständigkeiten für jeden Microservice
Einer der Hauptvorteile von Microservices besteht darin, dass sie es Teams ermöglichen, unabhängiger zu arbeiten und schneller voranzukommen. Diese Unabhängigkeit kann jedoch auch zu Verwirrung darüber führen, wer für die einzelnen Dienste verantwortlich ist.
Deshalb ist es wichtig, die Verantwortlichkeit für jeden Microservice zu definieren. Das bedeutet, dass die Verantwortung einem bestimmten Team oder einer bestimmten Person zugewiesen wird und dass dieses Team oder diese Person für die Entwicklung, die Wartung und den Support des Dienstes verantwortlich ist.
Durch die Festlegung klarer Zuständigkeiten und Verantwortlichkeiten können Sie sicherstellen, dass jeder Microservice von einem engagierten Team betreut wird, das sich auf seinen Erfolg konzentriert. Darüber hinaus hilft die IT dabei, Probleme wie Verzögerungen bei der Behebung von Fehlern oder der Implementierung neuer Funktionen zu vermeiden, da klar ist, wer für die Lösung dieser Probleme verantwortlich ist.
Doch wie legen Sie die Verantwortlichkeiten für Ihre Microservices fest?
Option 1: Individuelle Verantwortung für eine Reihe von Services
Ein Ansatz ist die Verwendung eines Service-Ownership-Modells, bei dem jedes Team oder jeder Einzelne für eine bestimmte Gruppe von Services verantwortlich ist. Jedes SCRUM-Team liefert eine Lösung, einen Satz von Komponenten (Microservices). Mit Option 1 wird sichergestellt, dass jeder Dienst einen eigenen Verantwortlichen hat, der für seinen Erfolg verantwortlich ist.
Option 2: Individuelle Verantwortung für eine Reihe von Features
Eine weitere Option ist die Verwendung eines Feature-Ownership-Modells, bei dem jedes Team oder jeder Einzelne für die Entwicklung und Pflege eines bestimmten Satzes von Features über mehrere Services hinweg verantwortlich ist. Option 2 kann eine gute Möglichkeit sein, wenn Sie nur eine kleine Anzahl von Diensten haben oder wenn die Funktionen, die Sie entwickeln, mehrere Dienste umfassen.
Unabhängig davon, welchen Ansatz Sie wählen, müssen Sie sicherstellen, dass die Zuständigkeiten und Verantwortlichkeiten klar definiert sind und an alle Teammitglieder weitergegeben werden. So sollte beispielsweise jeder Entwickler für ein Feature, die Bereitstellung und den Hypercare-Support verantwortlich sein. Auf diese Weise wird sichergestellt, dass jeder weiß, wer für den jeweiligen Microservice verantwortlich ist, und Verwirrung und Verzögerungen im Entwicklungsprozess können vermieden werden.
Best Practice Nr. 2: Versionierung und semantische Versionierung für alle Microservices verwenden
Bei der Arbeit mit Microservices ist es wichtig, den Überblick über die verschiedenen Versionen der einzelnen Dienste zu behalten. So können Sie bei Problemen mit einer neuen Version zu einer früheren Version zurückkehren und sicherstellen, dass im gesamten System die richtige Version eines jeden Dienstes verwendet wird.
Eine Möglichkeit, dies zu erreichen, ist die Verwendung von Versionierung für Ihre Microservices. Bei der Versionierung wird jeder Version eines Microservices eine Versionsnummer zugewiesen, z. B. 1.0, 1.1 usw. Auf diese Weise können Sie die verschiedenen Versionen Ihrer Microservices leicht nachverfolgen.
Es ist jedoch auch eine gute Idee, die semantische Versionierung für Ihre Microservices zu verwenden. Bei der semantischen Versionierung wird eine dreiteilige Versionsnummer verwendet (z. B. 1.2.3), wobei die Teile jeweils für die Hauptversion, die Nebenversion und die Patch-Nummer stehen. Die Hauptversion wird bei signifikanten Änderungen erhöht, die Nebenversion bei neuen abwärtskompatiblen Funktionen und die Patch-Nummer bei Fehlerbehebungen und anderen kleineren Änderungen.
Die semantische Versionierung kann es einfacher machen, die Auswirkungen einer neuen Version zu verstehen, und sie kann auch dazu beitragen, dass im gesamten System die richtige Version jedes Dienstes verwendet wird. Daher ist es eine gute Idee, sowohl die Versionierung als auch die semantische Versionierung für Ihre Microservices zu verwenden, um sicherzustellen, dass Sie ein klares und umfassendes Verständnis für die verschiedenen Versionen der einzelnen Services haben.
Zum Beispiel sollte das gesamte Mono-Repository mit einer Reihe von Microservices für eine Geschäftsdomäne mit einem semver2-Tag versioniert werden. Das Tag könnte in Form eines git annotated tag vorliegen, was ein Objekt in Git ist.
Best Practice Nr. 3: Verwenden Sie eine CI/CD-Pipeline für automatisiertes Testen und Deployment
Sind Sie es leid, Ihre Microservices manuell zu testen und bereitzustellen? Dann ist es an der Zeit, den Einsatz einer CI/CD-Pipeline (Continuous Integration and Delivery) in Betracht zu ziehen.
Eine CI/CD-Pipeline ist eine Reihe von automatisierten Prozessen, die das Testen, Bereitstellen und Freigeben Ihrer Microservices übernehmen. Sie ermöglicht es Ihnen, viele Aufgaben im Entwicklungs- und Bereitstellungsprozess zu automatisieren, z. B. das Erstellen, Testen und Bereitstellen Ihres Codes. Auf diese Weise können Sie den Entwicklungsprozess beschleunigen und die Zuverlässigkeit Ihres auf Microservices basierenden Systems verbessern.
Für das Einrichten einer CI/CD-Pipeline stehen mehrere Tools und Plattformen zur Verfügung, darunter Jenkins, CircleCI und AWS CodePipeline. Jede Anwendung verfügt über spezielle Funktionen und Möglichkeiten, daher ist es wichtig, diejenige zu wählen, die Ihren Anforderungen am besten entspricht.
Die Bereitstellungslogik sollte vom ersten Tag an zusammen mit dem Mono-Repository vorbereitet werden. Der Arbeitsablauf sieht so aus, dass ein Entwickler, wenn er eine Übergabe vornimmt, den Build (Kompilieren des Artefakts und Veröffentlichen des Images im Docker-Hub) des Projekts in der CI startet. Schließlich wird das Projekt auf der Hosting-Plattform, z. B. EKS, bereitgestellt, so dass Sie prüfen können, ob der Code bereitgestellt werden kann, das REPL-Feeling haben und das Ergebnis den Produktverantwortlichen zeigen können.
Durch den Einsatz einer CI/CD-Pipeline können Sie das Testen und Bereitstellen Ihrer Microservices automatisieren und Ihren Teams den Rücken freihalten, damit sie sich auf die Entwicklung und Verbesserung Ihrer Services konzentrieren können.
Best Practice Nr. 4: Verwenden Sie Container und Container-Orchestrierungstools:
Sind Sie es leid, Ihre Microservices manuell bereitzustellen und zu skalieren? Dann ist es an der Zeit, den Einsatz von Containern und Container-Orchestrierungstools in Betracht zu ziehen.
Mit Containern können Sie Ihre Microservices und deren Abhängigkeiten in einer einzigen Einheit verpacken, was die Bereitstellung und Ausführung in verschiedenen Umgebungen erleichtert. So reduzieren Sie den Zeit- und Arbeitsaufwand für die Bereitstellung und Skalierung Ihrer Microservices und verbessern deren Zuverlässigkeit.
Neben der Verwendung von Containern empfiehlt sich auch der Einsatz eines Container-Orchestrierungs-Tools zur Verwaltung der Bereitstellung und Skalierung Ihrer Microservices. Mit diesen Tools können Sie das Deployment, die Skalierung und die Verwaltung Ihrer Container automatisieren und so die Ausführung und Wartung Ihres auf Microservices basierenden Systems vereinfachen.
Außerdem sollte jeder Microservice containerisiert und in einem Docker-Hub mit einem geeigneten semver2-Tag veröffentlicht werden.
Einige beliebte Tools zur Container-Orchestrierung sind Kubernetes, Docker Swarm und Mesos.
Durch den Einsatz von Containern und Container-Orchestrierungstools können Sie die Bereitstellung und Verwaltung Ihrer Microservices rationalisieren und Ihren Teams den Rücken freihalten, um sich auf die Entwicklung und Verbesserung Ihrer Services zu konzentrieren.
Best Practice Nr. 5: Verwenden Sie ein API-Gateway, um den externen Zugriff auf Microservices zu verwalten
Wenn externe Clients, z. B. mobile Anwendungen oder Web-Clients, auf Ihr auf Microservices basierendes System zugreifen, verwenden Sie ein API-Gateway, um den Zugriff auf Ihre Microservices zu verwalten. Wenn Ihre Microservices (meist REST-API) Modelle offenlegen, die nicht ausreichen, um Ihr Modell zu erstellen, dann sollte eine GraphQL-API präsentiert werden, eine Art Fassade, die Backed for Frontend (BFF) genannt wird.
Was ist ein API-Gateway?
Ein API-Gateway ist eine Schicht, die zwischen Ihren Clients und Ihren Microservices sitzt und dafür verantwortlich ist, Anfragen von Clients an den entsprechenden Microservice weiterzuleiten und die Antwort an den Client zurückzugeben. Es kann auch Authentifizierungs-, Ratenbegrenzungs- und Caching-Aufgaben übernehmen.
Durch den Einsatz eines API-Gateways können Sie die Sicherheit und Leistung Ihres Systems verbessern. Es fungiert als zentraler Einstiegspunkt für externen Datenverkehr und kann bestimmte Aufgaben von Ihren Microservices abnehmen. Außerdem lässt sich der externe Zugriff auf Ihre Microservices leichter verwalten und überwachen, da Sie alle Anfragen und Antworten über das Gateway verfolgen und protokollieren können.
Mehrere Optionen für die Implementierung eines API-Gateways umfassen die Verwendung eines Drittanbieterdienstes oder die Erstellung eines eigenen Gateways mit Tools wie Kong oder Tyk.
Wenn Sie darüber hinaus sicherheitsrelevante Fragen wie Keycloak und IDS klären wollen, sollten Sie insbesondere API-Gateway-Komponenten wie Kong
Durch den Einsatz eines API-Gateways können Sie die Sicherheit und Leistung Ihres auf Microservices basierenden Systems verbessern und die Verwaltung des externen Zugriffs auf Ihre Services erleichtern.
Best Practice Nr. 6: Überwachen Sie den Zustand und die Leistung von Microservices:
Bei der Arbeit mit Microservices ist es von entscheidender Bedeutung, den Zustand und die Leistung der einzelnen Services zu überwachen, um sicherzustellen, dass sie reibungslos funktionieren und die Anforderungen Ihres Systems erfüllen.
Es gibt verschiedene Tools und Techniken, die Sie zur Überwachung des Zustands und der Leistung Ihrer Microservices einsetzen können, darunter:
- Tools zur Überwachung der Anwendungsleistung (APM): Diese Tools verfolgen die Leistung Ihrer Microservices und geben Aufschluss über mögliche Probleme oder Engpässe.
- Tools zur Protokollanalyse: Mit diesen Tools können Sie die von Ihren Microservices generierten Protokolle analysieren, um Fehler, Leistungsprobleme und andere wichtige Informationen zu ermitteln.
- Tools für Lasttests: Mit diesen Tools können Sie die Belastung Ihrer Microservices simulieren, um deren Leistung zu testen und mögliche Probleme zu erkennen.
Mit diesen und anderen Tools und Techniken können Sie den Zustand und die Leistung Ihrer Microservices überwachen und auftretende Probleme erkennen und beheben. So stellen Sie sicher, dass Ihre Microservices reibungslos funktionieren und die Anforderungen Ihres Systems erfüllen.
Best Practice Nr. 7: Implementieren Sie eine rollierende Bereitstellungsstrategie:
Wenn Sie Updates für Ihre Microservices bereitstellen, sollten Sie daran denken, dass es wichtig ist, Ausfallzeiten und Unterbrechungen Ihres Systems zu minimieren. Eine Möglichkeit, dies zu erreichen, ist die Implementierung einer rollenden Bereitstellungsstrategie.
Bei einer Rolling Deployment-Strategie stellen Sie Updates für mehrere Microservices gleichzeitig bereit und führen das Update dann schrittweise für den Rest des Systems ein. Auf diese Weise können Sie die Aktualisierung in kleinem Maßstab testen, bevor Sie sie für das gesamte System bereitstellen, wodurch das Risiko von Unterbrechungen oder Problemen minimiert wird.
Für die Implementierung einer Strategie der schrittweisen Bereitstellung gibt es folgende Ansätze:
- Blue-Green-Bereitstellung: Dabei werden die Aktualisierungen in einer separaten „grünen“ Umgebung bereitgestellt und der Datenverkehr von der „blauen“ Umgebung umgeschaltet, sobald die Aktualisierung getestet wurde und in Betrieb genommen werden kann.
- Kanarische Bereitstellung: Hierbei werden die Updates für einen kleinen Prozentsatz der Benutzer bereitgestellt und der Anteil im Laufe der Zeit schrittweise erhöht, während Sie auf Probleme achten.
Durch die Implementierung einer rollierenden Bereitstellungsstrategie können Sie Ausfallzeiten und Unterbrechungen während der Aktualisierungen minimieren und einen reibungslosen und zuverlässigen Bereitstellungsprozess gewährleisten.
Best Practice Nr. 8: Verwenden Sie ein zentrales Protokollierungs- und Überwachungssystem
Bei der Arbeit mit Microservices ist es wichtig, eine Möglichkeit zu haben, den allgemeinen Zustand und die Leistung Ihres Systems zu überwachen. Eine Möglichkeit, dies zu tun, ist die Verwendung eines zentralisierten Protokollierungs- und Überwachungssystems.
Mit einem zentralisierten Protokollierungs- und Überwachungssystem können Sie Protokolle und andere Daten von Ihren Microservices an einem einzigen Ort sammeln und analysieren, was die Verfolgung des allgemeinen Zustands und der Leistung Ihres Systems erleichtert. Auf diese Weise können Sie Probleme schneller erkennen und beheben, da Sie alle relevanten Daten an einem Ort sehen können.
Es gibt mehrere Optionen für die Implementierung eines zentralen Protokollierungs- und Überwachungssystems, einschließlich der Verwendung eines Drittanbieterdienstes wie Splunk oder der Erstellung eines eigenen Systems mit Tools wie Elasticsearch und Logstash. Es ist wichtig, die Option zu wählen, die Ihren Anforderungen und Ihrem Budget am besten entspricht.
Mit einem zentralen Protokollierungs- und Überwachungssystem können Sie den Gesamtzustand und die Leistung Ihres auf Microservices basierenden Systems verfolgen und alle auftretenden Probleme erkennen und beheben. Warum also nicht ausprobieren?
Best Practice Nr. 9: Verwenden Sie Schutzschalter und Abschottungen, um Kaskadenausfälle zu verhindern
Bei der Arbeit mit Microservices ist es wichtig zu verhindern, dass Probleme in einem Service das gesamte System beeinträchtigen. Eine Möglichkeit, dies zu erreichen, ist die Verwendung von Stromkreisunterbrechern und Trennwänden.
Ein Circuit-Breaker ist ein Muster, das es einem Dienst ermöglicht, schnell zu versagen und die Verarbeitung von Anfragen zu stoppen, wenn ein Problem auftritt, anstatt zu versuchen, die Verarbeitung fortzusetzen und möglicherweise weitere Probleme zu verursachen, um kaskadierende Ausfälle zu verhindern und die Gesamtstabilität des Systems zu schützen.
Ein Bulkhead ist ein Muster, mit dem Sie verschiedene Teile Ihres Systems isolieren können, so dass sich Probleme in einem Teil nicht auf den Rest des Systems auswirken. Auf diese Weise verhinderst du kaskadenartige Ausfälle erhhöhst die Stabilität des Gesamtsystems.
Durch den Einsatz von Leistungsschaltern und Trennwänden können Sie verhindern, dass sich Probleme in einem Dienst auf das gesamte System auswirken, und die Stabilität und Zuverlässigkeit Ihres auf Microservices basierenden Systems sicherstellen.
Best Practice Nr. 10: Implementierung einer angemessenen Teststrategie
Wenn Sie mit Microservices arbeiten, sollten Sie die Stabilität und Zuverlässigkeit Ihres Systems sicherstellen, indem Sie Ihre Microservices ordnungsgemäß testen. Es gibt mehrere Arten von Tests, die Sie in Betracht ziehen sollten, darunter:
- Unit-Tests: Hierbei werden einzelne Codeeinheiten getestet, um sicherzustellen, dass sie korrekt funktionieren.
- Integrationstests: Hierbei wird die Integration zwischen verschiedenen Microservices getestet, um sicherzustellen, dass sie korrekt zusammenarbeiten.
- Leistungstests: Hierbei wird die Leistung Ihrer Microservices unter verschiedenen Lasten und Bedingungen getestet, um sicherzustellen, dass sie die Anforderungen Ihres Systems erfüllen.
- Chaos-Tests: Hierbei werden absichtlich Ausfälle oder andere Störungen in Ihr System eingeführt, um seine Widerstandsfähigkeit zu testen und sicherzustellen, dass es sich von Ausfällen erholen kann.
Fazit
Durch die Umsetzung einer geeigneten Teststrategie und regelmäßige Tests Ihrer Microservices können Sie die Stabilität und Zuverlässigkeit Ihres auf Microservices basierenden Systems sicherstellen.
Unternehmen, die in der Lage sind, neue Features und Funktionen in der heutigen schnelllebigen Geschäftswelt schnell und zuverlässig bereitzustellen, haben einen erheblichen Wettbewerbsvorteil. Microservices können ein leistungsfähiges Tool für die schnelle Entwicklung und Bereitstellung sein, aber sie bringen auch neue Herausforderungen bei der Bereitstellung und Verwaltung mit sich.
Die 10 Best Practices, die in diesem Artikel beschrieben werden, bieten einen Fahrplan für die erfolgreiche Bereitstellung und Verwaltung von Microservices in einer Produktionsumgebung. Wenn Unternehmen diese Best Practices befolgen, können sie sicherstellen, dass ihre Microservices stabil und zuverlässig sind und die bestmögliche Leistung erbringen. Auf diese Weise können sie neue Features und Funktionen schneller bereitstellen und der Konkurrenz einen Schritt voraus sein.
Neben der Verbesserung der Leistung von Microservices tragen diese Best Practices auch dazu bei, das Risiko kostspieliger Ausfallzeiten und Ausfälle zu verringern. Außerdem verbessern Sie die allgemeine Zuverlässigkeit und Stabilität der Systeme. Sie schützen den Ruf Ihres Unternehmens und die Kundenzufriedenheit, was letztlich zum Geschäftserfolg beiträgt.
Daher sind diese Best Practices ein Muss für jedes Unternehmen, das das Beste aus seinen Microservices-basierten Systemen herausholen möchte. Machen Sie den ersten Schritt zur Umsetzung dieser Best Practices und überzeugen Sie sich selbst von den Vorteilen.