分散ロック 分散RedisのRedlock

分散ロック 分散RedisのRedlock

導入

以前、分散ロックを実装するために Redis を使用したときは、単一​​の Redis インスタンスに基づいていたため、Redis 自体に単一障害点がありました。 Redis の公式ドキュメントでは、分散 Redis で分散ロックを実装するために「合理的だと思われる」アルゴリズム、Redlock が紹介されています。

Martin Kleppmann が Redlock を分析した記事を書きました。その後、redis の作者が反論記事をここに書きました。来て。

Redlock 実装ライブラリ

  • ジャバレディソンスター9458
  • C# RedLock.net スター 259
  • redsync.go スター 249

背後にあるアルゴリズムは同じですが、「いいね!」の数は確かに印象的です。

シングルポイントRedisロック

まず、シングルポイント Redis ロックがどのように実装されているかを簡単に確認してみましょう。

ロックを取得

  1. リソース名をランダム値に設定 NX PX 30000

クライアント A は Redis に特定のキーと値のペアを設定し、タイムアウトを設定します (デッドロックを回避するため)。他のクライアントがキーにアクセスすると、まずキーがすでに存在するかどうか、その値が my_random_value と等しいかどうかを確認します。すでに存在する場合は待機します。それ以外の場合は、ビジネス コードを正常に取得して実行します。 resource_name と my_random_value はすべてのクライアントに認識され、共有されます。

ロックを解除

  1. redis.call("get",KEYS[1]) == ARGV[1]の場合、redis.call("del",KEYS[1])を返し、そうでない場合は0を返します。

キーによって取得された対応する値を比較して、それらが等しいかどうかを確認します。等しい場合は削除(解放)し、そうでない場合は失敗を返します。

以前に記事を書いたことがあります。

シングルポイントRedisロックの欠点

この欠陥は実は非常に明白です。 Redis インスタンスが 1 つしか存在せず、それが失敗した場合、それに依存するすべてのサービスも失敗します。明らかに大規模なアプリケーションには適していません。

シンプルなRedisマスタースレーブアーキテクチャで発生する問題

単一障害点を回避するために、マスター 1 つとスレーブ 1 つで構成される Redis のマスター/スレーブ アーキテクチャを作成します。以下のような問題が発生します。使用シナリオは以下のとおりです。

  1. クライアント A はマスターのロックを取得します。
  2. データをスレーブに同期しているときにマスターがクラッシュしました (マスターとスレーブ間の同期は非同期であるため)。
  3. 奴隷が主人になる。
  4. クライアント B は同じキーと値を使用してロックを取得します。分散ロックの失敗

レッドロックアルゴリズム

N 個 (5 個と仮定) の Redis マスター インスタンスがあり、すべてのノードが互いに独立しており、業務システムも単純な呼び出しであり、メッセージの再送信などの他の補助システムは存在しないと仮定します。アルゴリズムをシミュレートしてみましょう:

1. クライアントはサーバーの現在の時刻 t0 をミリ秒単位で取得します。

2. 同じキーと値を使用して、5 つのインスタンスから順番にロックを取得します。ロックを取得する際、クライアントはビジネス ロックに必要な期間よりもはるかに短いタイムアウト期間を設定します。たとえば、ロックに 10 秒かかる場合、タイムアウトは 5 ~ 50 ミリ秒に設定できます。これにより、Redis インスタンス自体がクラッシュしたにもかかわらず、クライアントがまだロックを取得しようとしている状況を回避できます。タイムアウト後、次のノードに直接ジャンプします。

3. クライアントは、現在の時刻 (t1) から t0 を減算して、ロックを取得するために必要な時間 t2 (= t1-t0) を計算します。 t2 がロックのビジネス有効期間 (つまり、2 番目のステップでは 10 秒) 未満であり、クライアントが少なくとも 3 つの (5/2+1) ステーションでロックを取得した場合にのみ、ロック取得が成功したと見なすことができます。

4. ロックが取得された場合、ロックのサービス有効期間は 10s-t2 です。

5. クライアントがロックを取得できない場合は、N/2+1 以上のインスタンスのロックを取得していないか、有効期間 (10s-t2) が負である可能性があります。そのノードでロックが取得されていない場合でも、ロックを解除しようとします。

ロックの解除

解放は比較的簡単で、すべてのインスタンス上の対応するキーを削除するだけです。記事が気に入ったら、ぜひフォローしてください。読んでいただきありがとうございます!

<<:  クラウドコンピューティング、仮想化、コンテナ化について

>>:  中国企業はITの複雑性という課題に直面している。企業の46%が自社のIT環境が2年前よりも複雑になっていると考えている。

推薦する

Soso Sandboxの過去と現在をウェブサイトの改訂から見ることができます

Soso は、テンセントが所有する検索エンジンです。設立が早く、多額の資金を投入したにもかかわらず、...

2019 年のエンタープライズ クラウドの主要トレンド

企業がコンピューティングとネットワーク アーキテクチャを近代化するにつれて、クラウド ネイティブ ア...

ハイブリッドクラウド環境におけるセキュリティ対策

基本的に、完全にクラウドベースである、またはクラウドをまったく使用していない現代の企業は存在しません...

毎日平均 10,000 のオンライン ストアが閉鎖を余儀なくされています。小規模オンライン ストアは、電子商取引の波にどう対抗できるでしょうか?

競争圧力と有利な政策に直面して、ネットワーク運用はリスクと機会の両方に直面している。 2013年の鐘...

コロナウイルスのパンデミック中、VDIには新たなアプローチが必要になるかもしれない

VDI は、新型コロナウイルス感染症の流行により在宅勤務を余儀なくされた膨大な数の従業員をサポートす...

オリエンタルセレクションはライブストリーミング販売のボトルネックを打破できるか?

今年のライブストリーミング電子商取引界は、氷と火の世界と言えるでしょう。一方、かつてのライブストリー...

レノボ データセンター事業グループが新しいデータ管理ソリューションを発表

ノースカロライナ州リサーチ トライアングル パーク、2020 年 12 月 3 日 – Lenovo...

江西省の大規模なねずみ講事件の最終審理:太平洋直接購入ネットワークは38億元を蓄積し、第一被告は懲役10年と罰金4000万元の判決を受けた

写真写真中国新聞社5月29日。CCTVニュース微博によると、本日10時、江西太平洋直接購入ネットワー...

Douyin のクラウドネイティブ ベクトル データベースが「非主流」から「ニューノーマル」へと進化

1. ベクターデータベースの背景1. 非構造化データの検索問題構造化データとは、明確で固定されたフィ...

キーワード選定はあくまでも基本、レイアウトこそが最重要(第2部)

前回の記事「キーワードの選択は基本的なレイアウトであり、最も重要なことです(パート1)」は、多くのウ...

WordPressブログ: 疑似静的リンクはインクルージョンに役立たない

Baidu は WordPress ブログのコンテンツ ページをゆっくりとインデックスし、タグ ペー...

SEO でよく使われる統計表は何ですか?

SEO でよく使用される統計表とは何ですか? 多くの SEO 担当者は、ウェブサイト データの統計表...

マイクロソフト インテリジェント クラウドは中国のデータセンターを拡張し、2022 年に商用運用を開始します。

[[384907]] 3月3日のBit.netによると、マイクロソフトは中国市場におけるクラウドサー...

LeTVのWeiboマーケティングは疑わしい:情報開示規制に異議を唱えていると非難される

インターネットイベントマーケティングは、eコマース分野からビデオ分野へと移行しています。 9月14日...

ブログの終焉から学ぶ教訓: ビジネスモデルのない製品は衝動的に行動することはできない

文/魏無慧「ナンバーワン IT ブロガー」として知られる Keso は、実はかなり前にブログをやめま...