node.js und Amazon EC2


Amazon Webservices LogoCloud-Computing ist mittlerweile ein allgemein bekannter Begriff. Die Amazon EC2 Elastic Computing Cloud bietet den Ansatz Rechenkapazität und Speicher skalierbar zur Verfügung zu stellen. Ebenso flexibel ist das Zahlungsmodell, gezahlt wird für genutzte Recheneinheiten, benutzer Speicher sowie erzeugter Traffic.

Sollte der Service Interesse geweckt haben biete Amazon eine Möglichkeit das Angebot kostenlos zu probieren. Dabei stehen unter anderem 750 Stunden Rechenzeit sowie 10 GB Speicher als auch 15 GB Traffic pro Monat für 12 Monate zur Verfügung. Das sollte um sich einen Überblick zu verschaffen reichen. Die Anmeldung benötigt allerdings eine Kreditkarte.

Die Amazon EC2 Elastic Computing Cloud ist also für Anwendung interessant die skaliert werden müssen, beispielweise durch steigende Nutzerzahlen. Der Administrator muss sich keine Gedanken um die Hardware machen. Steigt der Umfang an gefragten Resourcen an skaliert auch der Server, so sind 15 GB RAM ebenso wenig ein Problem wie 1 GB RAM zu beginn. Man spart sich also eine nennenswerte Menge an Administrationsaufwand.

Ebenso beliebt wie Cloud-Computing ist es node.js auf in der Amazon EC2 Elastic Computing Cloud laufen zu lassen. Dieser Beitrag soll die Vorgehensweise dazu erläutern.

Der erste Schritt besteht im aufsetzen des System das später auf der Amazon EC2 laufen soll. Hier wird ebenfalls der Aufwand minimiert, Amazon stellt fertige Betriebssysteme in Form von Amazon Machine Images (AMIs) bereit. Diese System werden minimalistisch ausgeliefert und sind besonders auf Aspekte wie Sicherheit und Performanz ausgerichtet. Unsere Aufgabe steht also nach dem installieren des Amazon Machine Image in der Installation weiterer Anwendung die für node.js benötigt werden.

Unsere Wahl für das AMI sollte beim ersten Aufsetzen der Maschine auf ein von Amazon bereitsgestelltes Amazon Linux AMI fallen. Später lässt sich noch auf weitere Distributionen zurückgreifen die nicht direkt von Amazon zur Verüfung gestellt werden wie beispielweise Ubuntu. Dabei sollten unter anderem aus Sicherheitsaspekten unbedingt darauf geachtet werden wer das AMI bereitstellen, die von mir genannte Quelle Alestic stellt eine sehr gute Wahl dar.

Nach der Installation führt man zuerst, ebenfalls aus Sicherheitsgründen einige Updates durch.

$ sudo apt-get update
$ sudo apt-get upgrade -y

Darüberhinaus werden einige weiter Anwendung zur Installation von node.js auf der Amazon EC2 benötigt.

$ sudo apt-get install build-essential libssh-dev -y

Sind die Anwendungen installiert kann mit node.js fortgefahren werden. In dem Wiki von node.js findet sich die Installationsanleitung für node.js.

$ echo deb http://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list
$ apt-get update
$ apt-get install nodejs

node.js ist nun auf der Maschine installiert. Allerdings ist sinnvoll noch den Node Package Manager (NPM) zu installieren. Mit Hilfe des NPM lassen sich Erweiterungen für node.js auf einfache Weise hinzufügen.

$ curl http://npmjs.org/install.sh | sh

Will man beispielweise das Framework express für node.js installieren funktioniert das über einen einfachen Befehl.

$ npm install express

Weitere Module für node.js sind ebenfalls im Wiki zu finden. Eine gesamte Übersicht bietet die npm registry.

Was ist node.js? node.js und seine Vorteile


node.js Logonode.js ist ein in Javascript geschriebener ereignisorientierter und hochperformanter Server.

node.js basiert der Google V8 Javascript Engine die zu den schnellsten derzeit verfügbaren Implementationen gehört. Das Framework stellt APIs für Process, File und Network I/O zur Verfügung. Darüberhinaus stellt node.js der V8 Engine eine Kommandozeile bereit. Anzumerken ist auch das alle I/O Prozesse nicht-blockierend und asynchron stattfinden. Die Sprache selbst unterscheidet sich von anderen bekannten Programmiersprachen dadurch das sie prototypbasierend anstatt objektorientiert ist was bei der Entwicklung für einige Umstellung sorgt.

Mit nur wenigen Schritten lässt sich, wie in diesem einfachen Beispiel der offiziellen Website von node.js zu sehen ist, bereits ein Webserver aufsetzen, der bei jedem Aufruf einen vorgegebenen Text ausgibt.

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

Besonders hervorzuheben ist die Geschwindigkeit von node.js, die auf die Google V8 Javascript Engine zurückzuführen ist. Aus Benchmarks zwischen dem bekannten Apache Webserver und node.js gehen gravierende Unterschiede hervor die node.js umso attraktiver machen. Eine Messung der Dauer von 100000 Anfragen bei node.js und Apache ergabt sich eine Durchlaufzeit von 21 Sekunden (node.js) und 121 Sekunden (Apache). Diese Messung stellt ganz klar den Geschwindigkeitsvorteil da und gibt Aufschluss darüber das sich mit node.js viele Verbindungen mit geringeren Resourcen handhaben lassen.