Ich habe einen Server mit mehreren Domänen und Anwendungen, die alle über Apache ausgeführt werden. Im Moment ist alles in Ordnung, aber ich habe vor, eine sehr leistungsintensive Webanwendung (unter Verwendung von C ++ mit CPPCMS) zu entwickeln, beginnend mit meinem Server zum Testen, und möglicherweise erst dann einen separaten Server für diese Anwendung, wenn sie fertig ist.
Wie auch immer, ich habe viel über NGinx gehört, das performanter zu sein scheint als Apache, also habe ich mich gefragt, ob es sich lohnt, für dieses neue Projekt damit zu arbeiten. Es ist mir nicht klar, weil ich nicht weiß, welche Art von Leistungsengpass NGinx genau behebt.
Ich bin kein Apache-Power-User, ich bin ein schlechter Linux-Administrator und ich entwickle nicht viel Web-Apps (aber ich habe Vorstellungen). Ich widme mich hauptsächlich dem Schreiben von Software, daher ist der Webserver-Teil für mich manchmal sehr dunkel. Jedes Mal, wenn ich eine Website über Apach konfigurieren muss, muss ich viel Zeit im Dokument verbringen, um sicherzustellen, dass nicht alles kaputt geht.
Davon abgesehen denke ich, dass ich auf dieser Seite viel besser werde, aber immer noch Rat brauche. Ich habe einige Nginx-Konfigurationsdateien herumgeschickt, und das scheint viel verständlicher zu sein als die Apache-Dateien, aber vielleicht irre ich mich?
Nach den von mir gesammelten Informationen ist NGinx die beste Wahl, wenn Sie einen Lastenausgleich wünschen. Wenn Ihre Anwendung also auf mehrere Computer verteilt ist, oder? Wenn ich über meine Anwendung für Scalling (und Leistung) nachdenke, sieht es so aus, als ob es das ist, was ich brauche, aber vielleicht muss ich mehr darüber wissen, wann es interessant ist, von Apache zu NGinx zu wechseln. Lohnt es sich auch für alle meine aktuellen Apps, auf NGinx zu wechseln? Wie viel kostet es? (Ich meine, ist es rechtzeitig teuer, von einem zum anderen zu wechseln?) Kann ich Apache und NGinx problemlos auf demselben Computer verwenden?
Randnotiz : Bitte fordern Sie mich nicht auf, interpretierte Sprachen anstelle von C ++ zu verwenden, da dies nicht mit der Frage zusammenhängt. Auf der CPPCSM-Begründungsseite erfahren Sie, welche Art von Anwendung davon profitieren kann. Ich verstehe die Nachteile (im Vergleich zu Apps in Ruby und Python, die ich bereits für weniger leistungshungrige Webapps verwende) sehr gut und bin damit einverstanden.
quelle
Nginx spricht sehr ( sehr ) können in der Regel erhalten viel höheren Durchsatz als Apache dank einem anderen architektonischen Ansatz für das Problem der Seiten an den Web - Serving. Nginx wurde auch hauptsächlich als Reverse-Proxy entwickelt und erfüllt diese Rolle außerordentlich gut (dies ist das Lastausgleichsbit, auf das Sie angespielt haben). Apache hingegen wurde für die Bereitstellung von Webseiten entwickelt und erhielt später die Möglichkeit zum Proxy.
Es gibt jedoch mit ziemlicher Sicherheit Bereiche, in denen Apache Nginx konstant übertreffen wird, während es andere gibt, in denen Nginx Apache ebenso konsequent übertreffen wird.
Die kurze Antwort lautet: Wenn Apache für Sie arbeitet, müssen Sie nicht wechseln. (Und ich sage dies als ehemaliger Apache-Benutzer, der ein vollständig konvertierter Nginx-Schüler geworden ist.) Erst wenn der Datenverkehr zu Ihrem Server ein Niveau erreicht, in dem Apache zu Ihrem Engpass wird (dies liegt in der Größenordnung von einigen Tausend gleichzeitigen Verbindungen). Dies hängt jedoch stark von Ihren Serverspezifikationen und anderen Serverlasten ab. Wenn Sie versuchen, Apache in einer ressourcenarmen Umgebung auszuführen, in der es kaum passt, bietet Ihnen der Wechsel zu Nginx einen soliden Vorteil.
Das heißt, wenn Sie zu Nginx wechseln möchten (was ich ermutige!), Dann machen Sie es. Wirst du irgendeinen Nutzen sehen? 9 mal von 10: Nein, das wirst du nicht. Sie haben jedoch erwähnt, dass Ihnen die Konfigurationsdateisprache von Nginx besser gefällt. Wenn Sie sich also wohler fühlen, Nginx als Apache zu konfigurieren, ist dies ein Vorteil für Sie! (Ich persönlich finde Apache-Konfigurationen im Allgemeinen einfacher zu lesen, aber das könnte daran liegen, dass ich viele, viele Jahre damit verbracht habe, sie zu lesen, und nur wenige Monate für Nginx aufgewendet wurden!)
Nebenbei bemerkt: Sie haben Ihren Wunsch erwähnt, eine Web-App in C ++ zu erstellen. Aus Gründen Ihrer Vernunft empfehle ich Ihnen dringend, stattdessen eine höhere Sprache wie PHP, Python oder sogar Java zu verwenden. Profilieren Sie dann Ihren Code und überlegen Sie, C ++ - basierte Module zu erstellen, um bestimmte Engpässe zu beheben (Python und PHP ermöglichen dies beide recht einfach; Sie wissen nichts über Java). Wenn Sie sich Sorgen um die Gesamtleistung machen, beachten Sie Folgendes: EVE Online, das größte nicht gehärtete MMORPG der Welt, basiert auf einer Python-Variante (Stackless Python), bei der nur Schlüsselkomponenten (z. B. die Grafikbibliotheken) in C ++ geschrieben sind. Wenn Python damit umgehen kann, kann es sicherlich auch mit Ihrer Web-App umgehen?
quelle
Niemand kann den Teil "Wann sollte ich wechseln?" Wirklich beantworten - dies hängt von Ihrer Auslastung, der Leistung Ihres eigenen Anwendungscodes usw. ab.
nginx verwendet einen einzelnen Prozess (oder eine sehr kleine Anzahl von Arbeitsprozessen), um alle Clientverbindungen mithilfe von Ereignis-E / A zu verarbeiten. Apache verfügt über mehrere "Multi-Processing-Module" , die sich jedoch alle eher auf viele, viele Prozesse / viele Threads konzentrieren. Infolgedessen verbraucht Apache im Allgemeinen mehr RAM und CPU als Nginx für die grundlegende Handhabung von HTTP-Verbindungen. Auf der C10K-Seite von Kegel erhalten Sie einen Überblick über die verschiedenen Ansätze zur Verbindungsabwicklung .
Ich würde dringend empfehlen, die grundlegende Webanwendung in einer höheren Sprache (Python oder vielleicht Ruby, Scala) auszuführen und eine Nachrichtenwarteschlange zu verwenden, um Arbeitstickets an Arbeitsmaschinen zu senden, die die "leistungsintensiven" Aufgaben asynchron erledigen.
Nginx ist ein guter Load Balancer. Aber es gibt viele Möglichkeiten in diesem Bereich .
Ja. Führen Sie sie einfach auf verschiedenen IP-Portnummern und / oder IP-Adressen aus.
quelle