2011-01-12 21 views
2

dangaクライアントをベースにした古いmemcachedクライアントの実装がありますが、若干変更されています。このクライアントは現在Memcached-Java-Clientと呼ばれています。MemcachedクライアントをMemcached-Java-ClientからXmemcachedに移行する

私が手にしている実装は古いものであり、維持されておらず、偽りのようです。

私は次の制約を持つ新しいクライアントに、クライアントを移行する必要があります。

  1. 私は古いものと互換性があるように、新しいクライアントのハッシュアルゴリズムを必要とします。この制約が満たされない場合は、サイトを(少なくとも部分的に)数時間は使用できなくする必要があります。
  2. さまざまなシリアル化メソッドをサポートし、シリアル化メソッドの拡張性を可能にします。
  3. 既存のクライアントよりもパフォーマンスが向上しました。
  4. Moxi

現在の実装では、私は古いクライアントによって保存されたキーのキャッシュヒットを得ることができないことを除いてXmemcachedで使用される一貫性のあるハッシュへの互換性があるように見えた一貫性のハッシュアルゴリズムを使用すると互換性がありますXmemcachedクライアントで取得されます。

私はコードをデバッグしましたが、私は同じハッシュコードを取得しましたが、私はサーバーリングが違うと思うので、全体のハッシング方法が異なります。

これは私がxmemcachedクライアントを初期化するために使用されるコードです:

final MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214")); 
    builder.setCommandFactory(new BinaryCommandFactory()); 
    builder.setSessionLocator(new KetamaMemcachedSessionLocator()); 
    builder.setTranscoder(new WhalinTranscoder()); 
    memcachedClient = builder.build(); 

は私が仕事にxmemcached得ることができない場合もspymemcachedを試してみることを喜んで、私は、後を好みます。

編集: spymemcachedも試してみましたが、現在のクライアントと互換性がありません。

final ConnectionFactoryBuilder builder = new ConnectionFactoryBuilder(); 
builder.setProtocol(Protocol.BINARY); 
builder.setTranscoder(WhalinTranscoder()); 
builder.setHashAlg(HashAlgorithm.KETAMA_HASH); 
builder.setLocatorType(Locator.CONSISTENT); 
final MemcachedClient client = MemcachedClient(builder.build(), AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214")); 
+1

なぜ、spymemcachedに興味がないのですか? moxiの作者とspymemcached(私)の作者は同じ日に同じ部屋に座っています。私たちは多くの仕事をしています。しかしもっと重要なことは、あなたのすべての要件はspymemcachedの目標であり、memcached自体にも取り組んでいる有料の開発者とオープンソースの貢献者の両方がいることです。 – Dustin

+0

これは良い入力です@ダスティン。私はこの情報を知らなかった。 xmemcachedの作成者が行ったベンチマークで、より良い結果が得られました+マルチスレッド化されているため、重い負荷ではパフォーマンスが向上すると仮定しました。私はまだこの仮定を検証しておらず、依然として私の他の要件を満たす必要があります。また、どれが魅力的なAPIを持っているかを確認したい。 –

+0

@ダスティンは、ダンガと互換性のある一貫したハッシュアルゴリズムをspymemcachedですか? –

答えて

0

それが原因単純な理由に思える: dangaクライアントがホストをハッシュ:ポート文字列を後にクライアントが効果的/ IPをホストするために等しくされたInetSocketAddressをハッシュしながら、 :ポート。

このため、新しいクライアントに移行する際に互換性を保つことができません。実際、XmemcachedとSpymemcachedのクライアントはどちらも拡張性があり、これを実現するためにいくつかのサポートを許可していますが、これを行うことは自分の好みにあまりにもハッキリです。

ベンダーマークの結果に従って、Xmemcached/Spymemcachedのいずれかを使用するようにコードを移行することを決めました。どちらもmoxiのハッシュアルゴリズムと互換性があります。 最終的には、クライアントサイドのモクシだけを使用することになります。私はアプリケーションの構成をずっと簡単にするので、このオプションが一番好きです。

1

私はあなたがspymemcachedでxmemcachedと同じ問題を抱えているだろう理解の方法: はここに私のspymemcachedクライアントの初期化コードです。私が前に - http://bugs.membase.org/browse/MB-1484と述べたように、一貫性のあるハッシングでは、他の2とは対照的に重み付けされた一貫性のあるハッシングを使用しています。そのため、いくつかのキーが欠落しています。私の古いdangaクライアントがXmemcached/Spymemcachedクライアントとの互換性がありませんように

+0

これは完全に正確ではありません。非互換性の理由は、ハッシュされたオブジェクト(ホスト:ポートVSホスト/ IP:ポート - 上記の私の答えを参照)の違いです。 –

関連する問題