2

編集

質問を一番上に移動しました。問題の説明は、検索のヘルプと、誰かが必要とする可能性のある背景情報のために残します。

kestrel で memcached ライブラリを使用する場合、クラスター内で 2 台以上のサーバーを使用し、信頼できる読み取り機能 (またはその他の機能) を利用すると、memcached ハッシュ アルゴリズムが常に間違った場所に表示される可能性はありませんか? memcached ライブラリのハッシュ アルゴリズムを変更する必要がありますか? 何か不足していますか?誰にも洞察力がありますか?

背景情報

Kestrel ユーザーは、任意の memcached ライブラリを使用して Kestrel クラスターに接続し、アイテムをキューから出し入れすることができると自慢しています。これについて考えると、それは欠陥があるように思えます。Memcached は、構成されているハッシュ アルゴリズムに基づいて、クライアントがキーの保存場所または保存場所を決定するため、サーバー間通信なしでクラスター内で動作します。

kestrel のドキュメントでは、クライアントがランダムな kestrel ノードに接続してキューの読み取りまたは書き込みを行うため、kestrel が「ほぼ公正」であることが説明されています。memcached クライアントを使用する場合、memcached のクライアントは一貫したハッシュ アルゴリズムを使用するため、クライアントは常に同じ場所でキューを検索します。明らかに、クラスター内で 1 つの kestrel サーバーのみを使用している場合は問題ありません。参照する場所は 1 回だけです。複数のノードを使用する場合でも、静的なキュー名にアクセスしているため、ハッシュ アルゴリズムは常に同じ場所を参照しているので問題ない場合があります。

ただし、追加の機能は、クライアントからアクセスしているキュー名を変更することによって相互作用する kestrel で公開されます (信頼できる読み取りは、/open を追加することで開始され、/close で終了します)。これにより、理論的には、クライアントは一貫してキューの間違った場所を検索し、キュー オブジェクトを取得することはありません。キュー オブジェクトは一貫して単一のノードに書き込まれ、一貫して別のノードから読み取られるためです。

ありがとう!

4

1 に答える 1

1

免責事項:私はケストレルを扱っていませんでしたが、それは良さそうで、あなたの質問のためにいくつか掘り下げました. ケストレルのドキュメントからの引用:

クライアントには、クラスター内のすべてのサーバーのリストがあり、操作ごとにランダムに 1 つ選択します。

おそらく、独自のサーバー ピッキング アルゴリズムを作成し (これはカスタム クラスで簡単に実行できます)、1 つのサーバーに接続して、そのサーバーを 1 つの操作 (set/get/open+close/) に使用する必要があります。監視+確認)、必要に応じて別のものに切り替えます。memcached クライアントが /open と /close のためにサーバーを切り替えると、トランザクションが台無しになるため、実際には安全ではありません。memcached 操作ではなく、kestrel 操作内で同じサーバーを使用するようにする必要があります。モニターと確認を使用する場合は、とにかく独自のクライアント クラスを作成する必要があるため、memcached クライアント ライブラリが何を処理するかは問題ではありません。

于 2012-01-25T13:37:50.447 に答える