10

マスター/スレーブ/負荷分散を既存のサイトに実装する必要があります。

マスター/スレーブの切り替えにこれらの(または他の)実装を使用している人はいますか?

マスター/スレーブを Cake: に実装する方法について見つけたリソース。

ほとんどの場合、1) が機能しますが、一部の結合で問題が発生します。

マスター/スレーブ実装のための新しいソース、ハック、または mod を歓迎します。今のところ、理解できません。

(私が使用しているCakeのバージョンは1.2です

4

3 に答える 3

0

複数のノードにわたるマスター/スレーブに関して、このチュートリアルをご覧ください。

http://www.howtoforge.com/setting-up-master-master-replication-on-four-nodes-with-mysql-5-on-debian-etch

これにより、理解が深まる場合があります。

于 2010-08-26T12:45:37.070 に答える
0

Web アプリは多層のようです。各層を個別にスケーリングする必要があります。

  • Web レイヤー、つまり CakePHP アプリは、複数の Web サーバーに分散できます。コード自体がべき等であるため、これは簡単に実行できます。Apache サーバーの負荷分散方法を検討する必要がありますが、大したことではありません。ただし、Web サーバーのスループットは非常に高いため、ここにボトルネックがある場合は、代わりにコード/キャッシュ戦略を改善することができます。(たとえば、ファイル キャッシュの代わりに memcache を使用します。) ファイル システム (アップロードなど) に依存している場合、分散または分離する必要があるため、これはもう少し複雑になります。

  • データ層。すでに他の人によってリンクされている MySQL をスケーリング/負荷分散する方法については、さまざまなチュートリアルがあります。

最初ですが、ベンチマークを作成することをお勧めします。(時期尚早の最適化は諸悪の根源です。) 最初にボトルネックがどこにあり、どこでスループットをスケーリングすべきかを知る必要があります。多くの場合、最初からクエリやキャッシュを最適化したり、キャッシュ可能にすることができます。また、目標を明確にする必要があります: スケーラビリティ? フォールトトレランス?

于 2011-11-24T10:11:20.883 に答える
0

私が知る限り、これは、モデルが同じ動作を使用しないモデルと関係がある場合に発生します。この仮定が間違っている場合は修正してください。

すべてのモデルにはメタデータがあり、CakePHP は DESCRIBE クエリを使用してデータベースに蓄積します。このデータが存在しない場合、結合は壊れます。このメタデータはデータベース構成固有です。

CakePHP は、このメタデータを使用して $this->_schema プロパティを設定します。SQL 結合は $this->_schema プロパティのデータを使用して構築されます。これが問題の原因であると思います。この MasterSlave スイッチ動作によって導入されたデータベースには、モデルに関連付けられたテーブルのモデル メタデータがありません。

解決策は、読み取りと書き込みのみを選択的に切り替えるように動作を更新することです。この動作を関連するすべてのモデルに追加します。つまり、hasOne、hasMany などを使用して関連付けられているモデルも同じ動作を使用する必要があります。

基本的に、関連するすべてのモデルは、同じデータベースに書き込み、同じデータベースから読み取る必要があります。

このソリューションの利点は、同じデータベース接続を共有できることです。

于 2011-03-16T09:20:24.857 に答える