Vertragen sich LoadBalancing + eAccelerator?
Johnny
- webserver
Hallo, kann mir jemand sagen, ob es in einer solchen Konfiguration zu Problemen kommen kann?:
Ein Loadbalancer, dahinter die Server www1 und www2 als Apache/PHP-Kombination. Die PHP-Scripte selbst liegen auf einem NFS-Laufwerk, auf das beide Webserver zugreifen. Ach ja, beide Server werden mit Debian Sarge betrieben.
Funktioniert ein solcher Aufbau mit eAccelerator und wenn ja, muss bzw. sollte ich eaccelerator.cache_dir auf ein Verzeichnis des NFS-Shares zeigen lassen?
Bin für jeden Hinweis dankbar,
Johnny
Hallo,
Funktioniert ein solcher Aufbau mit eAccelerator und wenn ja, muss bzw. sollte ich eaccelerator.cache_dir auf ein Verzeichnis des NFS-Shares zeigen lassen?
daß man über Deine Frage sich erschrocken zeigt, nimmst Du hoffentlich nicht persönlich.
Zunächst wird eAccelerator keine Problem mit einem load&balance-System haben, denn genaugenommen ist er davon nicht betroffen. Das liegt in der Arbeitsweise der Software begründet:
Den Geschwindigkeitsgewinn bezieht der eAccelerator nicht aus der Code-Optimierung. Wenn man einige Erfahrungen mit PHP gesammelt hat und die behäbigen Mittel der Sprache kennt und sie auch geschickt zu umgehen weiß, ist die interne Optimirung sogar eine Bremse (wenn[!] der Code per Aufruf immer wieder neu optimiert wird, wie dies zum Beispiel beim Zend Optimiser der Fall wäre).
Der Geschwindigkeitsgewinn resultiert (fast ausschließlich) aus der Ablage des optimierten Codes in Shared Memory. Auf Daten, die im RAM gehalten werden, kann erheblich schneller zugegriffen werden als auf Daten, die von der Platte via FS bezogen werden. Allerdings werden Daten von der maschineneigenen Festplatte wieder schneller bezogen, als Daten, die erst über das Netzwerk bezogen werden müssen.
Deine Frage geht als im Prinzip, das die Beschleunigung bereitstellt, fehl.
Abschließend würde ich an Deiner Stelle überlegen, ob es des eAccelerator überhaupt bedarf. Zum einen ist der für die Version 5.x PHPs nur als Beta verfügbar, zum anderen bietet die PHP-hauseigene Erweiterung APC selbe Funktionalität.
Gruß aus Berlin!
eddi
Hallo eddi,
daß man über Deine Frage sich erschrocken zeigt, nimmst Du hoffentlich nicht persönlich.
nein gar nicht. Aber wieso genau erschrocken, ist die Frage so dumm?
Zunächst wird eAccelerator keine Problem mit einem load&balance-System haben, denn genaugenommen ist er davon nicht betroffen.
Ok, ich präzisiere die Frage mal: ich habe zwei Apache/PHP-Systeme, auf denen ich _jeweils_ eAccelerator/APC installieren muss. Diese greifen _beide_ auf ein gemeinsames NFS-Share zu, um die PHP-Scripte in der aktuellen Version zu beziehen, diese Scripte zu compilieren und in den Shared Memory zu laden. Ich frage mich, ob es zu Synchronisationsproblemen kommen kann. Sprich:
1. ich ändere ein Script im NFS-Share
2. ich stelle zum Beispiel mit ab2 tausende Anfragen über den Loadbalancer, der diese Anfragen auf Server 1 + 2 verteilt
Werden Server 1 und Server 2 (über den Umweg eAcc/APC) immer genau die richtige Version des compilierten Scriptes benutzen?
Der Geschwindigkeitsgewinn resultiert (fast ausschließlich) aus der Ablage des optimierten Codes in Shared Memory. Auf Daten, die im RAM gehalten werden, kann erheblich schneller zugegriffen werden als auf Daten, die von der Platte via FS bezogen werden.
Soweit klar, danke für die Erläuterung
Allerdings werden Daten von der maschineneigenen Festplatte wieder schneller bezogen, als Daten, die erst über das Netzwerk bezogen werden müssen.
Auch klar.
Deine Frage geht als im Prinzip, das die Beschleunigung bereitstellt, fehl.
Das verstehe ich wiederum nicht. Ich nehme an, das meintest Du weiter oben mit "erschrocken"!?
PHPs nur als Beta verfügbar, zum anderen bietet die PHP-hauseigene Erweiterung selbe Funktionalität.
Danke für den Hinweis, werde dann natürlich APC nutzen!
Viele Grüsse (auch aus Berlin),
Johnny
Hallo,
Ich frage mich, ob es zu Synchronisationsproblemen kommen kann. ... Werden Server 1 und Server 2 (über den Umweg eAcc/APC) immer genau die richtige Version des compilierten Scriptes benutzen?
Das ist eine Frage der Konfiguration. Du kannst z. B. APC über apc.stat die Möglichkeit festzulegen, ob bei jedem Request eines Scripts mittels stat()
die Aktualität überprüft wird. Auf einer Produktivumgeben solltest Du, insbesondere weil es sich zudem auch noch um NFS handelt, allerdings deaktivieren, um die Performance weiter zu steigern.
Hierbei wäre bei jeder Änderung wieder ein
Deine Frage geht als im Prinzip, das die Beschleunigung bereitstellt, fehl.
Das verstehe ich wiederum nicht.
Das Prinzip, das die Beschleunigung bereitstellt, gewinnt seine Performance im Wesentlichen aus der Ausnutzung der höheren Geschwindigkeit des Datenbezugs vom Shared Memory. Setzt Du nun ein Cacheverzeichnis anstattdessen ein und zu allem Überfluß auch noch remote, dann (sinnbildlich) reist Du mit dem Hintern alles wieder ein, was Du vorher aufgebaut hast ;)
Danke für den Hinweis, werde dann natürlich APC nutzen!
In diesem Zusammenhang ist Version 5.x von PHP für Dich sogar sehr interessant. PHP hat mit dieser Version vier verschiedene komplett neue Engine zum Parsen bekommen, die PHP (also das Binär) erhebich größer machen, aber auch erheblich schneller. Ich selbst arbeite mit "goto" und bin einfach nur zufrieden :)
Im Übrigen solltest Du PHP noch nicht als Servermodul nutzen, dann mach es. Auch das bringt wieder einen Geschwindigkeitsvorteil. Wenn ich Fragen darf, worum geht es eigentlich bei dem Projekt?
Gruß aus Berlin!
eddi
Tschuldigung:
Hierbei wäre bei jeder Änderung wieder ein
Neustart erforderlich.
Gruß aus Berlin!
eddi