Mailinglisten-Archive |
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