2011-09-22 6 views
6

私はここで多くのポストを読んで、ウェブをサーフィンしていますが、正しい質問をしていないかもしれません。私はRedisが現在Clusterが利用可能になるまで、Master/Slaveであることを知っています。しかし、自分のニーズ(または適切なツールではない場合)を満たすために、ロジスティックにレディスを設定する方法を教えてもらえるかどうかは疑問でした。Redis模倣MASTER/MASTER?または、他の何か?

Scenerio:

米国の反対側に2つのサイトがあります。私たちは、クライアントが各サイトで大量に書き込むことができるようにしたいと考えています。次に、各クライアントが自分のサイトでも読み取りを実行できるようにします。しかし、我々は、姉妹サイトの書面から< 50msでデータを入手したいと考えています。十分な帯域幅があることを考えれば、私たちのニーズを満たすためにredisを設定する方法はありますか?私たちの最大サイズは5kのオーダーになります。要点は、デフォルトではサポートされていなくても、どうやって2台のマスターが互いに同期しているかです。

答えて

11

トムの答えとの漁獲量は、クラスタの任意の並べ替えを実行していない、あなただけの二つのサーバに書いているということです。これは、それらの間の一貫性を確保したい場合には問題です。クライアントがリモートサーバーへの書き込みに失敗した場合の処理​​を考えてください。あなたはローカルへの書き込みを取り消しますか?リモートサーバーに書き込めない場合、アプリケーションはどうなりますか?あなたが地元から読めないときはどうなりますか?

第2のキャッチは、ジョシュアが提唱する基本的な物理問題です。ラウンドトリップの場合、理論的な最小値は38msで、両端の(3つのシステムの)最大処理時間は12msです。私は、期待はあまりにも多すぎるし、帯域幅はこの場合レイテンシとは関係がないと言いたい。あなたは10GBパイプを持つことができ、それらのタイミングはまだ存在します。つまり、大陸を横切って5kmを12msで移動することは、多くのことを求めています。あなたは50ミリ秒で5kのデータを転送する接続容量を持っていると確信していますか?私は、大陸の私有の非利用回路にいて、50msを超えるping時間を見ています - そして、pingは5kのデータを転送していません。

2つの無関係なサーバーをどのように同期させておきますか?大陸全体で50ms未満の遅延が本当に必要な場合は、上記の理論上の最良のケースは、同期アルゴリズムを実行するために12msがあることを意味します。他のサーバー上のデータをチェックする1つのクエリであっても、50msのウィンドウ外にあることを意味します。データが同期していない場合、どのように修正しますか?上記のタイミングを考えると、50ms未満でどのように同期が可能かはわかりません。

基本的な設計要件を見直すことをお勧めします。具体的には、なぜこの要件?大陸を横断する50msの往復の待ち時間要件は、通常、マーケティングの兆候であるか、細部への注意の欠如です。私はあなたがこの50msのウィンドウが過度で不必要であることがわかるでしょう。そうでない場合、データ同期が実際に重要である(可能性がある)場合、誰かが同期コードを書き込むための多大な努力が価値があるかどうか、あるいは50msのウィンドウ内に維持することが可能かどうかを判断する必要があります。大陸横断のサブ50msレーテンシーデータの同期は単純な問題ではありません。

同期が必要ない場合は、単に1台のサーバーを実行するだけです。大陸の反対側のスレーブを復旧専用の目的で使用することもできます。もちろん、これは、あなたがそこに戻ってデータを取得するのに12msのベストケースを意味します。私は大陸を渡って 50msのラウンドトリップ操作+レイテンシ+ 5k/10kデータ転送にはカウントしません。

+1

すべてのことを書いていただきありがとうございます。私は、何か新しいものを使う考えを捨てるために、何か不可能なことを(確かなものではなく)尋ねるために、提起された質問が多分行われたと思います。問題は複数の場所があり、ユーザーが最も近いマスターに書き込みを行い、次に両方のサイト間に(できるだけ早く)リアルタイムの整合性が確保されるようにするプロセスがあることです。このシナリオに合った提案がありますか? – DvideBy0

+1

私はより重要なアスペクト、ニア・サイド・ライト、またはニア・サイド・リードであるかを尋ねます。可能な限り速いのは、シングルマスタとローカル読み取りスレーブです。読取り集約型か書込み集約型か、約50-50ですか?既にデータセンターのサイトを持っている場合は、1台のマスターを配置してテストを実行します。マルチマスター、特にクロス・アフリカ大陸はシンプルです。幸い、ほとんどの場合、実際には必要ありません。私はテストセットを設定し、それを検証してケースを検証します。もっと簡単な方法があれば、マルチマスターに集中しないでください。私は1Masterと分散スレーブはあなたのために動作すると思われる。 –

2

これはおそらく、クライアントの一部として処理するのが最良です。クライアントが両方のノードに書き込むだけです。書き込みは一般的には同期する必要はないので、余分なコマンドを送信しても、ローカルノードを持つことによるパフォーマンスには影響しません。

関連する問題