Der Webserver Tengine

© John Wollwerth, 123RF

Motortuning

Der Betreiber des chinesischen Online-Shops Taobao hat den beliebten Webserver Nginx um einige äußerst interessante Funktionen erweitert und das Ergebnis unter dem Namen Tengine wiederveröffentlicht. Das Resultat erfreut sich nicht nur im asiatischen Raum zunehmender Beliebtheit.
Seit Jahren erwartet, ist endlich Version 4 des Samba-Servers erschienen, der nun als vollwertige Alternative zu Microsofts Active Directory dienen kann. In der ... (mehr)

Das chinesische Pendant zu Amazon und eBay heißt Taobao Marketplace [1]. Um die vielen Kundenanfragen möglichst schnell bedienen zu können, griff der Betreiber zum Webserver Nginx, der sowohl für seine hohe Geschwindigkeit als auch seine einfache Konfiguration bekannt ist [2]. Mit der Zeit reichte das aber nicht mehr, und so begann man bei Taobao, den Webserver um einige benötigte Funktionen zu erweitern.

Nginx-Fork

Den so veränderten Nginx veröffentlichte Taobao im Dezember 2011 unter dem Namen Tengine (als Kurzform für Taobao-Engine). Wie Nginx steht er unter der liberalen und quelloffenen BSD-Lizenz. Mittlerweile sind an der Entwicklung von Tengine mehrere, vor allem asiatische Firmen beteiligt. Dem Kern-Team gehören beispielsweise auch Entwickler der chinesischen Suchmaschine Sogou.com an.

Tengine ist vollständig kompatibel zu Nginx. Die zum Redaktionsschluss verfügbare Version 1.4.3 basierte auf Nginx 1.2.5, man kann folglich zunächst dessen Konfigurationsdateien ohne Änderungen übernehmen. Gegenüber Nginx kann Tengine einige Funktionen in dynamisch ladbare Module auslagern, was den Webserver verschlankt. Die Anzahl der Prozesse, die die eigentlichen Anfragen bearbeiten, wählt Tengine automatisch passend zu den vorhandenen Prozessorkernen, womit sich wiederum die Leistungsfähigkeit verbessert.

Bei zu hoher Last leitet Tengine halb-automatisch entsprechende Gegenmaßnahmen ein. Die Logs landen auf Wunsch auch im Syslog oder in einer Pipe. Um die Download-Geschwindigkeit zu erhöhen, kann man gleich mehrere CSS- oder JavaScript-Dateien in einer Anfrage zusammenfassen. Als Bonus enthält Tengine von Haus aus das Modul zur Anbindung der Skriptsprache Lua, das externe oder in der Konfigurationsdatei eingebettete Lua-Skripte ausführt [3].

Schnellzündung

Tengine muss man zwingend aus dem Quellcode selbst übersetzen. Anders als bei Nginx bieten die Entwickler keine fertigen Pakete für die großen Linux-Distributionen an. Windows-Version gibt es keine, man bleibt daher auf unixoide Betriebssysteme beschränkt.

Um später alle standardmäßig aktivierten Funktionen nutzen zu können, benötigt man die Entwicklerpakete für die OpenSSL-Bibliothek (unter Ubuntu im Paket »libssl-dev« ) und die PCRE-Bibliothek (unter Ubuntu im Paket »libpcre3-dev« ). Anschließend muss man nur das Quellcodearchiv von der Tengine-Homepage herunterladen [4], entpacken und mit dem üblichen »./configure« , »make« und »sudo make install« kompilieren beziehungsweise installieren. Anschließend liegt der Webserver im Verzeichnis »/usr/local/nginx« .

Wer Tengine erst einmal ausprobieren möchte und dort schon Nginx installiert hat, sollte mit dem »configure« -Parameter »--prefix« ein anderes Installationsverzeichnis vorgeben. Übrigens taucht auch noch an anderen Stellen immer wieder die Bezeichnung »nginx« auf, man sollte folglich aufpassen, wenn man Tengine und Ngnix zusammen einsetzen möchte.

Genau wie bei Nginx landen auch bei Tengine alle Konfigurationsdateien, temporären Dateien und die Logs standardmäßig unterhalb von »/usr/local/nginx« – und somit in der Regel auf der Root-Partition. Wer nicht riskieren möchte, dass die irgendwann mit Daten überläuft, kann entweder symbolische Links setzen oder aber andere Speicherorte über die entsprechenden »configure« -Parameter vorgeben. Die wichtigsten von ihnen stellt Tabelle 1 vor.

Tabelle 1

<C>./configure<C>-Parameter

Parameter

Ändert das Verzeichnis für …

»--conf-path=/etc/nginx«

Konfigurationsdatei(en)

»--error-log-path=/var/log/nginx«

Error-Logs

»--http-log-path=/var/log/nginx«

Access-Logs

»--http-client-body-temp-path=/tmp«

Temporäre Dateien

»--http-fastcgi-temp-path=/tmp«

Temporäre Dateien für Fast-CGI

Bei Nginx und somit auch Tengine muss der Anwender einige Funktionen schon bei der Kompilierung explizit aktivieren. Das gilt insbesondere für die IPv6-Unterstützung, die der »configure« -Parameter »--with-ipv6« einschaltet.

Im Gegensatz zu Nginx nutzt Tengine auf Wunsch die »jemalloc« -Bibliothek zur Speicherverwaltung [6], was im Idealfall zu einer besseren Performance des Webservers führt. Um »jemalloc« einbinden zu können, müssen zum einen die entsprechenden Entwicklerdateien installiert sein, zum anderen muss man »configure« noch den Parameter »--with-jemalloc« auf den Weg geben. Neben den angesprochenen Parametern kennt das »configure« -Skript natürlich auch alle aus Ngnix geerbten, die wiederum »./configure --help« auflistet.

Ob der fertig übersetzte und installierte Tengine-Server funktioniert, testet man kurz mit »/usr/local/nginx/sbin/nginx -v« . Der Befehl sollte wie in Abbildung 2 die Versionsnummer ausspucken.

comments powered by Disqus

Artikel der Woche

Loadtests ohne Server

Für Loadtests der eigenen Server bietet sich die Cloud an, denn kurz getaktet lassen sich dort viele Rechnerinstanzen starten, die das eigene Budget nur wenig belasten. Noch flexibler, günstiger und besser skalierbar sind Tests mit einer Serverless-Infrastruktur wie AWS Lambda. Wir führen vor, wie Sie dort mit Serverless Artillery eigene Loadtests starten. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite