Frage Bestellung: 1. nginx 2. Lack 3. haproxy 4. Webserver?


Ich habe Leute gesehen, die empfehlen, all diese in einem Flow zu kombinieren, aber sie scheinen viele überlappende Funktionen zu haben, also würde ich gerne herausfinden, warum du vielleicht 3 verschiedene Programme durchgehen musst, bevor du deinen eigentlichen Webserver betrittst.

nginx:

  • ssl: ja
  • komprimieren: ja
  • Cache: ja
  • Backend-Pool: Ja

Lack:

  • ssl: nein (Stunnel?)
  • komprimieren:?
  • Cache: Ja (Hauptfunktion)
  • Backend-Pool: Ja

haproxy:

  • ssl: nein (Stunnel)
  • komprimieren:?
  • Cache: Nein
  • Backend-Pool: Ja (Hauptfunktion)

Ist die Absicht, all diese vor Ihren Haupt-Webservern zu verketten, nur um einige ihrer Hauptvorteile zu erhalten?

Es scheint ziemlich fragil zu sein, so viele Dämonen zusammenströmen zu sehen, die ähnliche Dinge tun.

Was sind Ihre Bereitstellungs- und Bestelleinstellungen und warum?


47
2017-11-19 17:52


Ursprung


Varnish hat jetzt SSL-Unterstützung: siehe blog.exceliance.fr/2012/09/10/ ... - MiniQuark
willst du HAProxy sagen? - Luis Lobo Borobia
Nginx scheint alles zu haben, also würde ich einfach nginx benutzen. - Seun Osewa


Antworten:


Einfach gesagt..

HaProxy ist der beste Opensource Loadbalancer auf dem Markt.
Lack ist der beste Open Source Statische File Cacher auf dem Markt.
Nginx ist der beste OpenSource Webserver auf dem Markt.

(natürlich ist das meine und viele andere Leute Meinung)

Im Allgemeinen durchlaufen jedoch nicht alle Abfragen den gesamten Stack.

Alles läuft durch haproxy und nginx / multiple nginx.
Der einzige Unterschied besteht darin, dass Sie den Lack für statische Anforderungen "aufschrauben".

  • Jede Anfrage wird für Redundanz und Durchsatz belastet (gut, das ist skalierbare Redundanz)
  • jede Anfrage nach statischen Dateien trifft zuerst den Lack-Cache (gut, das ist schnell)
  • jede dynamische Anfrage geht direkt zum Backend (toll, Lack wird nicht benutzt)

Insgesamt passt dieses Modell zu einer skalierbaren und wachsenden Architektur (nehmen Sie haproxy heraus, wenn Sie nicht mehrere Server haben)

Hoffe das hilft: D

Hinweis: Ich werde Pound auch für SSL-Abfragen einführen: D
Sie können einen Server haben, der SSL-Anfragen entschlüsselt und Standardanforderungen an den Backend-Stack weiterleitet: D (Er macht den gesamten Stack schneller und einfacher)


59
2017-11-19 18:26



Sehr interessant, besonders der Teil über den Entschlüsselungsserver. +1 - Gerry
Tolle Antwort. Ich frage mich, was vor allem sitzt? Ist es HAProxy oder Nginx? - John
@John: [Client -> HAProxy -> Varnish -> Nginx -> Statischer Inhalt] oder [Client -> HAProxy -> Nginx (optional) -> Application Server (dynamischer Inhalt)] - MiniQuark
Warum würden Sie statisch zwischenspeichern und dynamisch dienen? Nginx ist blitzschnell für die Bereitstellung von statischen Dateien. Ich bevorzuge einen Stack wie [HAProxy -> Nginx] für statische und [HAProxy -> Nginx -> Varnish -> Apache] um einen Cache auf dem Dynamic zu implementieren. Beenden von SSL am Load Balancer, wie Sie es bei dedizierten Endknoten angegeben haben. - Steve Buzonas


Vorwort

Update im Jahr 2016. Die Dinge entwickeln sich, alle Server werden besser, sie alle unterstützen SSL und das Internet ist erstaunlicher denn je.

Sofern nicht anders angegeben, richtet sich das Folgende an Fachleute in Unternehmen und Start-ups, die Tausende bis Millionen von Benutzern unterstützen.

Diese Werkzeuge und Architekturen erfordern eine Menge Benutzer / Hardware / Geld. Sie können dies in einem Heimlabor versuchen oder einen Blog laufen lassen, aber das macht nicht viel Sinn.

Beachten Sie generell, dass Sie das möchten halte es einfach. Jede angehängte Middleware ist eine weitere kritische Middleware-Komponente, die gewartet werden muss. Perfektion wird nicht erreicht, wenn nichts hinzuzufügen ist, sondern wenn nichts mehr zu entfernen ist.

Einige allgemeine und interessante Bereitstellungen

HAProxy (Balancing) + Nginx (PHP-Anwendung + Caching)

Der Webserver ist Nginx läuft PHP. Wenn nginx bereits vorhanden ist, kann es auch das Caching und die Umleitungen übernehmen.

HAProxy ---> nginx-php
A       ---> nginx-php
P       ---> nginx-php
r       ---> nginx-php
o       ---> nginx-php
x       ---> nginx-php
y       ---> nginx-php

HAProxy (Balancing) + Varnish (Caching) + Tomcat (Java-Anwendung)

HAProxy kann basierend auf dem Anfrage-URI (* .jpg * .css * .js) nach Varnish umleiten.

HAProxy ---> tomcat
A       ---> tomcat
        ---> tomcat
P       ---> tomcat <----+
r       ---> tomcat <---+|
o                       ||
x       ---> varnish <--+|
y       ---> varnish <---+

HAProxy (Balancing) + nginx (SSL zum Host und Caching) + Webserver (Anwendung)

Die Webserver sprechen kein SSL, obwohl jeder SSL (SSL) sprechen muss (insbesondere diese HAProxy-WebServer-Verbindung mit privaten Benutzerinformationen, die durch EC2 gehen). Das Hinzufügen eines lokalen Nginx ermöglicht es, SSL zum Host zu bringen. Sobald nginx da ist, kann es auch etwas Caching und URL-Neuschreiben geben.

Hinweis: Port-Umleitung 443: 8080 passiert, gehört aber nicht zu den Features. Es hat keinen Sinn, eine Port-Umleitung zu machen. Der Load Balancer könnte direkt mit dem Webserver 8080 kommunizieren.

          (nginx + webserver on same host)
HAProxy ---> nginx:443 -> webserver:8080
A       ---> nginx:443 -> webserver:8080
P       ---> nginx:443 -> webserver:8080
r       ---> nginx:443 -> webserver:8080
o       ---> nginx:443 -> webserver:8080
x       ---> nginx:443 -> webserver:8080
y       ---> nginx:443 -> webserver:8080

Middleware

HAProxy: Der Lastenausgleicher

Haupteigenschaften:

  • Lastenausgleich (TCP, HTTP, HTTPS)
  • Mehrere Algorithmen (Round-Robin, Quell-IP, Header)
  • Sitzungspersistenz
  • SSL-Kündigung

Ähnliche Alternativen: nginx (Mehrzweck-Webserver konfigurierbar als Load Balancer)
Verschiedene Alternativen: Cloud (Amazon ELB, Google Load Balancer), Hardware (F5, Fortinet, Citrix-Netscaler), Sonstiges & Weltweit (DNS, Anycast, CloudFlare)

Was macht HAProxy und wann müssen Sie es verwenden?
Wann immer Sie Lastausgleich benötigen. HAProxy ist die Lösung.

Außer Wenn du sehr billig ODER schnell & dreckig willst ODER du nicht über die nötigen Fähigkeiten verfügst, kannst du ein ELB verwenden: D

Außer Wenn Sie im Bankwesen / Regierung / ähnlichem sind und Ihr eigenes Rechenzentrum mit harten Anforderungen (dedizierte Infrastruktur, zuverlässiges Failover, 2 Ebenen Firewall, Auditing, SLA, um x% pro Minute Ausfallzeit zu bezahlen) in Anspruch nehmen können Stellen Sie 2 F5 auf das Rack mit den 30 Anwendungsservern.

Außer Wenn Sie über 100k HTTP (S) [und Multi-Sites] gehen wollen, dann MÜSSEN Sie haben Vielfache HAProxy mit einer Schicht von [globalem] Lastenausgleich vor ihnen (Cloudflare, DNS, Anycast). Theoretisch könnte der Global Balancer direkt mit den Webservern kommunizieren, um HAProxy zu enttäuschen. Normalerweise sollten Sie jedoch HAProxy (s) als öffentlichen Einstiegspunkt (e) in Ihr Rechenzentrum halten und die erweiterten Optionen so anpassen, dass sie fair auf die Hosts verteilt sind und die Varianz minimiert wird.

Persönliche Meinung: Ein kleines, geschlossenes Open-Source-Projekt, das ausschließlich für EINEN WAHREN ZWECK gedacht ist. Unter den einfachsten Konfigurationen (ONE-Dateien) ist die nützlichste und zuverlässigste Open-Source-Software, die ich in meinem Leben kennengelernt habe.

Nginx: Apache, der nicht lutscht

Haupteigenschaften:

  • Webserver HTTP oder HTTPS
  • Führen Sie Anwendungen in CGI / PHP / anderen aus
  • URL-Umleitung / Neuschreiben
  • Zugangskontrolle
  • HTTP-Header-Manipulation
  • Zwischenspeichern
  • Reverseproxy

Ähnliche Alternativen: Apache, Lighttpd, Kater, Gunicorn ...

Apache war der De-facto-Webserver, auch bekannt als ein riesiger Clusterfuck aus Dutzenden von Modulen und Tausenden von Zeilen httpd.confoben auf einer gebrochenen Anfrageverarbeitungsarchitektur. nginx redo alles, mit weniger Modulen, (etwas) einfacheren Konfiguration und einer besseren Core-Architektur.

Was macht nginx und wann brauchst du es?
Ein Webserver soll Anwendungen ausführen. Wenn Ihre Anwendung für die Ausführung auf nginx entwickelt wurde, haben Sie bereits nginx, und Sie können auch alle seine Funktionen verwenden.

Außer Wenn Ihre Anwendung nicht auf nginx ausgeführt werden soll und nginx nirgends in Ihrem Stack zu finden ist (Java-Shop für irgendjemanden?), dann hat nginx wenig Sinn. Die Webserver-Funktionen sind wahrscheinlich auf Ihrem aktuellen Webserver vorhanden und die anderen Aufgaben werden besser durch das entsprechende dedizierte Tool (HAProxy / Varnish / CDN) gehandhabt.

Außer Wenn Ihrem Webserver / Anwendung Funktionen fehlen, schwer zu konfigurieren sind und / oder Sie lieber den Job als gucken (Gunicorn jemand?), dann können Sie ein Nginx vor Ort (dh lokal auf jedem Knoten) um URL-Umschreiben durchführen , sende 301 Umleitungen, erzwinge Zugriffskontrolle, stelle SSL-Verschlüsselung bereit und bearbeite HTTP-Header on-the-fly. [Dies sind die Features, die von einem Webserver erwartet werden]

Lack: Der Caching-Server

Haupteigenschaften:

  • Zwischenspeichern
  • Erweitertes Caching
  • Feinkörniges Cachen
  • Zwischenspeichern

Ähnliche Alternativen: nginx (Mehrzweck-Webserver konfigurierbar als Caching-Server)
Verschiedene Alternativen: CDN (Akamai, Amazon CloudFront, CloudFlare), Hardware (F5, Fortinet, Citrix Netscaler)

Was macht Varnish und wann müssen Sie es verwenden?
Es wird zwischengespeichert und nur zwischengespeichert. Es ist normalerweise nicht die Mühe wert und es ist Zeitverschwendung. Versuchen Sie stattdessen CDN. Beachten Sie, dass das Caching das letzte ist, was Sie beim Ausführen einer Website beachten sollten.

Außer Wenn Sie eine Website ausschließlich über Bilder oder Videos betreiben, sollten Sie sich gründlich mit CDN beschäftigen und ernsthaft über Caching nachdenken.

Außer Wenn Sie gezwungen sind, Ihre eigene Hardware in Ihrem eigenen Rechenzentrum zu verwenden (CDN ist keine Option) und Ihre Webserver sind schrecklich in der Bereitstellung statischer Dateien (das Hinzufügen weiterer Webserver ist nicht hilfreich), dann ist Varnish der letzte Ausweg.

Außer Wenn Sie eine Website mit größtenteils statischen, aber dennoch komplexen, dynamisch generierten Inhalten haben (siehe die folgenden Abschnitte), kann Varnish Ihren Webservern viel Rechenleistung einsparen.

Das statische Caching wird 2016 überbewertet

Caching ist fast konfigurationsfrei, kostenlos und zeitfrei. Abonnieren Sie einfach CloudFlare oder CloudFront oder Akamai oder MaxCDN. Die Zeit, die ich brauche, um diese Zeile zu schreiben, ist länger als die Zeit, die ich brauche, um das Caching einzurichten UND das Bier, das ich in der Hand halte, ist teurer als das mittlere CloudFlare-Abonnement.

Alle diese Dienste funktionieren out of the box für statische * .css * .js * .png und mehr. In der Tat, sie ehren meist die Cache-Control Direktive im HTTP-Header. Der erste Schritt des Caching besteht darin, Ihre Webserver so zu konfigurieren, dass sie korrekte Cachedirektiven senden. Egal welches CDN, welcher Varnish, welcher Browser ist in der Mitte.

Leistungsaspekte

Varnish wurde zu einer Zeit erstellt, als der durchschnittliche Webserver erstickte, um ein Katzenbild in einem Blog zu zeigen. Heutzutage kann eine einzelne Instanz des durchschnittlichen modernen multi-threaded asynchronen buzzword-gesteuerten Webservers Kätzchen zuverlässig an ein ganzes Land liefern. Mit freundlicher Genehmigung von sendfile().

Ich habe für das letzte Projekt, an dem ich gearbeitet habe, einige schnelle Leistungstests durchgeführt. Eine einzige Tomcat-Instanz könnte 21.000 bis 33.000 statische Dateien pro Sekunde über HTTP liefern (Testdateien von 20B bis 12kB mit unterschiedlichen HTTP / Client-Verbindungen). Der ausgehende Datenverkehr liegt jenseits von 2,4 Gb / s. Die Produktion wird nur 1 Gb / s Schnittstellen haben. Kann nicht besser als die Hardware, keinen Sinn darin, gar Varnish auszuprobieren.

Caching Complex Ändert dynamischen Inhalt

CDN- und Caching-Server ignorieren normalerweise die URL mit Parametern wie ?article=1843Sie ignorieren alle Anfragen mit Sitzungs - Cookies oder authentifizierten Benutzern und ignorieren die meisten MIME - Typen einschließlich der application/json von /api/article/1843/info. Es gibt Konfigurationsmöglichkeiten, die aber nicht feinkörnig sind, sondern "alles oder nichts".

Varnish kann über benutzerdefinierte komplexe Regeln verfügen (siehe VCL), um festzulegen, was zwischengespeichert werden kann und was nicht. Mit diesen Regeln können bestimmte Inhalte nach URI, Headern und dem aktuellen Benutzersitzungscookie sowie nach MIME-Typ und Inhalt ALL-TOGETHER zwischengespeichert werden. Das kann Webservers eine Menge Rechenleistung für ein sehr spezifisches Lademuster einsparen. Das ist, wenn Varnish handlich und FANTASTISCH ist.

Fazit

Ich brauchte eine Weile, um all diese Stücke zu verstehen, wann ich sie benutzen und wie sie zusammenpassen. Hoffe, das kann dir helfen.

Das ist ziemlich lang (6 Stunden zu schreiben. OMG!: O). Vielleicht sollte ich einen Blog oder ein Buch darüber starten. Fun fact: Es scheint keine Begrenzung für die Länge der Antwort zu geben.


28
2018-05-22 18:37



Die Länge der Antwort ist begrenzt, aber du musst noch ein paar Bücher schreiben, um sie zu erreichen. - Michael Hampton♦
Ein Punkt, der in Bezug auf das Caching erwähnenswert ist: Es ist ein leistungsfähiger Weg, um die Leistung einer Site zu verbessern, wenn Sie die Kontrolle über die Anwendung nicht haben; vor allem, wenn die Anwendung wirklich blöd Cache-Header (Enterprise-Anwendungen jemand?) hat. Sie müssen jedoch authentifizierten Ressourcen viel mehr bewusst sein. - Cameron Kerr
@ user5994461 Ich würde gerne Ihren Blog lesen. Tolle Antwort! - oxalorg


Es ist wahr, dass die 3 Werkzeuge gemeinsame Eigenschaften haben. Die meisten Setups sind in Ordnung mit jeder Kombination von 2 unter den 3. Es hängt davon ab, was ihr Hauptzweck ist. Es ist üblich, etwas Caching zu opfern, wenn Sie wissen, dass Ihr Anwendungsserver statisch ist (zB: nginx). Es ist üblich, einige Load-Balancing-Funktionen zu opfern, wenn Sie Dutzende oder Hunderte von Servern installieren und sich nicht darum kümmern, das Beste aus ihnen herauszuholen oder Probleme zu beheben. Es ist üblich, einige Webserver-Funktionen zu opfern, wenn Sie eine verteilte Anwendung mit vielen Komponenten überall ausführen möchten. Trotzdem bauen einige Leute interessante Farmen mit allen von ihnen.

Sie sollten daran denken, dass Sie von 3 festen Produkten sprechen. Im Allgemeinen müssen Sie sie nicht ausbalancieren. Wenn Sie Front-SSL benötigen, dann ist Nginx zuerst als Reverse-Proxy in Ordnung. Wenn Sie das nicht brauchen, dann ist Lack auf der Vorderseite in Ordnung. Dann können Sie Haproxy setzen, um Ihre Apps auszubalancieren. Manchmal möchten Sie je nach Dateityp oder Pfad auch zu anderen Serverfarmen auf dem haproxy selbst wechseln.

Manchmal muss man sich vor schweren DDoS-Attacken schützen, und Haproxy vorne ist besser geeignet als die anderen.

Im Allgemeinen sollten Sie sich keine Gedanken darüber machen, welchen Kompromiss Sie zwischen Ihren Entscheidungen eingehen sollten. Sie sollten wählen, wie Sie sie zusammenstellen, um die beste Flexibilität für Ihre Bedürfnisse zu erhalten. Selbst wenn Sie mehrere von ihnen mehrere stapeln, kann es manchmal richtig sein, abhängig von Ihren Bedürfnissen.

Hoffentlich hilft das!


19
2017-11-20 18:45



+1 für HAProxy - der Autor antwortet auf Fragen zu Serverfehler. Vielen Dank. - Joel K
Arenstar: Hast du eines dieser Tools geschrieben? Willy Tarreau ist der Hauptentwickler von HAProxy. - Joel K
Danke für diesen Willy. Du hast meine Frage an Arenstar oben beantwortet. - John
Beachten Sie, dass der aktuelle Entwicklungscode für HAProxy jetzt SSL enthält. - Joel K


Alle anderen Antworten sind vor 2010 und fügen daher einen aktualisierten Vergleich hinzu.

Nginx

  • Ein vollständiger Webserver, andere Funktionen können ebenfalls verwendet werden. ZB: HTTP Kompression
  • SSL-Unterstützung
  • Sehr leicht, da Nginx von Anfang an leicht war.
  • In der Nähe von Varnish Caching-Leistung
  • Nahe bei der HAProxy-Lastausgleichsleistung

Lack

  • Am besten für komplexe Caching-Szenarien und Integration mit dem Anwendungen.
  • bester statischer Dateicacher
  • Keine SSL-Unterstützung
  • Speicher und CPU Esser

Haproxy

  • Der beste Loadbalancer für Spitzenlastenausgleichsfunktionen, vergleichbar mit Hardware Loadbalancer
  • SSL wird seit 1.5.0 unterstützt
  • Einfacher, da es nur ein TCP-Proxy ohne HTTP-Implementierung ist macht es schneller und weniger fehleranfällig.

Die beste Methode scheint es zu sein, alle in einer angemessenen Reihenfolge zu implementieren.

Jedoch für Allzweck, Nginx ist am besten da Sie für alle eine überdurchschnittliche Leistung erzielen: Caching, Reverseproxying, Lastenausgleichmit sehr geringem Aufwand für die Ressourcennutzung. Und dann haben Sie SSL und vollständige Webserver-Funktionen.


13
2017-11-30 11:25





Varnish unterstützt den Lastenausgleich: http://www.varnish-cache.org/trac/wiki/LoadBalancing

Nginx unterstützt den Lastenausgleich: http://wiki.nginx.org/NginxHttpUpstreamModule

Ich würde das einfach mit Lack + Stunnel konfigurieren. Wenn ich nginx aus einem anderen Grund brauchte, würde ich einfach nginx + lack verwenden. Sie können Nginx akzeptieren SSL-Verbindungen und Proxy sie zu lackieren, dann haben Lack sprechen mit Nginx über http.

Einige Leute werfen vielleicht Nginx (oder Apache) in den Mix, weil dies etwas allgemeinere Werkzeuge als Varnish sind. Wenn Sie z. B. Inhalte (z. B. XDV, Apache-Filter usw.) auf der Proxy-Ebene transformieren möchten, benötigen Sie eine solche, da Varnish das nicht selbst durchführen kann. Einige Leute sind vielleicht mit der Konfiguration dieser Tools vertrauter, daher ist es einfacher, Varnish als einfachen Cache zu verwenden und den Lastenausgleich auf einer anderen Ebene durchzuführen, da sie Apache / nginx / haproxy bereits als Load Balancer kennen.


5
2017-11-19 17:57



Richtig - "Backend-Pool" sollte darauf hinweisen, dass alle drei Lastenausgleichsfunktionen haben. Nach meiner ersten Untersuchung scheint HAProxy die am besten einstellbaren Load-Balancing-Optionen zu haben. - Joel K
Das hört sich vernünftig an, da es als Lastausgleichswerkzeug entwickelt wurde. Auf der anderen Seite sind die Load-Balancing-Funktionen von Varnish ziemlich gut. Wenn Sie einen Prozess aus dieser Mischung entfernen, erhalten Sie eine einfachere Konfiguration mit weniger Latenz. - larsks