Wie Master / Slave wechseln, Lastverteilung in CakePHP

8

Ich muss Master / Slave / Load Balancing in eine bestehende Site implementieren.

Benutzt jemand diese (oder andere) Implementierungen für die Master / Slave-Umschaltung?

Die Ressourcen, die ich gefunden habe, um Master / Slave in Cake zu implementieren:.

Ich bekomme Nummer 1), um die meiste Zeit zu arbeiten, aber es hat Probleme mit einigen der Joins.

Ich begrüße neue Quellen, Hacks oder Mods für die Master / Slave-Implementierung, da ich es jetzt nicht verstehen kann.

(Kuchenversion, die ich atm verwende, ist 1.2) (Ich schreibe dies auf den Google-Gruppen von CakePHP Ссылка )

    
Kana 26.08.2010, 12:03
quelle

3 Antworten

1

Sehen Sie sich dieses Tutorial in Bezug auf Master / Slave über mehrere Knoten an.

Ссылка

Dies kann Ihnen helfen, besser zu verstehen.

    
RobertPitt 26.08.2010 12:45
quelle
0

Soweit ich das beurteilen kann, passiert das, wenn Ihr Modell Beziehungen zu Modellen hat, die nicht das gleiche Verhalten haben. Bitte korrigieren Sie mich, wenn diese Annahme falsch ist.

Alle Modelle haben Metadaten, die CakePHP mit einer DESCRIBE-Abfrage in der Datenbank ansammelt. Wenn diese Daten nicht vorhanden sind, werden Ihre Joins unterbrochen. Diese Metadaten sind spezifisch für die Datenbankkonfiguration.

CakePHP verwendet diese Metadaten zum Auffüllen der Eigenschaft $ this- & gt; _schema. SQL-Joins werden mit Daten aus der $ this- & gt; _schema -Eigenschaft erstellt, und ich nehme an, hier liegt Ihr Problem. Die von diesem MasterSlave-Switch-Verhalten eingeführte Datenbank enthält keine Modellmetadaten für Tabellen, die mit dem Modell verknüpft sind. p>

Eine Lösung wäre, Ihr Verhalten so zu aktualisieren, dass es nur beim Lesen und Schreiben selektiv wechselt. Fügen Sie dieses Verhalten allen verwandten Modellen hinzu. Ein beliebiges Modell, das mit hasOne, hasMany usw. verwandt ist, sollte dasselbe Verhalten verwenden.

Im Wesentlichen sollten alle verwandten Modelle in dieselbe Datenbank schreiben und aus derselben Datenbank lesen.

Der Bonus dieser Lösung besteht darin, dass Sie dieselben Datenbankverbindungen nutzen.

    
Tass Skoudros 16.03.2011 09:20
quelle
0

Ihre Web-App scheint mehrstufig zu sein. Sie müssen jede Ebene einzeln skalieren:

  • Die Web-Ebene, d. h. die CakePHP-App, kann auf mehrere Webserver verteilt werden. Dies ist einfach zu tun, da der Code selbst idempotent ist. Sie sollten darüber nachdenken, wie Sie die Balance-Apache-Server laden, es ist keine große Sache. Webserver haben jedoch einen recht hohen Durchsatz. Wenn Sie also hier einen Engpass haben, können Sie stattdessen Ihre Code- / Caching-Strategie verbessern. (Verwenden Sie zum Beispiel Memcache anstelle von Dateicaches.) Wenn Sie vom Dateisystem abhängig sind (zum Beispiel Uploads), wird dies etwas komplexer, da es verteilt oder getrennt werden muss.

  • Die Datenschicht. Es gibt verschiedene Tutorials, wie man MySQL skalieren / laden kann, das bereits von anderen verlinkt ist.

Trotzdem würde ich vorschlagen, Benchmarks zu machen. (Vorzeitige Optimierung ist die Wurzel allen Übels.) Sie müssen zuerst wissen, wo die Engpässe sind, wo der Durchsatz skalieren sollte. Häufig können Sie Abfragen optimieren, zwischenspeichern oder cachefähig machen. Sie müssen auch klar in Ihren Zielen sein: Skalierbarkeit? Fehlertoleranz?

    
sibidiba 24.11.2011 10:11
quelle