分散ロック、もう少し深く! !

分散ロック、もう少し深く! !

1. 原因

分散環境では、複数のマシン上の複数のプロセスが 1 つのデータに対して操作を行うため、必然的に「商品の売れ過ぎ」などのデータの不整合が発生します。したがって、分散環境で重要なリソースにどのようにアクセスするかは、インターネットにとって大きな問題です。分散ロックが解決策です。

2. 相互排除の原則

原則: 複数のアクセス パーティが同じリソースを操作する場合、相互排他性が必要です。これは通常、これらのアクセス パーティが同時にアクセスできるロックを使用することで実現されます。

シーン1

同じプロセス内で、複数のスレッドをシリアル アクセス用にロックすることで、それらのスレッドを相互に排他的にすることができます。

ステップ:

  • 複数のスレッドが同時にロックを取得する
  • ブロックを取得するのは 1 つのスレッドのみで、ブロックを取得できない他のスレッドはブロックされるか、次回再試行されます。
  • ロックを取得したスレッドは重要なリソースを操作する
  • 重要なリソースを操作した後はロックを解除する

ナレーション: ロックはプロセス内のデータ構造であり、重要なリソースをめぐる競合をロック構造をめぐる競合に変換します。

シーン2

分散環境では、プロセス内のロック構造をプロセス外で使用することはできません。では、マルチプロセス環境で重要なリソースをどのように保護すればよいのでしょうか。

インプロセス ロック メカニズムと組み合わせると、いくつかの条件を導き出すことができます。

  • すべてのプロセスがアクセスできる特別なデータ構造が必要である
  • 同時にアクセスできるのは1つのプロセスのみ
  • リソースに正常にアクセスするプロセスは、重要なリソースにアクセスできます。

ナレーション: この問題の鍵となるのは、一度に 1 つのプロセスのみが正常にアクセスできる外部ストレージ構造を見つけることです。

3. 分散ロック

分散ロックの核心は適切な外部ストレージを選択することであるため、「適切な」ストレージ メディアとストレージ モデルを選択する方法が私たちの考え方の核心です。

では、分散ロックではリレーショナル ストレージと KV ストレージのどちらを使用すればよいのでしょうか?

ロックの観点からは、それほど多くのことは必要とせず、KV ストレージで十分です。そこで私たちが最初に考えたのは、Redis ソリューションです。 Redis ソリューションは最適なソリューションでしょうか?

Redis: シングルスレッドの高性能インメモリ KV ストレージ ソリューション。

  • すべてのプロセスからアクセスできるデータ構造
  • シングルスレッドは、1つのプロセスのみが正常にアクセスできることを満たします(setnxコマンド)
  • ビジネスにおける重要なリソースに対して、成功セットのプロセスが確実に実行されるようにする

ステップ:

  • 複数のマシン上の複数のプロセスがこのロックを競い合います。たとえば、キャッシュ上でset key=123操作を同時に実行します。
  • ロックを取得できるのは 1 つのプロセスのみ、つまり、キャッシュに key=123 を正常に設定できるのは 1 つのプロセスのみであり、失敗したプロセスは次回再試行します。
  • ロックを取得したプロセスは重要なリソースに対して操作を行う
  • 減算が完了すると、ロックが解除され、つまりキー=123でキャッシュが削除されます。

機能的には、Redis は分散ロックを完璧に実装しています。詳しく見てみましょう。

  • MySQL は分散ロックを実装できますか?
  • ZooKeeper の分散ロックの実装と Redis の実装の本質的な違いは何ですか?
  • さまざまなアーキテクチャオプションの中からどのように選択すればよいでしょうか?

<<:  Kubernetes マイクロサービス自動リリース システム

>>:  5つのオープンソース仮想化ツールで仮想マシンを管理する

推薦する

エッジコンピューティング時代の到来は AI にどのような影響を与えるのでしょうか?

[[270736]]近年、テクノロジー界では人工知能が注目されている分野となっている。中国では近年、...

CPUハードウェア支援仮想化技術

[[317685]]現在、主なテクノロジーは Intel の VT-x と AMD の AMD-V ...

テクノロジー以外に何がありますか?

初めてこの業界に入った頃が懐かしいです。SEO については全く知りませんでした。今では、この仕事に応...

ウェブサイトのキーワードランキングを安定させる方法

新しいサイトのランキングが確立された後は、前の例で述べた「バケット エレベーター」のケースのように、...

ウェブサイトのタイトルを正しく書く方法

ユーザーがキーワードを検索するときに最初に比較するのは、Web サイトのタイトルです。ユーザーはタイ...

Python 仮想マシン内を見て回ったところ、戻ってきたら殺されていました!

私は C ドライブの深いディレクトリで生まれましたが、誰が私をここに置いたのかはわかりません。 [[...

エッジ管理ソリューションを構築する際に考慮すべきこと

エッジでのソリューションの導入、オーケストレーション、監視に関して、エッジ アプリケーションと同様に...

ホストキー: オランダの GPU サーバー、4 時間で配信、8*GTX1080Ti または 4*RTX2080Ti をサポート

Hostkey のオランダのデータセンターは、ビデオスライスサーバー、トランスコーディングサーバー、...

2020 年のマルチクラウド環境の長所と短所

[[333918]]業界の専門家やアナリストは、ビジネス開発のために複数のパブリック クラウド イン...

大規模分散ストレージ分散プルーニングシステム

分散ファイルシステムの保存対象は主に非構造化データですが、実際のアプリケーションでは、構造化データや...

Baidu Netdisk を使用してウェブサイトのロングテール キーワード マトリックスを作成する方法

クラウド ストレージの概念はますます普及しています。Kingsoft QuickDisk、Huawe...

高品質なリンクに関する2、3のこと

インターネット上に出回っている多くの SEO 記事は、高品質の外部リンクの重要性を強調しています。そ...

話し合い: 年齢を重ねるほど SEO の価値が高まるというのは本当ですか?

今日、「年齢を重ねるほどSEOとしての価値が高まる」という話題が突然出てきて、私は深く考え込んでしま...

最近、Baidu のクロール速度が遅くて異常な場合はどうすればいいですか?

みなさんこんにちは。ハルビンバーチャルアンドリアルウェブサイトデザインです。仕事の都合で、最近はほと...