mysql lastverteilung bei 500 writes/sek.
Posted: 2007-03-07 14:05
Hi,
wie macht man mit mysql eine lastverteilung wenn die anwendung theoretisch 500 writes in der sekunde produziert?
ich kenne die möglichkeit der replikation. schreibe-operationen werden dann auf dem master ausgeführt und lese-operationen an die slaves. die slaves ziehen sich die aktuellen daten vom master.
wenn die anwendung hauptsächlich aus der db liest, ist das sicher ganz nett.
wenn aber mindestens genauso oft in die db geschrieben wird, wie von ihr gelesen wird, denke ich an folgende probleme:
1. irgendwann geht der master in die knie, wenn er mit sovielen schreibzugriffen bombardiert wird. gut, das lässt sich bis zu nem gewissen grad mit mehr festplatten, prozessoren und ram kompensieren. aber was ist dann?
2. die slaves müssen von haus aus ne größere hardware haben als der master. wenn ich das richtig verstehe, ziehen die slaves ja nur einfach das binlog vom master. dann werden auf den slaves ja auch sämtliche write-queries ausgeführt (wie auf dem master) + die ganzen read-queries.
3. die slaves werden bei der masse an schreibzugriffen immer dem aktuellen stand des masters hinterher hinken. für das problem hab ich mal was über heartbeat gehört. ist das performant?
wie kann man die obigen probleme umgehen?
Wie ist das mit einem Cluster gelöst? Mal abgesehen davon, dass die Cluster-Engine absolut wenig Features bietet (im Vergleich zu InnoDB).
Habe wo gelesen, dass in einem Cluster alle "Slaves" (nennt man die dort so) die Daten komplett im Arbeitsspeicher halten und nur der Master auf Platte schreibt.
Damit fällt das Problem ja schonmal weg, dass die Slaves die Leistung des Masters + Lesezugriffe haben müssen.
Was gibts sonst für Möglichkeiten? Welche Vor- und Nachteile?
Danke!
MfG
wie macht man mit mysql eine lastverteilung wenn die anwendung theoretisch 500 writes in der sekunde produziert?
ich kenne die möglichkeit der replikation. schreibe-operationen werden dann auf dem master ausgeführt und lese-operationen an die slaves. die slaves ziehen sich die aktuellen daten vom master.
wenn die anwendung hauptsächlich aus der db liest, ist das sicher ganz nett.
wenn aber mindestens genauso oft in die db geschrieben wird, wie von ihr gelesen wird, denke ich an folgende probleme:
1. irgendwann geht der master in die knie, wenn er mit sovielen schreibzugriffen bombardiert wird. gut, das lässt sich bis zu nem gewissen grad mit mehr festplatten, prozessoren und ram kompensieren. aber was ist dann?
2. die slaves müssen von haus aus ne größere hardware haben als der master. wenn ich das richtig verstehe, ziehen die slaves ja nur einfach das binlog vom master. dann werden auf den slaves ja auch sämtliche write-queries ausgeführt (wie auf dem master) + die ganzen read-queries.
3. die slaves werden bei der masse an schreibzugriffen immer dem aktuellen stand des masters hinterher hinken. für das problem hab ich mal was über heartbeat gehört. ist das performant?
wie kann man die obigen probleme umgehen?
Wie ist das mit einem Cluster gelöst? Mal abgesehen davon, dass die Cluster-Engine absolut wenig Features bietet (im Vergleich zu InnoDB).
Habe wo gelesen, dass in einem Cluster alle "Slaves" (nennt man die dort so) die Daten komplett im Arbeitsspeicher halten und nur der Master auf Platte schreibt.
Damit fällt das Problem ja schonmal weg, dass die Slaves die Leistung des Masters + Lesezugriffe haben müssen.
Was gibts sonst für Möglichkeiten? Welche Vor- und Nachteile?
Danke!
MfG