Warum Mongrel2 verwenden?

76

Ich bin verwirrt, welchen Zweck Mongrel2 erfüllt / bereitstellt, den Nginx noch nicht erfüllt.

(Ja, ich habe das Handbuch gelesen, aber ich muss zu ein Noob sein, um zu verstehen, wie es sich grundlegend von Nginx unterscheidet.)

Mein aktueller Webanwendungsstapel ist:
- nginx : Webserver
- Lua : Programmiersprache
- FastCGI + LuaJIT : um nginx mit Lua zu verbinden
- Postgres : Datenbank

frooyo
quelle
1
macht das gleiche, nur anders. Wählen Sie die, die Sie mögen
Javier

Antworten:

116

Wenn Sie nur eines nennen könnten, wäre Mongrel2 auf ZeroMQ aufgebaut, was bedeutet, dass die Skalierung Ihres Webservers nie einfacher war.

Wenn eine Anfrage eingeht, erhält Mongrel2 sie (hier nichts Ungewöhnliches, wie bei NginX und jedem anderen httpd). Als nächstes verteilt Mongrel2 die Aufgabe des Kompilierens einer Antwort an n (ZeroMQ-fähige) Backends, wartet darauf, dass diese die Arbeit erledigen, empfängt Ergebnisse, kompiliert die Antwort und sendet sie an den Client.

Die Magie liegt nun in der Tatsache, dass n eine beliebige Zahl sein kann und dass jedes von n in einer beliebigen Sprache geschrieben werden kann, wie von ZeroMQ (20 oder so) plus unterstützt. Alles geht über das Netzwerk, sodass jedes n eine dedizierte Box sein kann , möglicherweise in einem anderen Rechenzentrum.

Mit anderen Worten: Mit NginX und allem anderen, was Sie für die Skalierbarkeit in Ihrer Logikebene tun müssen, können Sie mit Mongrel2 (aus Sicht des Anforderungs- / Antwortzyklus) genau dort beginnen, wo die Anforderung auf Ihre Infrastruktur trifft, und nicht über httpd Lassen Sie die Komplexität bis zu Ihrer Logikstufe vordringen, wodurch die Komplexität um mindestens eine Größenordnung nach oben erhöht wird.

Tom
quelle
@ MarkusGattol Was ist der Zweck von Fastcgi? Ich kann das damit machen. In jeder Sprache, nein?
Abdala Cerqueira
13

Sie sollten sich die Stärken der einzelnen ansehen und sich je nach Anwendungsfall für eine oder beide entscheiden.

Während es so aussieht, als ob Nginx alles tut, was mongrel2 in der Oberfläche bietet, werden Sie feststellen, dass es große Unterschiede im Fokus zwischen den beiden gibt.

Nginx glänzt als Front-End-Webserver, der Anfragen an Ihre Back-End-Webserver / App-Server weiterleiten und auch statische Inhalte bereitstellen kann.

Mongrel2 ist eine geringfügige Änderung im Stapel. Wie bereits erwähnt, beruht die Leistung auf der Verwendung von zeromq als Transportschicht zwischen ihm und den Backend-App-Servern. Es kann dynamische Anforderungs-URLs (App-Anforderungen) bereitstellen und den Berechnungsteil der Aufgabe mithilfe von zeromq an verschiedene Backends weiterleiten. Mit mongrel2 können Sie nicht nur http, Websockets usw., sondern auch andere Protokolle (wenn Sie dazu geneigt sind) bereitstellen ) alle vom selben Server. Der Benutzer würde nie erfahren, dass Teile der App von verschiedenen Backends bereitgestellt werden.

Wenn sich Ihre Anforderungen an die Funktionalität Ihrer Webanwendung ständig ändern oder Sie Dinge wie Streaming, die Möglichkeit, im Backend in verschiedenen Sprachen zu codieren usw. hinzufügen möchten, würde ich mir definitiv mongrel2 ansehen. Oder haben Sie sogar einen Hybrid, bei dem Sie nginx / haproxy / varnish für statische Dateien und das Caching verwenden und alles andere an mongrel2 gerichtet ist.

Lapax
quelle