3

はじめに:

私は Cassandra 1.2.4 クラスターを使用する Python アプリケーションをレプリケーション ファクター 3 で使用しています。すべての読み取りと書き込みは整合性レベル 2 で行われます。クラスターにアクセスするには、CQL ライブラリを使用します。Cassandra クラスターは、rackspace の仮想サーバー上で実行されています。

問題:

ときどき、ノードの 1 つが通常より遅くなることがあります。この場合、この状況を検出して、遅いノードへのリクエストを防止し、可能であればそのノードの使用を完全に停止できるようにしたいと考えています (これは理論的には可能なはずなので、 RF は 3 で、CL は 1 つの要求ごとに 2 です)。これまでのところ、私が思いついた解決策には、各ノードへのリクエストのタイミングを計り、遅いノードへの将来の接続を防ぐことが含まれます。しかし、これですべての問題が解決するわけではありません。別のノードに接続しても、コーディネーター ノードがクエリをルーティングした後、特定のクエリが遅いノードによって処理される可能性があるためです。

質問:

Python アプリケーションから遅いノードを検出する最良の方法は何ですか? このシナリオで、人間の介入なしに Python から Cassandra ノードの 1 つの使用を停止する方法はありますか?

前もって感謝します!

4

1 に答える 1

3

応答が遅いノードがクエリの処理も遅いノードである場合は、リクエストのタイミングを手動で調整するだけで十分です。

内部的には、Cassandra は動的スニッチを使用することで、可能であれば遅いノードを回避します。これにより、最近のレイテンシ統計によってノードが並べ替えられ、一貫性レベルが許す場合は、最も遅いノードからの読み取りが回避されます。注意: 書き込みは利用可能なすべてのノードに送信されますが、一貫性レベルが許す場合は、すべてのノードが応答するのを待つ必要はありません。

Pythonクライアントで必要なものに対するクライアントサポートがいくつかある場合があります-JavaのAstyanaxは、クライアントの動的スニッチに非常に似たものを使用して、遅いノードにリクエストを送信しないようにします。

于 2013-07-02T07:10:24.187 に答える