Re: ZEO Installation - Anzahl Clients, Threads , Cache-Grösse
"Jens W. Klein" <[email protected]> Fri, 16 Mar 2012 22:40:16 +0100
| Newsgroups | gmane.comp.web.zope.german |
|---|---|
| Message-ID | <[email protected]> |
Hi Nico, On 16.03.2012 14:48, Nico Grubert wrote: > Hallo Jens > > vielen Dank für deine Antwort. > >>> Nun zu meinen Fragen: >>> >>> 1. Wieviele ZEO Clients würdet ihr installieren? >> >> Wenn auf der Kiste nur ZEO-Clients laufen pro echtem Core 4 Clients. >> Wenn Nginx+Varnish mitlaufen kriegen die zusammmen einen echten Core und >> er Rest die ZEO-Clients. > > Es laufen dort nur ZEO Clients, sonst nichts. > Das würde heissen: 6-core CPU = 24 ZEO Clients? und bei 2 CPUs > dementsprechend 48 ZEO Clients? Hört sich viel an, nicht wahr? Aber wenn du das Maschinchen mit dem Setup ausreizen willst, dann geht das wohl so. Die Frage ist ob Du das brauchst :-D Ich habe eben von Hardware-Sicht hochgerechnet und kenne Deine Site nicht. Auf der anderen Seite sind das 48 gleichzeitige verarbeitbare Requests. Wenn man jetzt 200-500ms pro Request brauchen (nehmen wir mal 333ms im Mittel als Denkbeispiel) dann sind das nur 144 req/sec Peak (vereinfacht gerechnet, für genaue Daten müsste man das Setup benchmarken - und da kann wieder was ganz anderes rauskommen). Und Peak am Zope ist noch nicht req/sec-Peak am Webserver - da kann man ja schon einiges mit Varnish weg-cachen. Bei Public-Sites sind wir da zwischen 90% und 96% Hit-Rate wenn man das ordentlich durchkonfiguriert. Bei Intranet und ähnlichem ist das wieder etwas schwieriger. > Apache, Proxy und HAProxy laufen auf getrennten Maschinen. > >>> 2. Wie würdet ihr die Parameter 'zserver-threads' und >>> 'cache-size' in der zope.conf der ZEO Clients setzen? >> >> threads: 1 (in Worten Einer) > > Default ist ja 4. Kannst du noch kurz zum Verständnis erklären, warum > nur einer? 1) Python ist leider nicht besonders toll im Threading (Stichwort Global Interpreter Lock http://wiki.python.org/moin/GlobalInterpreterLock ) Daher performen unabhängige Prozesse besser als ein Prozess mit mehrere Threads. 2) Der ZEO-Client DB-Cache wird nicht optimal genutzt. Sobald mehr als 1 Thread aufgemacht wird (bei wenig Last passiert das nie) wird eine weitere Datenbankverbindung in den Pool gestellt. Jede DB-Connection hat einen eigenen RAM-Cache. Also 4 Threads haben - sofern sie ausgenutzt werden - 4 DB Connections und 4 DB-Ram (Ring-) Caches. Den Filesystem-Cache teilen sie. Jetzt wollen wir aber die Caches moeglichst gut nutzen. Wenn Du jetzt eingeloggte User hast, schaust Du natuerlich (per HA-Proxy und Cookie-Stickyness), dass diese immer auf den gleichen ZEO-Client kommen. Wenn jetzt aber der User die andere Connection aus dem Pool bekommt nutzt das nicht mehr so viel, er hat die Daten nicht im Cache und es muss von der DB nachgeladen werden. 3) Der shared RAM-Cache wird durch viele Prozess schlechter genutzt. Aber das kann man mit Memcached aushebeln. >> Cache Size wuerde ich ausprobieren was die Kiste verträgt. Wieviel RAM >> brauchen denn die ca. 30000 grade? Teile den Verbrauch durch die Anzahl >> Threads alt mal Anzahl ZEO-Clients neu und schau was von den 48GB RAM >> über bleibt. Lasse dem System noch 4GB über (und wenn Varnish auch was >> für den) und verteile den Rest und halte dabei noch 5% Unschärfe drin. > > momentan braucht 1 Client mit 3 threads ca. 900 MByte. Also grob 300MB pro DB-Connection, das bischerl Overhead mit RAM-Cache und Zope selber liegt bei einem normal Konfigurierten Plone bei 10-20 MB. Wenn ich mich bei meiner Grobkalkulation nicht vertan habe kannst Du den Cache von 10000 auf 30000 erhöhen. >> Dann wuerde ich noch einen ha-proxy davor tun, der dafuer sorgt, dass >> Source-IP oder Cookie-basiert load-balanced wird, so dass die Backends >> DB-Cache-mässig optimal ausgelastet werden. > > HAProxy (cookie-basiert) habe ich davor. > >> Fettes Setup auf alle Fälle, sollte gut Performance bringen, sobald die >> DB-Caches gefüllt sind. >> >> Bei so vielen ZEO-clients würde ich allerdings noch einen Memcached >> laufen lassen und alle Ram-Caches auf den Memcached biegen. > > Das ist Neuland für mich. Wo finde ich denn dazu ein bisschen Doku? http://pypi.python.org/pypi/Products.MemcachedManager >> HTH Jens > > Tut es, vielen Dank. > >> PS.: Wenn das läuft, kannst Du dann mal Statistiken mit den >> Kern-Parametern posten? (Load, RAM, CPU, req/sek usw.) Geht schon >> Richtung IT-Porn.... :D > > Kann ich gern machen. Habe auf dem Server HP-Tools installiert, die > immer ganz nette Statistiken generieren. > > Herzlichen Dank nochmal. > > Nico > -- Jens W. Klein Klein & Partner KG _______________________________________________ zope mailing list [email protected] https://mail.dzug.org/mailman/listinfo/zope