Microservices und Node.js - Ein perfektes Duo? - PMC-Services
Microservices

Microservices und Node.js – Ein perfektes Duo?

Microservices hier, Microservices da, Microservices gefühlt überall…

Spricht man derzeit über Digitalisierung, dann gleichzeitig immer auch irgendwie über Microservices. Aber was steckt hinter diesem Begriff? Und ist es wirklich die Antwort auf alle bisherigen Architekturprobleme in der IT? Wir werfen im folgenden Blogbeitrag einmal einen Blick auf Microservices, deren Vor- und Nachteile und schauen uns an, wie Microservices mit node.js realisiert werden können.

Die Definition von Microservices

Unter Microservices versteht man in erster Linie die Modularisierung von Software. Große Monolithen werden in einzelne, einem ganz bestimmten Zweck dienenden, Services aufgebrochen. Dies dient in erster Linie dazu, Komplexität von Softwareanwendungen zu reduzieren. Weitere Definitionen des Begriffes sind vielfältig: So definiert eine Quelle Microservices beispielsweise als so kleine Einheit, dass sie problemlos durch 5 Entwickler innerhalb eines Sprints von 2 Wochen Dauer problemlos neu entwickelt werden kann. Eine andere, mir persönlich liebere  Definition beschreibt Microservices als kleine, fachliche Einheit, die separat deploybar sein muss, ohne dass andere Microservices betroffen sind und ebenfalls deployed werden müssen. Somit ist es, anders als bei „klassischen“ Projekten nicht erforderlich, bei jeder kleinen Änderung das gesamte Projekt zu deployen. Außerdem besteht ein weiteres Merkmal in der autonomen Skalierung, sodass jedes Modul bei Bedarf skaliert werden kann. Werden so beispielsweise Ressourcenengpässe morgens und abends bei einem Zeiterfassungsservice festgestellt, so können dem Dienst in diesen Stoßzeiten weitere Ressourcen zur Verfügung gestellt werden.

Da Microservices komplett unabhängig und isoliert voneinander laufen, ist es nicht notwendig, sich für alle Zeit auf eine bestimmte Technologie festzulegen. So kann die Technologieentscheidung von mal zu mal neu getroffen werden.

Zusammengefasst kann man  demnach folgende Merkmale von Microservices festhalten:

  • Einheiten bzw. Module, welche gemeinsam mit anderen eine Gesamtapplikation ergeben,
  • jeder Teil der Applikation ist unabhängig deploybar und skalierbar und
  • Microservices können durch unterschiedliche Teams in unterschiedlichen Sprachen/ Technologien entwickelt bzw. getestet werden.

Vor- und Nachteile von Microservices

Wie bei jedem Architekturmuster ergeben sich aus der Nutzung von Microservices nicht nur Vorteile.  Ich habe die aus meiner Sicht wichtigesten Vor- und Nachteile in untenstehender Tabelle zusammengefasst.

Vorteile

 

Nachteile

 

beschleunigen die Entwicklung, das Deployment und erhöhen die Produktivität,

 

Das Ausfallrisiko bei mehreren Services ist höher wie bei einer monolithischen Anwendung

 

jeder Service kann unabhängig von anderen ausgerollt werden

 

Bei weltweiter Verteilung der Services besteht die Notwenidgkeit unterschiedliche Zeitzonen zu beachten. Dies bedeutet einen entsprechenden Aufwand.

 

bei der Entwicklung neuer Microservices können aktuelle Technologien verwendet werden, weil man sich nicht einmalig auf einen Technologie-Stack festlegen muss und

 

Der Aufwand für die Migration bestehender Systeme ist nicht zu unterschätzen.

 

es existiert eine klare Trennung von Zuständigkeiten und Verantwortlichkeiten, dadurch bessere Strukturierung des Codes.

 

Das Monitoring im produktiven Betrieb wird komplexer als bei einem monolithischen System, da mehr Komponenten zu betrachten sind.

 

Und was ist nun node.js?

Node.js ist eine Platform, entwickelt auf der V8 Engine von Google Chrome, die optimal für den serverseitigen Einsatz geeignet ist. Die Entwicklung von Netzwerkapplikationen, insbesondere Webserver, auf Basis der weit verbreiteten Programmiersprache JavaScript ist damit möglich.

node.js Ablaufdiagramm Aufgrund der Architektur verbraucht eine node.js Anwendung bei gleicher Anzahl bestehender Verbindungen von Clients auf den Server viel weniger Ressourcen, als es beispielsweise bei php (wo für jede Verbindung ein eigener Thread gestartet wird) der Fall ist. Das Geheimnis dabei liegt in er asynchronen Abarbeitung in einem Single-threaded-Event-Loop. Das bedeutet, dass aufwändige I/O-Operationen ausgelagert werden, damit der Event-Loop nicht blockert wird. Dieser läuft in einer großen Schleife (Loop eben ;-)) durch die in der Abbildung gezeigten Phasen. Einkommende Verbindungen werden quasi „gesammelt“ und laufen dann zusammen durch die einzelnen Phasen.

Ein weiterer Vorteil von node.js ist der modulare Aufbau. Im Standardpaket von Node sind schon eine Menge Module enthalten. Diese dienen zum Beispiel dem Zugriff auf das Dateisystem oder der Netzwerksteuerung. Es gibt aber auch unzählige Module, die durch eine sehr aktive Community entwicklet und meist als Open-Source-Lösung zur Verfügung gestellt werden. Dadurch kann eigentlich jede erdenkliche Frage, ob eine Löung mit node.js realisert werden kann mit einem „JA“ beantwortet werden.

Fazit

Bevor ich ein Fazit ziehe, wie gut sich node.js für Microservices eignet, möchte ich noch ein paar Sätze zu Microservices an sich loswerden. Ein Allheilmittel sind sie meiner Meinung nach wahrlich nicht, aber sie bieten für spezielle Probleme die richtige Lösung und sind sehr gut skalierbar, was in der heutigen Zeit als sehr wichtig einzustufen ist. Durch die Spezialisierung auf eine ganz bestimmte Aufgabenstellung sind Microservices auch für Entwicklerteams skalierbar, da man beispielsweise jedes Team mit der Entwickler eines Microservices betrauen kann. Der Nachteil der Komplexität den Microservices, gerade im Hinblick auf die IT-Architektur mitbringen, kann man ignorieren, da die Vorteile meines Erachtens nach überwiegen, sofern Microservices auch richtig eingesetzt werden.

Nun aber zum Fazit zu Microservices mit node.js: Die Implementierung von Microservices ist mit node.js grundsätzlich sehr gut möglich. node.js ist inzwischen weit verbreitet, sehr stabil und bringt tonnenweise an Libraries mit.

Um wirklich von einander unabhängige Microservices zu implementieren, empfiehlt es sich, dass jeder Service eine API anbietet, die in der Lage ist, UI auszuliefern. Nur so kann gewährleistet werden, dass ein Team die komplette Verantwortung für einen fachlichen Kontext übernehmen kann und der Dienst unabhängig von anderen ausgerollt werden kann. Hierfür empfiehlt es sich, auf das Routing-Framework express zurückzugreifen. Dies ist ein sehr mächtiges Framework für die Erstellung von REST-APIs mit dessen Hilfe sich Microservices in Windeseile erstellen lassen. Und Geschwindgkeit ist bei Microservices immer ein Thema!

Sollten Sie weitere Fragen zu Microservices und/oder node.js haben, kontaktieren Sie mich gerne.

Steffen Stähle

Digitaler Transformer aus Leidenschaft - Ist der festen Überzeugung, dass die Unternehmens-IT sich in den nächsten Jahren drastisch ändern wird und deshalb immer auf der Suche nach Optimierungspotential um Arbeitsabläufe mit modernen Technologien und Architekturen noch effizienter zu gestalten.