分散大規模データ収集のプロセスでは、情報ソースの管理が特に重要です。同じタスクを同時に 1 つのコレクタのみで処理できるようにするには、タスクのスケジューリングの一意性を確保する必要があります。通常、分散データ収集を実行する場合は、収集タスクを分散し、タスクの一意性を確保することが主な役割であるスケジューリング モジュールが存在します。
分散型であるため、複数のサーバー (複数のマシン) が関与し、各サーバーは複数のコレクター (複数のプロセス) に関与し、各コレクターには複数のスレッドが関与する可能性があります。したがって、タスク内のロック メカニズムはスケジューリングモジュールは特に重要です。アプリケーションの実装アーキテクチャに応じて、ロック実装メソッドは通常、次のタイプに分類できます。
ハンドラーが単一プロセスおよびマルチスレッドの場合、Python では、スレッド モジュールの Lock オブジェクトを使用して、共有変数への同期アクセスを制限し、スレッド セーフを実現できます。
単一マシンと複数のプロセスの場合、Python ではマルチプロセッシングの Lock オブジェクトを使用して処理できます。
マルチマシンおよびマルチプロセス展開の場合、分散同期ロックを実装するには、サードパーティのコンポーネント (ストレージ ロック オブジェクト) に依存する必要があります。
スケジューリング モジュールはマルチマシン、マルチプロセス、マルチスレッドの処理メカニズムであるため、3 番目の方法と一致します。
#分散ロックの実装方法
現在主流の分散ロックの実装方法は次のとおりです。それぞれの実装方法にはそれぞれメリットがあり、総合的に検討した結果、Redis が最適です。主な理由は、
- Based on mysql などのデータベース
#redis などのキャッシュに基づく- #zookeeper に基づく
ただし、redis を使用して実装された分散ロックは、次の条件も満たす必要があります。
- redis はメモリをベースに動作するため、データベースよりもアクセス速度が速く、同時実行性が高くてもロック後のパフォーマンスがそれほど低下しないためです
- redis はキー値の生存時間 (TTL) を設定できます
- redis は使いやすく、全体的な実装オーバーヘッドが低くなります
データの一貫性を確保するために、redis を使用して分散同期ロックを実装します。これは次の特性を満たす必要があります。
- 1 つのスレッドのみが占有できる他のスレッドはロックが解放されるまで待機する必要があります
- ロック操作はアトミック性を満たす必要があります
- デッドロックは発生しません。ロックを取得したときなど スレッドがロックを解放する前に突然異常終了し、他のスレッドがロックの解放をループで待機することになる
- ロックは同じスレッドによって設定する必要があります
実際の操作プロセスでは、スケジューリング モジュールを分離しました。 Java クライアント Jredis (JRedis は、Redis 分散ハッシュ キー/値データベースに接続するために使用されるハイエンドの高性能 Java クライアントです。Spring Boot を使用して同期および非同期を実装する独立したサービス) に基づいて、コレクション システム全体から収集します。これにより、他のコレクターが HTTP 経由で処理される収集タスクをリクエストできるようになります。処理プロセスは大まかに次のとおりです:
- 相互排他性を満たし、同時にロックを取得できるのは 1 つのスレッドのみです。
- Redis の ttl を使用してデッドロックが発生しないようにします。が発生しますが、ロックの有効期限による問題も発生します。複数のスレッドが同時にロックを占有するという問題があるため、
- 使用を避けるために、ロックの有効期限を合理的に設定する必要があります。ロックが誤って削除されないようにするためのロックの一意性
- コレクターは、HTTP 経由でタスク リクエストをディスパッチング センターに送信します。 ;
- ディスパッチング センターはロックが存在するかどうかを判断し、存在する場合は空のセットが直接返されます。;
- ロックが存在する場合は、空のセットが直接返されます。存在しない場合、リクエストはロックされ、ソース ルールに従って対応する収集タスクが取得されます。
- 取得したタスクを返します (保留中のタスクがない場合は空を返します)
public static List有効期限
を追加する必要があります。そうしないと、不明な例外が発生した場合にロックが解放されず、コレクタが収集タスクを取得できなくなる可能性があります。
以上がRedis 分散ロックに基づいてタスク スケジューリングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。

Redisは、次のようなさまざまなデータ構造をサポートしています。1。文字列、単一価値データの保存に適しています。 2。キューやスタックに適したリスト。 3.非重複データの保存に使用されるセット。 4。ランキングリストと優先キューに適した注文セット。 5。オブジェクトまたは構造化されたデータの保存に適したハッシュテーブル。

Redisカウンターは、Redisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

RedisクラスターでのZsetの使用:Zsetは、要素をスコアに関連付ける順序付けられたコレクションです。シャード戦略:a。ハッシュシャーディング:ZSTキーに従ってハッシュ値を分配します。 b。範囲シャード:要素スコアに従って範囲に分割し、各範囲を異なるノードに割り当てます。操作の読み取りと書き込み:a。読み取り操作:ZSetキーが現在のノードのシャードに属している場合、ローカルで処理されます。それ以外の場合は、対応するシャードにルーティングされます。 b。書き込み操作:Zsetキーを保持しているシャードに常にルーティングされます。

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
