phpbar.de logo

Mailinglisten-Archive

[php] Ideales System?

[php] Ideales System?

Reiner Kukulies reiner.kukulies_(at)_uni-koeln.de
Thu, 15 Feb 2001 20:27:22 +0100


Wir bewegen uns schon ein paar Monate mit unserem LAMP-System an den 
Grenzen von Intel-Hardware. Alle Rechner haben schon 2 Prozessoren 
und 1 GB Speicher. Wir werden also in nächster Zeit einiges 
grundsätzlich ändern müssen. Ich stelle mal meine Überlegungen dazu 
zur Diskussion, in der Hoffnung einige Tipps und Erfahrungsberichte 
zu bekommen (oder wenigstens selbst Anregungen geben zu können :))



Die webpool-Serverfamilie ist ein Gesamtprojekt aus ca. 40
Domains (single.de, werbung.de,...), bei denen alle Inhalte 
per PHP dynamisch aus MySQL-Datenbanken erzeugt werden. Jede 
Seite kann dabei in Inhalt und Layout an jeden User angepasst 
werden. Alle Seiten müssen also weitgehend on-the-fly erzeugt 
und können nicht gecacht werden. Die Seiteninhalte werden 
weitgehend von den Mitgliedern selbst erzeugt.

Zur Zeit liegen diese Domains (IP basiert, eigenes Class-C
Netz, eigener primary und secondary Nameservice) auf 3
Webservern, die auf 4 Datenbankserver zugreifen. So liegt
z.B. werbung.de auf WWW3 und die Benutzerdatenbank auf DB2.

Unbefriedigend an dieser Lösung ist die geringe
Skalierbarkeit und viele single points of failure. Alleine
single.de hat mittlerweile ca. 20 Mio. Pageviews im Monat
und wächst weiter stark. Wir brauchen also eine Lösung, die
sowohl auf Webserver- als auch auf Datenbankseite skalierbar
und ausfallsicherer ist.


Unsere Ideen sehen bisher wie folgt aus:


1. Webservercluster

Dabei reicht ein einfaches System, das alle Daten auf allen
Servern ablegt, da kaum HTML-Dateien sondern fast
ausschliesslich über alle Server hinweg identische
PHP-Skripte verwendet werden. Dazu kommen nur noch
serverspezifische Layout- und Konfigurationsdateien. Die
Last könnte sogar zufällig verteilt werden.


2. Shared Memory

Um die Datenbanklesezugriffe zu reduzieren, könnten häufig
gelesene Informationen im shared memory auch für andere
Prozesse bereitgehalten werden. So werden z.B. Benutzerdaten
von eingeloggten Usern bei jedem Seitenaufruf aus
verschiedenen Tabellen und Datenbanken zusammengetragen und
in ein Array geschrieben. Dieses Array könnte auch im
Speicher gehalten werden und der Webserver müsste dann nur
überprüfen, ob die Daten schon vorhanden und neuer als in
der DB sind.

Der Webservercluster könnte dann so funktionieren, dass
jeder Zugriff auf www.single.de per redirect auf
www1.single.de, www2.single.de o.ä. weitergegeben wird. Der
Benutzer bleibt dann z.B. auf www1, wo seine Daten schon im
shared memory liegen.


3. Master und Slaves bei MySQL

Ein Master-DB-Server übernimmt alle Schreib- und die
zeitkritischen Lesezugriffe. Er schreibt ein binary-log aus
dem die Slave-DB-Server ihre Daten wieder auslesen. Alle
anderen Lesezugriffe werden über die Slaves verteilt. Die
Slaves schreiben selbst wieder binary-logs, damit sie beim
Ausfall des Masters, dessen Rolle übernehmen können.

Unsere Datenbanken haben allerdings sehr viele
Schreibzugriffe, so dass der Master einen Flaschenhals
bilden könnte.


Gruß,
Reiner Kukulies

-- 
NETZKONZEPTE - http://kukulies.de


php::bar PHP Wiki   -   Listenarchive