分散ロックのいくつかの実装方法(Java)

1332 ワード

Zookeeperベースの分散ロック
zookeeper一時秩序ノードに基づいて実現できる分散ロック.大まかな考え方は、各クライアントがメソッドにロックをかけると、zookeeper上のメソッドに対応する指定ノードのディレクトリの下で、一意の瞬時秩序ノードが生成されることである.ロックを取得するかどうかを判断する方法は簡単で,順序ノードの中でシーケンス番号が最も小さいものを判断するだけである.ロックを解除する場合は、この瞬時ノードを削除するだけでよい.同時に、サービスダウンによるロックが解放されず、デッドロックの問題が発生することを回避できます.再読み込み可能なロックサービスがカプセル化されたzookeeperサードパーティ製ライブラリCuratorクライアントを直接使用できます.
キャッシュベースの分散ロック
Redisベース
Redisを使用するクライアントRedisson


   org.redisson
   redisson
   3.3.1
  



   org.redisson
   redisson
   2.8.1


Redisson Lock API:
RLock lock = redisson.getLock("anyLock");
// Most familiar locking method
lock.lock();

// Lock time-to-live support
// releases lock automatically after 10 seconds
// if unlock method not invoked
lock.lock(10, TimeUnit.SECONDS);

// Wait for 100 seconds and automatically unlock it after 10 seconds
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
...
lock.unlock();

Tairベース
参考資料
Curator Recipesインスタンスに従ってZooKeeperの使い方を学ぶ:分散ロック「Redis公式ドキュメント」はRedisで分散ロックRedisson Distributed locks and synchronizersを構築する