Ich verwende lighttpd als Front-End-Proxy für meinen benutzerdefinierten HTTP-basierten Anwendungsserver. Ich muss lighttpd für eine große Anzahl (sagen wir etwa 5000) gleichzeitiger HTTP-Verbindungen konfigurieren, die eine lange Timeout- und KeepAlive-Einstellung haben. Jede Verbindung wird größtenteils im Leerlauf herumliegen. Stellen Sie sich einen HTTP-basierten Chat-Server vor.
Mein HTTP-Server verwendet eine http-push-ähnliche Interaktion mit Comet (siehe Wikipedia)http://en.wikipedia.org/wiki/Comet_(Programmierung)). Genauer gesagt sendet der AJAX-Client eine GET-Anfrage, auf die der Server nicht sofort antwortet. Stattdessen wartet der Server mit geöffneter HTTP-Verbindung, bis er dem Client einen neuen Status mitteilen muss, und sendet dann die HTTP-Antwort auf die GET-Anfrage. Der Client verarbeitet die Antwort und sendet dann eine weitere GET-Anfrage, die der Server wiederum nicht sofort beantwortet.
Für die Beantwortung dieser Frage ist es jedoch nicht erforderlich, die genaue Art der Anfragen anzugeben. Was im Wesentlichen benötigt wird, ist eine Lighttpd-Konfiguration, die es ermöglicht, gleichzeitig eine große Anzahl von HTTP-Proxy-Verbindungen mit geringer Bandbreite zu öffnen.
Wie konfiguriere ich lighttpd 1.4.19? Ich verwende Ubuntu 8.04. lighttpd leitet Anfragen per Proxy an meinen App-Server und an mein Django-Backend weiter.
Soll ich mich einfach hinsetzen
server.max-keep-alive-requests = 5000
und Feierabend machen?Sollte
server.max-fds = 5000
oder eine größere Zahl?Welche Speicherüberlegungen gibt es?
Vielleicht sollte ich meinen App-Server absichern, sodass er ohne den Lighttpd-Proxy verwendet werden kann (ich vertraue meiner Programmierung nicht so sehr darauf, dass er ohne einen zuverlässigen Proxy direkt auf die Welt ausgerichtet ist)?
Es wird behauptet, dass lighttpd 10.000 gleichzeitige Verbindungen verarbeiten kann. Wie konfiguriere ich es so, dass es die Hälfte dieser Zahl verarbeiten kann, von denen die meisten im Leerlauf sind?
Antwort1
Denken Sie daran, dass jede Proxy-Verbindung (mindestens) zwei FDs verwendet, einen zum Client und einen zum Server, der geproxied wird. Berücksichtigen Sie außerdem ca. 5-50 FDs als Overhead.
Zum Rest Ihrer Frage würde ich sagen, dass Sie Ihre Anwendung in Ihrer Umgebung testen müssen, um die besten Einstellungen für Sie zu finden.
Antwort2
Sie benötigen Lighttpd-1.5.x (im Wesentlichen aus SVN), um dies richtig zu machen, weil der Proxy in 1.4.x das Lighttpd <--> Backend-Kommunikationsbit in 1.4.x nicht E/A-multiplext.
Soweit ich weiß, ist Lighttpd-1.5.x der einzige Reverse-Proxy, der dazu in der Lage ist.
Sie möchten mod_proxy_core
und mod_proxy_backend_http
verwenden, sowie und proxy-core.max-keep-alive-requests
( proxy-core.max-pool-size
beachten Sie, dass diesen das Präfix „proxy-core.“ statt „server.“ vorangestellt ist):http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxyCore
Ich habe dies mit 20.000 gleichzeitigen Keep-Alive-Verbindungen (Lighttpd <-> Backend) getestet und es funktioniert gut.