Dmitry Nikolaev - stock.adobe.co

Sechs Tipps zum Bereitstellen von Produktions-Microservices

Der Erfolg mit Microservices hängt davon ab, dass IT-Teams ihre Prozesse für Design und Bereitstellung anpassen – nicht alle notwendigen Schritte beziehen sich auf die Technik.

Eine verteilte Microservices-Architektur ist nicht für alle Unternehmen oder Anwendungstypen geeignet. Doch da, wo sie funktioniert, bietet sie entscheidende Vorteile.

Microservices fördern ein modulares Anwendungsdesign und sind die technische Grundlage für agile Entwicklungsmethoden. Sie bieten Unternehmen die Freiheit, Sprachen, Frameworks, Code-Builds, Integrationsprozesse und Laufzeitinfrastrukturen nach ihren Wünschen zu wählen.

Es gibt keinen vorgeschriebenen oder universellen Aktionsplan für das Bereitstellen von Microservices in einer Produktionsumgebung. Große Online-Dienstleister wie Google, Amazon und Netflix, die verteilte Hyperscale-Architekturen betreiben, zeigen jedoch, dass jedes DevOps-Team bestimmte Themen und Hindernisse angehen muss, um sich auf die Bereitstellung von Microservices vorzubereiten. Wir geben sechs Tipps, wie der Aufbau von Microservices ein Erfolg wird.

1. Cloud-Dienste für Produktionsinfrastruktur nutzen

Einfach ausgedrückt ist eine Microservices-Architektur eine Architektur, bei der Anwendungen aus abgetrennten, unabhängig skalierbaren Komponenten bestehen. Cloud-Dienste, die Infrastrukturressourcen oder Unternehmensanwendungen als On-Demand-Dienste kapseln, erleichtern den Einsatz von Microservices. Statt herkömmliche IT-Infrastrukturen zu verwenden, erstellen und implementieren Sie Microservices in der Cloud.

Auch in der Cloud haben IT-Organisationen Unmengen von Optionen zum Betrieb ihrer Microservices Runtime. Sie sollten Microservices jedoch nicht wie andere Cloud-Anwendungen in separate VM-Instanzen (virtuelle Maschine) partitionieren, da Container und serverlose Funktionen besser für Microservice-Bereitstellungen geeignet sind. Manchmal brauchen Sie dennoch virtuelle Maschinen, da Sie neben den Containern noch Recheninstanzen benötigen, um einen Cluster aufzubauen, wenn Sie kein vollständig verwaltetes Container-as-a-Service-Tool nutzen möchten. Es ist jedoch empfehlenswert, diese Instanzen über einen Cloud-Kubernetes-Dienst wie Azure Kubernetes Service, AWS Elastic Kubernetes Service oder Google Kubernetes Engine zu verwalten.

Vergleichen Sie die Durchführbarkeit, Kosten und Leistung von Cloud-Dienste für Ihre Microservices niemals mit Ihrer bisherigen Erfahrungen mit Legacy-Anwendungen und -Servern – Microservices folgen anderen Gesetzen. Halten Sie sich außerdem beim Speicher nicht mit dem Abwägen von Preis-Leistungs-Verhältnissen auf. In vielen Fällen ist beispielsweise die Investition in SSIDs gegenüber Festplatten absolut gerechtfertigt.

2. Fehlschläge ins Design einplanen

Eine Microservices-Architektur ist entkoppelt und verteilt. Sie besteht aus einzelnen Anwendungskomponenten, die zwar stark voneinander abhängen, aber eigenständig arbeiten, Updates empfangen und skalieren können, ohne dass sie auf die Verfügbarkeit oder Reaktionsfähigkeit anderer Teile der Anwendung angewiesen sind. Die Microservices-Infrastruktur ist nicht von einem einzelnen Server abhängig – das unterscheidet sie grundlegend von einem verschachtelten monolithischen System.

Unternehmen müssen Microservices so entwerfen und bereitstellen, dass die Architektur mit Ausfällen umgehen kann. Sie sollten beispielsweise Server oder Containerknoten als zustandslose Entitäten behandeln, die unabhängig voneinander stoppen, neu starten, automatisch skalieren und patchen können. Anwendungen müssen den Ausfall von Komponenten tolerieren und sich nach Fehlern auf Komponentenebene ordnungsgemäß selbst wiederherstellen. Chaos-Engineering-Tools wie Gremlin und Netflix's Chaos Monkey testen die Widerstandsfähigkeit einer Microservice-Infrastruktur.

3. Datenmanagement dezentralisieren

Unternehmensrechenzentren konsolidieren häufig Datenbanken und Speichervolumes auf wenigen Systemen, um die betriebliche Effizienz zu verbessern, Lizenzkosten zu senken und das Anwendungs-, Richtlinien- und Sicherheitsmanagement zu vereinfachen. Dieser monolithische Ansatz beißt sich mit der Architektur von Microservices, da die Datenbankfunktionen nicht für jede Situation geeignet sind. Wenn mehrere Microservices-Anwendungsteams auf Biegen und Brechen dieselbe Datenbank verwenden müssen, wird dies zu einem Problem, wenn Teams für den einen Microservices die Datenbankkonfiguration anpassen müssen, während andere Microservices davon betroffen sind.

Softwareentwickler brauchen die Freiheit, die Datenbank zu verwenden, die sich am besten für ihre Komponente eignet. Dies ist mit Cloud-Plattformen wie AWS oder Microsoft Azure, die eine Vielzahl von Datenbankoptionen bieten, einfach zu gewährleisten. Entwickler benötigen auch die Flexibilität, das Datenbankschema und die Prozeduren zu ändern und zu aktualisieren, ohne befürchten zu müssen, dass sie vorhandenen Funktionscode beschädigen.

Abbildung 1: Erfahrungen aus einer monolithischen Anwendung lassen sich nur schwer auf Microservices übertragen.
Abbildung 1: Erfahrungen aus einer monolithischen Anwendung lassen sich nur schwer auf Microservices übertragen.

4. Governance verteilen

IT-Teams in Unternehmen arbeiten traditionell in funktionalen Silos – getrennten Speicher-, Netzwerk-, Datenbank-, Entwicklungs-, Betriebs- und Server-Teams – wobei jedes Silo einen Teil des gesamten Anwendungslebenszyklus abwickelt. Bei diesem traditionellen Modell sind Entwicklerteams Teil eines schwerfälligen Projekts, um eine Anwendung oder einen IT-Service zu implementieren. Teams kommunizieren oft über bestehende Prozesse wie Helpdesk-Tickets oder Feature Requests, die schwerfällig und restriktiv sind. Das hemmt die Kreativität und verlangsamt das Umsetzen neuer Ideen.

Microservices stellt diese Struktur auf den Kopf. Funktionsübergreifende Microservices-Teams mit einer DevOps-Kultur und mit agilen Entwicklungspraktiken ersetzen die IT-Silos. Teams organisieren sich um das Produkt – den Microservice oder die auf Microservices basierende Anwendung – herum, statt um eine bestimmte Jobrolle.

Um Microservices erfolgreich zu entwerfen und bereitzustellen, sollten Sie eine Kultur mit möglichst wenig restriktiven Prozessen schaffen, und eine solche, die es erlaubt, Probleme schnell zu erkennen und zu beheben. Optimieren Sie Ihre Prozesse auf Geschwindigkeit hin statt auf Effizienz. Das Infrastrukturteam sollte klein sein, da der Cloud-Dienstleister die meisten operativen Aufgaben übernimmt. Produktorientierte Teams fördern Agilität, enge Kommunikation und Koordination. Diese Teamstruktur verschlankt auch den Build-Prozess für APIs, welche die Prozessautomatisierung und die Integration von Microservices ermöglichen.

5. Automatisieren Sie die Infrastrukturbereitstellung, nutzen Sie CI/CD-Prozesse

Wie oben erwähnt, gedeihen Microservices in einer agilen DevOps-Umgebung, die schnelle, reibungslose Prozesse erfordert. Um Overhead und Verzögerungen zu vermeiden, sollten Sie sich wiederholende Aufgaben möglichst automatisieren. Aktualisiert ein Entwickler beispielsweise ein Codemodul, werden Software-Builds und -Tests automatisch generiert. Auf diese Weise erreichen Sie eine schnellere Bereitstellung und ein evolutionäres Design – beides sind kritische Attribute von Microservices.

Abbildung 2: Mit den richtigen Werkzeugen und Tricks bewältigen Sie die Fehlersuche auch in komplexen Infrastrukturen.
Abbildung 2: Mit den richtigen Werkzeugen und Tricks bewältigen Sie die Fehlersuche auch in komplexen Infrastrukturen.

Hinzu kommen zwei wichtige Tipps hinsichtlich der Taktik:

  • Bei einer unveränderlichen Infrastruktur erstellen Entwickler einen neuen Microservice, wenn sie Funktionen hinzufügen oder Fehler beheben müssen. Die Technik hält den alten Microservice betriebsbereit, während das Team den neuen testet, patcht und debuggt. Wenn es bereit für die Bereitstellung ist, tauschen Infrastrukturadministratoren den alten Microservice-Container gegen den neuen aus.
  • Verwenden Sie für jeden Microservice separate Builds. Verschiedene Microservices können Dateien wie Bibliotheken und Codefunktionen gemeinsam nutzen, benötigen aber mitunter unterschiedliche Versionen von diesen. Da die Microservices-Philosophie versucht, Abhängigkeiten prinzipiell zu vermeiden, stellen Sie am besten jeden Service einzeln bereit, um sicherzustellen, dass er die richtige Version einer Komponentendatei aus einem Storage Class Memory (SCM) abruft. Unabhängige Builds machen es auch einfacher, veraltete Versionen aus der Codebasis zu entfernen.

6. Von Anfang an überwachen, protokollieren und Fehler beheben

Der Aufbau von Anwendungen aus einer Reihe von Microservice-Bausteinen erschwert das Überwachen und die Fehlerbehebung für Systeme und deren Leistung erheblich. Vorfälle in einzelnen Microservices lösen oft eine Kaskade von Ereignissen aus, die zu einem Fehler führt. Um Ausfälle zu minimieren, integrieren Sie Überwachung und Fehlerbehebung in das Microservice-Design von Anfang an.

Erfahren Sie mehr über Containervirtualisierung

ComputerWeekly.de
Close