phpbar.de logo

Mailinglisten-Archive

[php] Scriptaufbau für Mehrserverbetrieb

[php] Scriptaufbau für Mehrserverbetrieb

Andreas Ahlenstorf lists at ahlenstorf.ch
Sam Dez 16 22:06:58 CET 2006


Am 16.12.2006 um 20:18 schrieb Andreas Fay:

> Da tun sich mir aber noch ein paar Fragen dazu auf:
>
> Wenn ich nun mehrere Server habe, wie läuft dann die Synchronisation
> der Daten ab, gerade auch bei mehreren Datenbanken?!

Die einzige Option, die dir bleibt, ist Replikation. Clustering ist  
nicht wirklich praktikabel: Technische/konzeptionelle Probleme oder  
extrem teuer (~ 25'000 Dollar pro CPU-Sockel). Replikation läuft  
immer so, dass man einen Master hat und dieser Daten auf die Slaves  
überträgt. Von den Slaves liest man normalerweise Daten, damit sich  
der Master nur auf die Schreibvorgänge konzentrieren kann. Ist der  
Master mit Schreibvorgängen ausgelastet, was irgendwann passiert, ist  
die Kacke am Dampfen und man muss sich was ausdenken. Bevor man an  
eine irgendwie geartete Partitionierung geht, wird man versuchen, die  
Zahl der Schreibvorgänge zu senken und auch die Zahl die Lesevorgänge  
zu reduzieren. Die Lesevorgänge kann man mit Caching reduzieren.  
Macht man entweder nahe beim Load Balancer mit Squid oder nahe an der  
Datenbank mit memcached. Memcached wird man vor allem für Sessions  
verwenden: So kann man sie über mehrere Server hinweg verwenden und  
damit richtiges Load Balancing machen und gleichzeitig quält man die  
Datenbank nicht. Wenn's dann mit dem Master doch irgendwann nicht  
geht, wird man mit Partitionierung beginnen, d.h. mehrere Master  
aufstellen, die alle ihre Sklaven kontrollieren. Wie man  
partitioniert, hängt von den Daten ab. Eine transaktionsorientierte  
Applikation muss man anders behandeln als eine, die wie Flickr oder  
Youtube nur Bilder oder Videos raushaut. Grundsätzlich ist es aber  
so, dass man versucht, irgendwie die Datenbasis zu spalten. Bei  
Bildern oder Videos könnte es so sein, dass man z.B. den Dateinamen  
der Datei nimmt, md5() drüberlaufen lässt und mal anfängt, die  
Dateien nach dem ersten Buchstaben auf die Server zu verteilen. a  
kommt auf Master a, b auf Master b usw. Da weisst du auch gleich,  
welchen Server du für welche Datei fragen musst. Das ist relativ  
einfach zu lösen, auch in der Applikation, die leider "wissen" muss,  
wie die ganze Architektur aussieht und von welchem Server sie worauf  
eine Antwort erhält. Das ist vor allem das, was bei der Entwicklung  
weh tut. Denn Daten trennen ist recht simpel, zusammenführen schwer.

Storage für Videos und Bilder ist wegen Datenmenge und Backup ein  
Problem. Hier haben die Jungs von Danga Interactive für Livejournal  
aber eine elegante Lösung gefunden: http://www.danga.com/mogilefs/

Gruss,
Andreas




php::bar PHP Wiki   -   Listenarchive