Wir haben eine Java EE-basierte Webanwendung, die auf einem Glassfish- App-Server-Cluster ausgeführt wird. Der eingehende Datenverkehr besteht hauptsächlich aus REST-konformen Anforderungen für XML-basierte Darstellungen unserer Anwendungsressourcen. Möglicherweise entfallen jedoch 5% des Datenverkehrs auf JSON- oder XHTML / CSS-basierte Darstellungen.
Wir untersuchen jetzt Lastausgleichslösungen, um eingehenden Datenverkehr auf die Glassfish-Instanzen im Cluster zu verteilen. Wir untersuchen auch, wie der Cluster mit memcached, einer im Speicher verteilten Hash-Map, entladen werden kann, deren Schlüssel die REST-Ressourcennamen sind (z. B. "/ user / bob", "/ group / jazzlovers") und deren Werte die entsprechenden XML-Darstellungen.
Ein vielversprechender Ansatz ist es, beide Fliegen mit einer Klappe zu schlagen und den leichten, schnellen Nginx- HTTP-Server / Reverse-Proxy zu verwenden. Nginx behandelt jede eingehende Anfrage, indem es zuerst den URI im Speicher nachschaut, um festzustellen, ob dort bereits eine nicht abgelaufene XML-Darstellung vorhanden ist. Wenn nicht, sendet nginx die Anfrage an eine der Glassfish-Instanzen. Das Nginx-Memcached-Modul wird in dieser kurzen Beschreibung beschrieben .
Wie ist Ihr Gesamteindruck mit Nginx und Memcached auf diese Weise, wie glücklich sind Sie mit ihnen? Welche Ressourcen fanden Sie am hilfreichsten, um mehr über sie zu erfahren? Wenn Sie sie ausprobiert haben und sie nicht Ihren Zwecken entsprachen, warum nicht, und was haben Sie stattdessen verwendet?
Hinweis: Hier ist eine verwandte Frage . Bevor ich von ServerFault wusste, fragte ich dies bei StackOverflow .
Edit: Alle Antworten hier waren bisher recht hilfreich, obwohl es keine direkten Erfahrungen gab. Diese Antwort tauchte schließlich in StackOverflow auf und war im Setup von nginx / memcached ziemlich optimistisch.
Antworten:
Sie sollten wirklich einen Cache-Server vor Ihren Webservern verwenden. Ich empfehle Varnish-Cache. Wir verwenden es bei der Arbeit mit der größten und meistbesuchten Website in Skandinavien. Wir haben 13 hoch beladene Squid-Boxen durch 1 Lack-Box und 1 Ersatz-Box ersetzt.
Ich habe eine einfache App auf meiner privaten Website einem Benchmarking unterzogen und sie stieg von 9 Anfragen pro Sekunde auf über 2000.
Sie entscheiden, wie lange die Daten im Speicher bleiben sollen. Sie können einen Vorgang bis zum Ende der Zeit ausführen und dann einfach eine http-Löschanforderung an den Cache-Server senden, wenn sich die Daten ändern.
quelle
Meine persönliche Meinung ist aus Erfahrung, dass Sie, wenn Sie einen Load-Balancer verwenden, diese Box vollständig auf Load-Balancing-Funktionen beschränken möchten. Wenn der Load-Balancer den Inhalt auch aus einem Cache bereitstellt, wird die Load-Balancing-Funktionalität in Situationen mit hoher Last beeinträchtigt (mehr Verbindungen bleiben länger aktiv, was die Gesamtkapazität und den Durchsatz verringert).
Ich würde empfehlen, dass die App selbst die Suche durchführt und den zwischengespeicherten Inhalt bereitstellt und den Load Balancer seine Arbeit machen lässt. Allerdings ist nginx beim Load-Balancing nicht perfekt - es bietet nur einen sehr einfachen Round-Robin-Algorithmus. Ich würde stattdessen Haproxy empfehlen. Wenn Sie vorab SSL-Entschlüsselungsdienste benötigen, funktioniert nginx meiner Erfahrung nach gut, wenn Sie vor haproxy sitzen.
quelle
Ich denke, Sie werden in eine Sackgasse geraten, falls Sie Dinge wie Lastausgleich, hohe Verfügbarkeit usw. benötigen.
Denken Sie auch an diese Situation: Wenn der Benutzer über eine andere Authentifizierungsseite verfügt, werden für jeden Benutzer zusätzliche Funktionen bereitgestellt und individuell angepasst. URLs sind für die Verlinkung usw. gleich. Beispielsweise wird auf einer Site, auf der der authentifizierte Benutzer seinen Namen / sein Captcha nicht für Kommentare eingeben muss, oder auf einer Site Ihr Benutzername oben angezeigt, wenn Sie angemeldet sind (wie bei Serverfault). In solchen Fällen kann nginx nicht verwendet werden, da Sie nicht zwischen authentifizierten und nicht authentifizierten Benutzern unterscheiden können.
Wenn Sie kein SSL benötigen, empfehle ich Ihnen, Varnish zu verwenden. Es wurde als HTTP-Beschleuniger konzipiert, nicht als Webserver oder Proxy. Wenn Sie SSL benötigen, führen Sie nginx als SSL-Beschleuniger aus und lackieren Sie es als reinen HTTP-Beschleuniger, da Varnish nicht mit SSL umgehen kann.
Ich denke, dass die Wahl des Caching-Servers anwendungsspezifisch ist und Sie können keine verallgemeinerten Kommentare dazu abgeben, ohne die App gründlich zu analysieren.
quelle
Meine Wahl ist Haproxy. Sehr kleiner und sehr schneller Reverse-Proxy, aber kein Cache-Proxy! Ich benutze für mein Cache-System "Squid Web Proxy"
Diese Arbeit perfekt für mein Web-System
quelle