Sneak Preview Node 0.12: Was bringt die neue Version?
Kommentare

Eine neue Version von Node lässt nun schon einige Zeit auf sich warten, der derzeitige Entwicklungszyklus ist mit 9 Monaten der bisher längste überhaupt. Der Hauptgrund hierfür dürfte in erster Linie

Eine neue Version von Node lässt nun schon einige Zeit auf sich warten, der derzeitige Entwicklungszyklus ist mit 9 Monaten der bisher längste überhaupt. Der Hauptgrund hierfür dürfte in erster Linie im stark zusammengeschrumpften Committer-Kernteam liegen: so verließen allein im Juli die Top-3-Committer die Mannschaft.

Ein Lichtblick zeichnet sich zumindest ab: Ende vergangener Woche wurde der Release Branch von Node 0.12 erstellt. Ein Hinweis auf eine baldige Veröffentlichung? Leider nicht unbedingt, wie dem Entwicklerblog zu entnehmen ist. Demnach sind noch einige Bugs und Hindernisse aus dem Weg zu räumen, bis Version 0.12 das Licht der Welt erblicken kann. Unter anderem nennen die Entwickler die bislang nur in einer instabilen Version integrierte Support-Bibliothek libuv.

Auch nach dem Release wird Node 0.12 jedoch noch nicht auf Herz und Nieren geprüft sein und aufgrund der starken Veränderungen im Vergleich zum Vorgänger potentiell zahlreiche Bugs aufweisen. Die Entwickler empfehlen bis zum Ausbügeln der Fehler durch die Community deshalb insbesondere professionellen Usern weiterhin die Nutzung der letzten stabilen und ausführlich getesteten Version 0.10.

Doch was wird die neue Version bringen? Es folgt eine Übersicht über einige der prominentesten Features.

Cluster Round-Robin Load Balancing

Seit Version 0.8 verfügt Node.js über Cluster-Module, die die Überwachung eines oder mehrerer Worker-Prozesse durch einen Master-Prozess erlauben. Eines der damit angedachten Ziele war die Erstellung wartungsfreier Multi-Process-Server. Wie die Node.js-Entwickler so schön sagen: In einer perfekten Welt sollte man eine Single-Process-Anwendung nutzen können, um soviele Worker-Prozesse hervorzubringen wie man möchte, ohne Codeänderungen vornehmen zu müssen.

Das Cluster-Modul sorgt dafür, dass sich der Worker-Prozess mit dem angeforderten Port/der angeforderten Adresse verbinden kann. Außerdem stellt er sicher, dass eingehende Connections gleichmäßig unter den Workern verteilt werden – theoretisch. In der Praxis zeigt sich jedoch, dass das System die Verteilung eingehender Connections häufig in völlig anderer Weise vornimmt, als die Programmierer es beabsichtigten. Da die Verteilung der eingehenden Connections viel zu wichtig ist, um sie dem Zufall zu überlassen, wird ab Version 0.12 ein Rundlauf-Verfahren (Round Robin) zum Einsatz kommen: Der Master-Prozess akzeptiert neue Connections und wählt anschließend den Worker aus, an den sie weitergegeben werden. Obwohl das Rundlauf-Verfahren den Entwicklern zufolge zwar nicht besonders ausgeklügelt ist, so führt es offenbar trotzdem zu einer deutlich ausgewogeneren Verteilung an die Worker-Prozesse.

Mehrfache Instanzen im selben Prozess ausführen

Ein laut den Machern häufig nachgefragtes Feature war die Möglichkeit, Node.js in andere Anwendungen einzubinden und multiple Node-Ausführungen zu erlauben, d.h. mehrere Instanzen von Node.js gleichzeitig im selben Prozess ausführen zu können.

In Version 0.12 ist dies nun möglich, ganz ohne für den User sichtbare Veränderungen – für Embedder und Add-On-Autoren erschließen sich jedoch völlig neue Perspektiven.

Synchrone API für Kind-Prozesse

Node.js wird, abgesehen von seiner ursprünglichen Aufgabe: dem Schreiben von Web Servern, mittlerweile in zahlreichen anderen Kontexten verwendet, wozu auch das Schreiben von Shell Scripts gehört. Dummerweise erzwingt Node eine asynchrone I/O; da dies für Shell Scripts nicht gerade von Vorteil ist, mussten sich Entwickler bislang etwas kruder Hacks bedienen. Die Unterstützung synchroner Kind-Prozesse stand deshalb schon seit längerem auf der To-do-Liste der Entwickler. Mit Implementierung der APIs spawnSync und execSync können sie diesen Punkt nun streichen.

Performance-Optimierungen

Neben dem Hinzufügen neuer Features wurden zusätzlich Performance-Optimierungen bei bereits bestehenden vorgenommen: Writable Streams unterstützen nun einen „Corked“-Modus. Wie der Name andeutet, kann mit seiner Hilfe ein Stream wie mit einem Korken verschlossen werden; alle in einen Stream geschriebene Daten werden gequeued, bis der „Korken“ wieder gezogen wird. Dadurch werden kleinere Writes in größere zusammengefasst, was zu weniger Systemaufrufen und kürzeren TCP-Paketumlaufzeiten führt.

Des Weiteren wurde das Layering verringert: Das TLS-Modul wurde komplett umgeschrieben; die Support-Bibliothek libuv wird nun direkt verwendet – eingehender Netzwerk-Traffic wird so direkt entschlüsselt, anstatt zuvor durch zwischenliegende Layer gejagt zu werden. Diese Änderung beschleunigt die TLS offenbar um rund 10% und verbraucht zusätzlich weniger Speicher.

Auch im Hinblick auf die Kryptografie hat sich etwas getan; diese wird in Node.js mithilfe der OpenSSL-Bibliothek implementiert. OpenSSL bietet Assembly-Versionen für spezifische Plattformen und Architekturen. Die Nutzung dieser Assembly-Versionen wurde nun deutlich ausgebaut, weshalb in Version 0.12 einige kryptographische Algorithmen um ein Vielfaches schneller sein werden.

Als weitere Hauptoptimierungen sind die Reduzierung der Belastung des Garbage Collectors, eine bessere Cluster-Performance sowie schnellere Timer zu nennen.

Und die Zukunft?

Einen kompletten und ausführlichen Blick auf alle neuen Features finden Sie in Artikeln der Entwickler auf der Projektseite. Einen Blick wert ist definitiv auch dieser Roadmap-Entwurf, der aus dem Community-Feedback des vergangenen Jahres zusammengestellt wurde und weit über das anstehene Update hinausreicht. Ein guter Anlass, selbst ein wenig zu spekulieren, in welche Richtung sich Node in Zukunft entwickeln könnte.

Aufmacherbild: Network. Connected nodes render von Shutterstock / Urheberrecht: NikolayN

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -