Lange Abfrageoptionen: Nginx, PHP, Node.js

8

Ich entwerfe eine Long-Polling-App, um kleine Änderungen sehr schnell an eine große Anzahl von Benutzern zu senden. Die App wird zusammen mit einer Website laufen, die ein ziemlich normales CMS hat. Sie werden beide auf einem Server laufen, und damit beginnt auch die Datenbank.

Ich komme sehr viel von einer LAMP-Umgebung und bin definitiv ein Entwickler und kein Systemadministrator. Das heißt, ich habe keine Angst, einige neue Dinge auszuprobieren.

Ich habe den Tag damit verbracht, meine Möglichkeiten zu erforschen, und ich hoffe, dass die Leute einige Fragen beantworten und mir einige Empfehlungen geben können.

Ich habe es auf diese beschränkt:

%Vor%

Also die Fragen:

  1. Wie behandelt Nginx die Nicht-Multi-Threading-Fähigkeit von PHP;). Wird PHP so ein Engpass sein wie Apache für lange Abfragen?
  2. Ich habe gehört, dass ich vorgeschlagen habe, dass ich nginx als Reverse Proxy vor Apache und Node.js verwende, ist das eine bessere Lösung als nur nginx? Wenn ja, warum?
  3. Welche Option haben Sie verwendet / würden Sie empfehlen?

Denken Sie daran, dass die einfache Einrichtung ein Faktor sein könnte, ich bin ziemlich zufrieden mit Apache, aber ich habe nur mit Node gespielt und ich habe Nginx nie installiert.

Ich werde gerne klären, ob jemand sie braucht.

    
thelastshadow 12.01.2012, 17:17
quelle

2 Antworten

3

Ich würde Option C verwenden: und würde eine Option D vorschlagen:

Option D:

  • Keepalived mit HAProxy für Load Balancing (LB)
  • Nginx für statische und PHP-Skripte mit PHP-FPM, APC und Redis zum Caching
  • Node.js (und andere Knotenmodule) für dynamischen Echtzeit-Inhalt

Wir verwenden derzeit die ersten beiden Teile von Option D, die aus einem LAMP-Hintergrund stammen, und implementieren Node.js derzeit, um einige unserer (Systemsteuerungs-) Echtzeit-Apps zu bedienen. HAProxy macht genau das: Verteilt den Datenverkehr an alle meine Backend-Server, anstatt Nginx dabei zu haben. Der Grund dafür ist, dass wir viele Backend-HTTP / TCP / andere Server haben und wir redundantes und automatisches Failover zu diesen Servern benötigen. LB ist einfach zu implementieren und funktioniert gut.

Bisher ausgezeichnete Ergebnisse. Persönlich war die Lernkurve der Knoten bisher aufgrund fehlender Dokumentation schwierig, aber es gibt dort eine sehr dynamische Gemeinschaft.

Hoffe, das hilft.

    
Nic Chapleau 02.03.2012 04:12
quelle
1

Ich persönlich würde nur Node.js verwenden. Statt einer langen Umfrage können Sie neue Informationen an alle verfügbaren Clients senden. Node.JS ist extrem schnell bei der Bereitstellung von Echtzeit-Inhalten und ist in der Lage, alles in einem Paket zu erledigen. Auch die Clientseite und die Serverseite sind in JavaScript geschrieben, was das Entwickeln, Debuggen und Liefern vereinfacht. Als Entwickler können Sie die Vorteile sehen.

Hier ist ein Beispiel für eine App, die Node.js und die Module express, jade und NowJS verwendet. Natürlich kann dies auch in Kombination mit Ihrem CMS auf Apache und Node.JS mit dem dynamischen Inhalt verwendet werden. entweder mit Nginx oder einem Knoten-Skript, das als Reverse-Proxy vor diesem Skript und Apache fungiert.

Eine einfache Chat-Anwendung

Server.js

%Vor%

chat.jade

%Vor%

Ja, das ist WIRKLICH so einfach und würde nicht viel mehr Codezeilen benötigen, um daraus eine voll funktionsfähige Chat-Anwendung zu machen. Tatsächlich würden Ihr Markup und CSS mehr Zeilen benötigen als der Anwendungscode. Erstaunlich!

    
Pastor Bones 12.01.2012 22:59
quelle