分散ロックは「スレッド同期」の延長です最近、「分散ロック」が初めて適用されました。考えてみてください。分散ロックは孤立したスキルポイントではなく、実際にはホスト間のスレッド同期です。
スタンドアロン サーバーは、特定のメモリ ヒープを共有することで、ロック/ロック解除をマークできます。スレッドの同期は、最終的にはスタンドアロン オペレーティング システムのユーザー状態/カーネル状態における共有メモリのアクセス制御に基づいています。 分散サーバーは同じマシン上にはなく、複数のホストにまたがっているため、ロック タグはすべてのマシン プロセスが参照できる場所に保存する必要があります。 ロックは、在庫管理や宝くじなど、多くのビジネス シナリオの開発に使用されます。 たとえば、在庫が 1 つしか残っておらず、3 人のユーザーが同時に購入する予定の場合、最初に購入したユーザーの在庫はすぐにクリアされ、他の 2 人のユーザーは購入できなくなります。 分散ロックの理解この分散ロックを含め、私たちがよく話題にするスレッドセーフティとスレッド同期のソリューションはすべて、 「複数のスレッド/プロセスが同時に特定のリソースを更新しています。」 基本的な考慮事項1. 分散システムでは、ロックは一度に 1 つのサーバーによってのみ取得できます (これが分散ロックの基礎です) 2. デッドロックを防止するロック解除機構を装備(特定の事故を防止するため、ロックが解除されず、他の人がロックを取得できない) Redis SET リソース名 任意の文字列 NX EX 最大ロック時間 これは最もシンプルな分散ロック実装ソリューションです。 SET コマンドはいくつかのパラメータをサポートしています:
SET コマンド パラメータは SETNX、SETEX、および GETSET を置き換えることができるため、これらのコマンドは将来的に廃止される可能性があります。 上記のコマンドが OK を返す場合 (または再試行される場合)、クライアントはロックを取得します。 ロックを解除するには、DEL コマンドを使用します。タイムアウト期間に達すると、ロックは自動的に解除されます。 ロックを解除するときに、システムをより堅牢にするためにいくつかのデザインを追加します。 3. ロック タグ値として固定の文字列値を使用せず、業界ではトークンと呼ばれる、推測しにくいランダムな値を使用します。 4. ロックを解除するためにDELコマンドを使用せず、キーを削除するスクリプトを送信します。 ポイント 3 と 4 は、「ロックの期限が早く切れ、クライアント A が実行を完了していないため、クライアント B がロックを取得します。この時点で、クライアント A は実行を完了しています。ロックが削除されると、クライアント B のロックも削除されますか?」という問題を解決することを目的としています。 - 4 は 3 つのテクノロジの推奨実装です。 スクリプトは次のとおりです。
以下は、StackExchange.Redis を使用した上記の考慮事項に基づいたコード例です。
上記のコードでは、5 番目の考慮事項が追加されます。 5. 無制限のロック取得を避けるために、非ブロッキングロックが追加されます。poll_sはロックを待機し、待機されない場合はロックを取得しなくなります。 方向: 3 つのタスクを並行して開始し、同時に在庫を削減してみましょう。
3つの並列タスクが順番にロックを取得/解放しているのがわかります。 出力の概要この記事では、スレッド セーフティとスレッド同期の基礎から始め、分散ロックがホスト間のリソース スレッド/プロセス同期ソリューションであることを認識します。また、RedisSET コマンドを分散ロックとして使用する場合の設計上の考慮事項についても段階的に説明します。記憶力が良いことは文章力が悪いことほど良くありません。 |
<<: IDC:中国の産業用クラウド市場規模は2020年後半に23億ドルに達する見込み
>>: 分散トランザクション - 信頼性の高いメッセージ最終一貫性ソリューション
oplink は、ドメイン名が 2001 年に登録され、会社が 2006 年に登録されました (テキ...
[51CTO.com からのオリジナル記事] 低コストと高効率という利点により、クラウド コンピュー...
[51CTO.comよりオリジナル記事] 9月25日、百度とインテルは、中国におけるマルチアクセスエ...
私の一般的な答えは、電子商取引を行うこと、または SEO 関連サービスを提供することです。前者は S...
Microsoft は最近、顧客がローカル ERP および CRM アプリケーションをクラウドに移行...
WalkMe は、ユーザーが Web サイトの使用方法を理解するのに役立つツールです。同社は本日、S...
初心者でもベテランでも、複雑なサーバーに直面したときは、管理パネルさえあれば、コマンドを 1 行ずつ...
時々、過去数年間に学んだことを振り返ります。ざっくり考えてみると、SEO以外には何も見つからない、ほ...
海外メディアの報道によると、アップルは製品のソースコードとキーを中国市場に提出し、監視用の「バックド...
【捜狐ITニュース】ChinaHR.comはまだ売却されていないが、すでに200人の従業員が解雇を要...
百度の公式ウェブマスタープラットフォームでLeeが外部リンクの不正行為と無効な外部リンクについての記...
私が開設して1年以上経った石家荘証券ネットワークは、すでに運営されています。この1年間で、ウェブサイ...
「あなたの靴はとても素敵ですね。ナイキですか、それともアディダスですか?どこで買ったのですか?iPh...
kvmlaは国内の古いブランド(2011年~)です。最近、日本のソフトバンク回線でVPSを取得しまし...
今日は、新しい VPS プロバイダー、inferno (inferno Solutions) を紹介...