分散ロックのカプセル化も非常に特殊である

分散ロックのカプセル化も非常に特殊である

通常、分散ロックには、Redis ベース、Zookeeper ベース、データベース ベースなど、多くのオプションがあります。

Redis はデータをキャッシュするために使用され、すべてのプロジェクトで使用されるため、分散ロックには Redis がよく使用されます。

ロックに Redis を使用する場合は、redisson などのオープンソース ソリューションを直接使用できます。

最も一般的な使用法は次のとおりです。

  1. RLockロック= redisson .getLock("anyLock");  
  2. ロック。ロック();  
  3. 走る();
  4. ロックを解除します。

ロック オブジェクトを取得し、lock() を呼び出してロックし、ビジネス ロジックを実行して、unlock() を呼び出してロックを解除します。

フレームワークによって提供される使用法は非常に簡潔ですが、それでもロックをラップする必要があります。パッケージ化の目的は、スケーラビリティと使いやすさを向上させることです。

抽象インターフェース

ロックに redisson のネイティブ API を直接使用すると、多くの場所に RLock 関連のコードが出現します。ある日突然、何らかの理由で鍵を交換する必要が生じ、変更の範囲が比較的大きくなります。 RLock が使用されているすべての場所を変更する必要があります。

以下に示すように、多くのサービスは RLock.lock() メソッドを使用します。ロックを交換する必要がある場合は、関係するすべてのクラスとメソッドを変更する必要があります。変更されたポイントは赤で表示されます。

したがって、抽象化のレイヤーを作成する必要があります。 DistributedLock インターフェースを定義してロック関連の機能を提供し、複数の実装を提供できるため、置き換えや拡張が容易になります。

次の図に示すように、各サービスは DistributedLock インターフェースを使用してロックします。ロック実装を置き換える必要がある場合、使用場所を変更する必要はなく、DistributedLock 実装を置き換えるだけで済みます。

自動リリース

自動解放とは、ロック後、ビジネス ロジックの実行後にロックを自動的に閉じる必要があることを意味します。以前の Redisson メソッドによれば、保持されているロックを解除するには、unlock() を手動で呼び出す必要があります。

もちろん、Redisson はタイムアウト解除機能も提供します。通常の状況では、業務の実行後にロックを解除する必要があり、同じロックに対する次の要求は引き続き処理できます。

リソースを手動で解放する場合に最もよくある問題は、解放を忘れてしまうことです。そのため、リソースを自動的に解放する try-with-resources が JDK7 で導入されました。これは皆さんもよくご存知だと思います。

したがって、カプセル化する場合、エラーの可能性を減らすために、ユーザーが手動で解放しないようにします。結果については、Supplier を使用してロジックを渡すことができます。結果がない場合は、Runnable を使用してロジックを渡すことができます。

  1. /**  
  2. * ロック 
  3. * @param key ロックキー 
  4. * @param waitTime ロックを試行、待機時間 (ミリ秒)  
  5. * @param リースタイム ロック後の有効期限 (ミリ秒)  
  6. * @param success ロックの実行が成功した場合のロジック 
  7. * @param fail ロックが失敗したときに実行するロジック 
  8. * @戻る 
  9. */  
  10. < T > T ロック(文字列キー、int 待機時間、int リース時間、サプライヤー< T >成功、サプライヤー< T >失敗);

使用:

  1. 文字列結果=分散ロック.lock("1001", 1000, () - > {  
  2. System.out.println("入ってください...");  
  3. 試す {  
  4. スレッドをスリープ状態にします(1000);  
  5. } キャッチ (InterruptedException e) {  
  6. e.printStackTrace();  
  7. }  
  8. 「成功」を返します。  
  9. }, () - > {  
  10. System.out.println("ロックに失敗しました...");  
  11. 「失敗」を返します。  
  12. });

災害復旧

注意が必要なもう一つの問題は、ロックの可用性です。対応する Redis に問題がある場合、この時点でロックは確実に失敗します。何も対策を講じなければ、通常の業務運営に影響が及び、業務が行えなくなります。

Redis ロックの実装に加えて、データベース ロックなどの他のロックも実装できます。 Redis ロックが使用できない場合は、データベース ロックにダウングレードされます。パフォーマンスは影響を受けますが、ビジネスには影響しません。

ロック処理

データベースのロックも利用できない場合は(余談ですが、すべてが利用できなくなる可能性は非常に低いです)、業務処理を失敗させる方がよいでしょう。同時実行シナリオによって発生する問題を防ぐために、ロック シナリオを使用するためです。ロックが利用できない場合、異常消費して業務処理を継続することになり、ロックなしでは業務上の問題が発生する可能性があります。

もちろん、Redis やデータベースの監視などの監視も非常に重要です。障害が発生した場合、担当者が適時に介入します。

監視システム

分散実装を実行する Redis、データベース、Zookeeper などのミドルウェアの監視は絶対に必須です。もう 1 つのタイプの監視は、ロック アクションのよりきめ細かい監視です。

たとえば、ロックにかかる時間、ロックを解除するまでの時間、ロック内で業務を実行する時間、ロックの同時実行性、実行回数、ロック失敗回数などです。

これらのデータ指標は非常に重要であり、問​​題をタイムリーに検出するのに役立ちます。たとえば、10 秒以内に数百回のロック試行が失敗した場合、それらはすべてデータベース ロックにダウングレードされます。このとき、アラームを受信して​​、Redis に問題があることを認識し、時間内に解決します。

監視方法は各社によって異なりますので、ご自由にお選びください。クロールのためにデータを Prometheus に公開することも、Cat を統合して追跡を行うこともできます。監視してアラートを発行できれば問題ありません。

<<:  5G はエッジ コンピューティングに何をもたらすのでしょうか?

>>:  調査によると、クラウドに完全に移行した企業はわずか13%に過ぎない。

推薦する

Baiduの最新アップデートを把握し、SEO学習への扉を開きましょう

現在の百度のウェブマスターコミュニティでは、百度が微妙なアルゴリズム構造を調整していることが常に見ら...

arkecx: 米国西海岸のサンノゼデータセンターのクラウドサーバーの簡単なレビュー

arkecxはどうですか? arkecxレビュー。arkecx(アークエッジクラウド)もアメリカ西海...

公安省:ベトナム人花嫁のオンライン共同購入は違法の疑いがあり、厳しく取り締まる予定

チャイナタイムズ(記者 袁国利)最近、共同購入ウェブサイトがベトナムへの無料旅行を獲得し、ブラインド...

どの EDM 電子メール マーケティングが優れていますか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス電子メール マーケティン...

3月にBaiduの新規サイト向けの3つの定期的な最適化の全プロセス

タイトルを読んだ後、多くのウェブマスターは確かにそのような成果を軽視するでしょうが、この SEO の...

強みと弱み:個人ウェブサイトが生き残る道

ほとんどの SEO 担当者は、ビジネスを始める目的でこの業界に参入します。オンラインでビジネスを始め...

オンライン問題レビュー、JVM Fast Throw のストーリー

[[394549]]まず第一に、これは JVM の基盤となる最適化に関するいくつかの知識ポイントに関...

ステートフルKubernetesの安定性を確保する方法

Kubernetes は、パブリック クラウドでのアプリケーション展開の事実上の標準です。しかし、企...

イーソン・チャンは百度と捜狗の顔を変えた。句読点が思考を呼び起こした

検索エンジンに少しでも詳しい人なら、次のことを知っているでしょう。「検索エンジンのユーザーが使用する...

アマゾン ウェブ サービスとドイツ フットボール リーグが、2022-23 シーズンに向けて 2 つの新しい「ブンデスリーガ ステータス」を発表

アマゾン ウェブ サービスとドイツ フットボール リーグは、アマゾン ウェブ サービスを利用した最新...

クルンはどうですか? 「通常のBGP」ラインのサーバーの簡単な評価

Kurunの主力事業はやはりロサンゼルスデータセンターの国内回線を最適化したサーバーであるはずだが、...

GDPRとクラウドコンピューティング: 知っておくべきこと

欧州からの新しいデータ規制は、クラウド コンピューティングを使用する企業にいくつかの問題を引き起こす...

Google および Baidu サイトのブロックとブロック解除に関する実践的な経験の要約

昨年、個人ウェブマスターの輪に入って以来、私は大小さまざまなウェブサイトの運営とプロモーションを実践...

ウェブサイト最適化におけるキーワードデータベースの役割

ウェブサイトの最適化を行う際、まずキーワードを選択する必要があります。小規模サイトの場合、選択は比較...

キーワードのランキングを決定するものは何ですか?

最近、新しいウェブサイトの準備と開発に忙しく、宿題を提出できない日が続いています。最近、友人からウェ...