飼育係分散ロック[]

I.概要

  • 分散ロック・ソリューション(目的:分散型フィールドのデータのセキュリティ問題の共有を確保するために)
  • 分散データベースロックの実装(特に低効率、推奨されていません)
  • (デッドロック、リリースの問題を考慮することは非常に面倒な)分散ロックsetNxのRedisの実装に基づいて、redission分散ロック
  • 実現飼育係分散ロックに基づいて(強く推奨)
  • SpringCloudは一時的なノードのリリースにロック(最大効率)を使用して、実装するための非常にシンプルなグローバルロック(人気のある)を達成するために構築され、故障までの時間は、制御が容易です

  1. 分散ロック(原因:サーバーは、クラスタを生成しているため)
  2. 単一のサーバー(保証された固有の)UUID、タイムスタンプ、(大企業)Redisの上、設定された番号を生成する方法
  3. なぜ、Redisの自身のRedisシングルスレッドであるため、かなりの数150万オーダーのRedisに保存されている番号、クライアントの注文後、注文番号を対応のRedisへの直接アクセスを得ることができる生成するために、事前に注文を生成するために、だけでなく、Redisの場合100万の注文番号を生成するために存在し続けているだけ50万注文番号、。
  4. あなたは、問題の注文番号の一意性を保証するために、クラスタ環境でのタイムスタンプをUUIDを使用している場合は?することはできません

原則

  1. ノードのみであるため、同時に、飼育係に飼育係を複数のJVM 1と同じノード(/ロック)を作成し、場合にのみ、その後、複数のクライアントが存在する場合、同時に唯一の人を見て、そして最後に、同じノード/ロックを作成します迅速/ロックノードを作成することができますリソースを、つかむことができ、一時的なノードタイプを使用して、この時間は、入力する必要があります。
  2. JVM1ノードが正常に作成されている場合は、/ロックノードを報告しますJVM3ノードが作成され、この時間JVM2は、すでに存在しています。この時間JVM2とJVM3待機。JVM1プログラムは、その後、終了した場合
  3. JVM1プログラムは現在終了している場合はロックが解除される方法Zookeepreは達成?、その後、ZKの現在JVM1現在のセッションは、セッションを閉じられています。
  4. どのようにロックを取得Zookeepre?速く作成するノードを要求している人を参照してください、と誰もがロックを取得することができます。
  5. 取得するウォッチャー(イベント通知)を使用して、この時間JVM2とJVM3は/ロックは、取得要求を再入力するには、この時間は削除されました。
  6. プログラムが処理されていない場合は、デッドロックにつながる可能性があり、あなたは、ビジネスケースで60秒を見て、有効期限を設定することができZK接続、閉じるための直接呼び出しを遅延の完全な閉鎖を余儀なくない、遅延の確率は非常に小さいです。

実装コード

ロックコード

おすすめ

転載: www.cnblogs.com/haoworld/p/zookeeper-fen-bu-shi-suo.html