2009-04-24 9 views
24

LAMPを実行しているウェブアプリがあります。私たちは最近、負荷が増加しており、現在、規模を拡大するソリューションを検討しています。 Scaling apacheはかなり簡単ですが、複数のマシンで複数のマシンをホストし、着信トラフィックをラウンドロビンするだけです。複数のマシンでMySQLをスケールする方法は?

しかし、Apacheの各インスタンスはMySQLとやりとりし、最終的にMySQLがオーバーロードされます。この設定で複数のマシンにまたがってMySQLをスケールする方法は?私はすでにthisを見てきましたが、具体的には、すぐに利用できるDBからのアップデートが必要なので、ここでレプリケーションは良い戦略ではないと思いますか?また、最小限のコード変更でこれを行うことができれば幸いです。

PS。我々は約1:1の読み書き率を持っています。

答えて

21

レプリケーションとシャーディングの2つの戦略しかありません。書き込み回数が少なく、トラフィックの読み取り量が多い場合は、レプリケーションが頻繁に行われるため、多くのスレーブに読み取りをリダイレクトすることができます。また、多くのレプリケーショントラフィックには時間と不一致の可能性があります。

shardingを使用すると、複数のマシン間でデータベーステーブルをシャードする(機能シャーディングと呼ばれます)ので、特に結合がずっと難しくなります。これがもう合わない場合は、複数のマシンにまたがって行を分割する必要がありますが、これは楽しいことではなく、アプリケーションとデータベースの間に実装されたシャーディングレイヤーによって異なります。

ドキュメント指向のデータベースまたは列ストアは、この作業を行いますが、現在はOLTPではなくOLAP用に最適化されています。

5

複製が最適な方法ではないとは思わないかもしれませんが、複製を使用していくつかのマシン間で負荷を分散するのには、かなり簡単で簡単なヒントを提供するlinkをご覧ください。

+0

リンクが壊れています。 – sunnyrjuneja

+0

リンクを更新してください –

+1

broken link bro .. – tesmojones

0

アプリケーションのバックエンド(つまり、PK、トランザクション、および挿入IDの処理方法)によって、auto_incrementの設定が異なるMASTER-MASTERレプリケーションが考えられます。これはやりにくく、徹底的にテストする必要がありますが、うまくいく可能性があります。

また、新しいMySQL 5.6には、特にこのシナリオでは、レプリケーションを同期して維持するのに大いに役立つGTID(グローバルトランザクション識別子)があります。

0

まあ...実際の大規模なすべての人のスケーリングの幸運。データベースエンジンがボトルネックになり、ロックやバッファの管理に時間がかかりすぎます。

実際に動作する唯一の方法は、スケールアウト、シャーディングです。残念ながらシャーディングはMySQLのために提供されていません。 MongoのようないくつかのNoSQLのように)。 ScaleBase(免責事項:私はそこで働いています)あなたが好きならば、完全なスケールアウトソリューションのメーカーです。 ScaleBaeはデータとSQLストリームを分析し、DBノード間でデータを分割し、コマンドをルーティングし、実行時に結果を集約します。

関連する問題