web-dev-qa-db-ja.com

分散ロックサービス

どの分散ロックサービスを使用しますか?

要件は次のとおりです。

  1. 異なるプロセス/マシンから見ることができる相互排除(ロック)
  2. ロック...リリースセマンティクス
  3. 特定のタイムアウト後の自動ロック解除-ロック所有者が死んだ場合、X秒後に自動的に解放されます
  4. Java実装
  5. 嬉しい:.Net実装
  6. 無料の場合:デッドロックの検出/軽減
  7. 簡単な展開。以下の注を参照してください。

「データベースを介して実行できる」や「JavaSpacesを介して実行できる」などの回答には興味がありません。すぐに使用できる既成の実証済みの実装に興味があります。

54
ripper234

Teracotta (Open Source Editionを含む)は、synchronizedまたはJava.util.concurrent.ReentrantReadWriteLock-後者は明らかに要件に適合しています。


更新

質問にGigaSpacesとの「ミキシング」の要件が追加されたため、do n'tをミキシングすると言います。技術スタックに複雑さを追加するだけで、次のような努力が必要です。

  • コードとインフラストラクチャの両方の面での統合。
  • それらの間の同期を管理します。
  • テラコッタの学習/調整/デバッグ。

gigaSpacesに基づいたロックソリューションの作成または実装に費やした方がよいでしょう。

13
Robert Munteanu

ブロックの新しい子供は hazelcast です。私はそれで遊んでいますが、使用と設定は驚くほど簡単です。

私が見る限り、hazelcastには依存関係がないため、Gigaspacesとhazelcastの間に競合はないはずです(jgroups.jarなどはありません)

ヘイゼルキャスト

  1. 相互排除(ロック)、Java.util.concurrency.locks.Lockのうん実装
  2. 特定のタイムアウト後の自動ロック解除。メンバーがクラスターを離れると、すべてのロックが解除されます
  3. Java実装、うん
  4. いいですね:.Net実装、nopeは純粋なJavaソリューションです。
  5. 無料の場合:デッドロックの検出/緩和、これを処理するためのHazelcastの努力はありません
  6. 簡単な展開、単一の構成ファイルを備えた単一のjarで、アプリケーションの一部として展開され、追加のプロセスは不要
22
Gareth Davis

Apacheの Zookeeper (A Hadoopサブプロジェクト)を確認してください-分散同期を提供します。ドキュメントは素晴らしいものではありませんが、そこにあるものは興味深い製品に見えます-Zookeeperの使用方法に関するアイデアについては、レシピをチェックしてください。

おそらく必要とするよりも下位レベルであり、専用サーバーを推奨するため、追加の展開が必要です。

さまざまなロック戦略をモデル化できますが、ロックホルダーが死ぬ(一時ノード)ためのソリューションを提供します。

13
Steven Dick

ZooKeeper は、 Apache Curator フレームワークの助けを借りて、分散ロックの事実上の標準になりました。詳細については、 recipes のロックを確認してください。

2
frail