Microservices für das Unternehmen: Design, Entwicklung und Bereitstellung
Februar 28, 2022 / Unisys Corporation
Kurzfristig? Entdecken Sie diese wichtigen Erkenntnisse:
- Bei der Gestaltung einer Microservices-Architektur ist es wichtig:
- Applications in Business Capabilities zerlegen.
- Erstellen Sie die Services mit den richtigen Tools und Techniken.
- Konzipieren Sie die Architektur, um die notwendigen Teile der Services freizulegen.
- Verwenden Sie für die Kommunikation geeignete Protokolle.
- Die Architektur dezentralisieren.
- Stellen Sie die Dienste mit verbraucherorientierten Verträgen bereit.
- Zu den Tools und Frameworks, die zur Implementierung von Microservices verwendet werden, gehören REST, Consul, Oracle Helidon und Kubernetes.
- Zu den Vorteilen von Microservices gehören verbesserte Flexibilität, Skalierbarkeit und Wartungsfreundlichkeit.
- Zu den Herausforderungen von Microservices können eine erhöhte Komplexität und Schwierigkeiten beim Debuggen und Testen gehören.
- Für die erfolgreiche Implementierung von Microservices sind eine klare Geschäftsstrategie und klar definierte Kommunikationsprotokolle wichtig.
- Wichtig sind auch die richtigen Tools und Technologien sowie ein kompetentes und erfahrenes Entwicklungsteam.
Microservices werden immer häufiger, insbesondere bei der Cloud-nativen Applications-Entwicklung.
Es hat sich zu einem beliebten Architekturmuster entwickelt, da es ermöglicht, große Applications als eine Suite kleiner, unabhängiger Services zu bauen, die über ein Netzwerk miteinander kommunizieren. Dieser Ansatz erleichtert das Design, die Entwicklung und den Einsatz komplexer Softwaresysteme, da Sie einzelne Dienste aktualisieren und ändern können, ohne das gesamte System zu beeinträchtigen, was es flexibler und skalierbarer macht als herkömmliche Methoden.
Microservices können mit einer Vielzahl von Ansätzen und Technologien implementiert werden. Dazu können domänengesteuerte Designs, kontinuierliche Bereitstellung, skalierbare Plattformen, Infrastrukturautomatisierung und die Verwendung verschiedener Programmiersprachen gehören. Microservices spiegeln wider, wie Führungskräfte ihre Teams und Applications Development Prozesse organisieren wollen.
Erste Schritte mit Microservices-Architektur
Bei der Gestaltung von Microservices-Architektur gibt es keine definitiven Standardprinzipien. Es gibt jedoch einige Designthemen und -techniken, die von verschiedenen Unternehmen verwendet werden, um mit den ersten Phasen des Aufbaus einer effizienten Microservices-Architektur zu beginnen.
Demontieren
Erstens hilft die Identifizierung der Geschäftsfähigkeiten von Applications den Teams, Services entsprechend aufzubauen. Sobald die Fähigkeiten identifiziert sind, können die Teams entscheiden, an welchem Service sie arbeiten möchten, und mit dem Aufbau entsprechend ihren Geschäftsanforderungen beginnen. Jedes Team kann zu einem Experten in dem Bereich werden, an dem es arbeitet, und Techniken und Strategien erarbeiten, die am besten zur Anwendung passen.
Gebäude
Nach der Identifizierung der Geschäftsfähigkeiten können die Teams die erforderlichen Tools, Techniken, Plattformen und Ansätze für den Aufbau der Services eingrenzen. Ansätze wie Java mit MySQL und Scala/Spark können entsprechend der Expertise des Teams und den Anforderungen der Applications eingesetzt werden.
Design/Gestaltung
Bei der Gestaltung der Microservices-Architektur ist es unerlässlich, die Teile der Dienste zu analysieren, die exponiert werden müssen, und die Protokolle, die für die Kommunikation mit den gegebenen Diensten verwendet werden sollten. Unnötige und schwere Detaillierung führt zu Verwirrung und Verlust der Flexibilität in den Dienstleistungen.
Dezentrales
Die Architektur kann durch Teams, die an bestimmten Services arbeiten, dezentralisiert werden. Ein internes Quellmodell ermöglicht es Entwicklern, die notwendigen Änderungen am Code vorzunehmen und voranzukommen, ohne sich auf den Service Owner zur Fehlerbehebung verlassen zu müssen. Ein detailliertes Servicemodell wird den Prozess für die Entwickler vereinfachen, was zu einer besseren Leistung und Entwicklung führt.
Einbringung
Ein detaillierter verbraucherorientierter Vertrag unterstützt jede Verbraucher-API bei der Erfassung der Anforderungen der Applications. Diese Verträge werden mit den Dienstleistern geteilt, um ihnen zu helfen, die Bedürfnisse jedes Kunden zu erfüllen. Es ist unerlässlich, vor der Bereitstellung der Dienste verbraucherorientierte Vereinbarungen zu treffen, um den Anbietern zu helfen, die Abhängigkeit der Dienste zu verstehen.
Einige Tools und Rahmenbedingungen für die Implementierung von Microservices
RUHE
Representational State Transfer (REST) ist ein effizientes Tool, das es Microservices ermöglicht, direkt über HTTP zu kommunizieren, und wird für den Aufbau von RESTful APIs verwendet. Die Anfragen und Antworten werden in Standardformaten wie XML, HTML und JSON bearbeitet.
Konsul
Consul ist eine Service-Discovery-Technologie und unterstützt HTTP REST APIs und DNS. Dieses Framework ermöglicht es Entwicklern, mithilfe einer Consul-Vorlage automatisch eine Konfiguration in Dateien zu erstellen. Es führt auch Gesundheitsprüfungen durch und schließt bestimmte Mikrodienste von der Diensterkennung aus, wenn Gesundheitsprüfungen fehlschlagen.
Oracle Helidon
Helidon ist ein von Oracle entwickeltes und eingeführtes Microservices-Framework. Es ist ein Repository von Java-Bibliotheken, das Entwickler für den Aufbau von Microservices-Architektur verwenden können. Helidon ist in zwei Varianten erhältlich, Helidon MP und Helidon SE. Ersteres ist eine sinnvolle Wahl für Java-Entwickler, da es sich um eine Implementierung der MicroProfile-Spezifikationen handelt. Letzteres fungiert als Toolkit, das Java SE-Funktionen und fließende APIs unterstützt.
Federmanschette
Ein weiteres Java-Framework, Spring Boot, bietet kollaborative Komponenten und ermöglicht den Aufbau von Großsystemen mit einfachen Architekturen. Spring Boot lässt sich dank der Invertierung der Steuerung einfach in andere Rahmen integrieren.
Schauen wir uns einige Bereitstellungsoptionen an:
Für die Bereitstellung von Microservices können Entwickler aus diesen häufig verwendeten Mustern wählen:
Multiservice-Instanzen pro Host
Bei der Verwendung mehrerer Serviceinstanzen pro Hostmuster können Entwickler einen oder mehrere physische oder virtuelle Hosts positionieren, um mehrere Serviceinstanzen auszuführen. Jeder Dienst funktioniert auf einem bekannten Port auf einem oder mehreren Ports.
Dieses Muster gibt es in zwei Varianten. Zunächst ist jede Serviceinstanz ein Prozess oder eine Gruppe von Prozessen. Entwickler können eine Java-Serviceinstanz als Web-Applications auf einem Apache Tomcat-Server bereitstellen. Die andere Variante besteht darin, mehrere Serviceinstanzen in demselben Prozess oder derselben Prozessgruppe auszuführen, wie z. B. die Bereitstellung mehrerer Java Web Applications auf demselben Apache Tomcat-Server oder die Ausführung mehrerer OSGi-Bundles im selben Container.
Das Muster hat viele Vorteile, wie z. B. einen effizienten Ressourceneinsatz. Diese Effizienz ergibt sich aus dem Prozess oder der Prozessgruppe, die mehrere Serviceinstanzen ausführt, wie z. B. mehrere Web Applications, die denselben Apache Tomcat-Server und JVM teilen.
Serviceinstanz pro Hostmuster
Mit diesem Muster können Entwickler jeden Dienst isoliert auf seinem persönlichen Host ausführen. Bei diesem Ansatz gibt es zwei Spezialisierungen:
- Serviceinstanz pro virtueller Maschine
- Serviceinstanz pro Container
Serviceinstanz pro virtuelles Maschinenmuster
Bei diesem Ansatz wird jeder Dienst als virtuelles Maschinenbild (VM) verpackt, wie z. B. ein Amazon EC2 AMI. Ein gutes Beispiel ist Netflix, das diesen Ansatz verwendet hat, um seinen Videostreaming-Dienst bereitzustellen, indem es jeden Dienst als EC2 AMI mit Aminator verpackt und jeden Dienst als EC2-Instanz bereitstellt.
Für den Aufbau von VMs stehen viele Tools zur Verfügung, wie Aminator, Jenkins und Packer.io. Aminator verpackt die Dienste als EC2 AMI, während Packer.io die VM-Image-Erstellung automatisiert und Virtualisierungstechnologien wie DigitalOcean, VirtualBox, VMware und EC2 unterstützt.
Bei der Nutzung der Serviceinstanz pro virtuellem Maschinenmuster können Teams die Vorteile einer ausgereiften Cloud-Infrastruktur nutzen und sich keine Gedanken über die Erschöpfung von Ressourcen und CPU-Speicher machen, da die Dienste isoliert ausgeführt werden, was die Bereitstellung einfacher und zuverlässiger macht.
Serverinstanz pro Containermuster
Wie der Name schon sagt, umfasst dieses Muster die Bereitstellung von Serviceinstanzen auf ihren Containern. Die Container verfügen über ein dediziertes Stammdateisystem und einen dedizierten Port-Namensraum, mit denen Teams den Speicher und die CPU-Ressourcen eines Containers begrenzen können. Beispiele für Containertechnologien sind Solaris Zones und Docker. Teams können auch Kubernetes und Marathon verwenden, um die Containerplatzierung in Übereinstimmung mit den erforderlichen und auf jedem Host verfügbaren Ressourcen zu verwalten.
Die Vorteile von Containern ähneln denen von VMs, da beide Ansätze die Isolierung von Diensten beinhalten und die Überwachung der von jedem Container verbrauchten Ressourcen ermöglichen. Container sind leicht und einfacher zu bauen, da es keine schweren OS-Boot-Mechanismen gibt.
Serverlose Bereitstellung
AWS Lambda ist ein hervorragendes Beispiel für ein serverloses Bereitstellungsmuster. Die Technologie unterstützt die Dienste Node.js, Java und Python. Teams können die Microservices in eine ZIP-Datei verpacken und diese auf AWS Lambda hochladen, um Instanzen automatisch auszuführen und Anfragen zu bearbeiten.
Es gibt vier Möglichkeiten, die AWS Lambda-Funktion umzusetzen:
- Aufruf der Funktion direkt über einen Webservice Request
- Automatische Implementierung als Reaktion auf Ereignisse, die von AWS-Diensten generiert werden, einschließlich DynamoDB, Kinesis, S3 oder Simple Email Service
- Verwendung des AWS API Gateways zur Verwaltung von HTTP-Anfragen von Clients der Applications
- Regelmäßige Einhaltung eines cronähnlichen Zeitplans
AWS Lambda ist eine der bequemsten Möglichkeiten, Mikrodienste bereitzustellen. Sie bietet den Vorteil einer auftragsbasierten Preisgestaltung, die es Unternehmen ermöglicht, für die Welt zu bezahlen, die die Services erbringen, sodass sich die Teams mehr auf die Entwicklung der Anwendung konzentrieren können, anstatt sich um die IT-Infrastruktur zu kümmern.
Schlussfolgerung
Erfolg ist ein sich bewegendes Ziel, und wenn es um Skalierungstechnologie geht, gibt es keine Silberkugel. Microservices sind ein relativ neuer Ansatz, zeigen aber bei korrekter Ausführung unvergleichliche Ergebnisse. Microservices helfen dabei, wichtigere Anwendungen in kleinere, einfacher zu verwaltende Applications aufzuteilen. Der Prozess ermöglicht es auch, dass die Unternehmenskultur offener ist und sich an Veränderungen und Verbesserungen anpassen kann.
Globale Akteure wie Coca-Cola, Netflix, Amazon und Etsy haben ihre kompliziertesten Probleme im Zusammenhang mit Skalierung und Expansion mithilfe der Microservices-Architektur gelöst. Dieser Wandel hat es diesen Organisationen und anderen ermöglicht, Flexibilität, Nachhaltigkeit und ein verbessertes Engagement innerhalb der Teams zu gewinnen.
Mit Microservices können jüngere Unternehmen die Leistungsfähigkeit alter Software und moderner Technologien nutzen und die Lernkurve für Teams und die nächste Generation von Entwicklern vereinfachen, um sie auf dem Weg zur digitalen Transformation zu führen.