バックグラウンド
Distro プロトコルは、Nacos コミュニティによって開発されたAP 分散プロトコルです。これは、一時インスタンス用に設計された分散プロトコルです。これにより、一部の Nacos ノードがダウンした後でも、一時インスタンス処理システム全体が正常に動作できることが保証されます。
ステートフル ミドルウェア アプリケーションの組み込みプロトコルとして、Distro は、各 Nacos ノードによる大規模な登録リクエストの統一された調整と保存を保証します。
デザイン思考
Distro プロトコルの主な設計思想は次のとおりです。
-
各ノードは同等であり、新しいデータを他のノードに同期しながら書き込みリクエストを処理できます。
-
各ノードはデータの一部のみを担当し、データの一貫性を維持するために、担当するデータのチェック値を定期的に他のノードに送信します。
-
各ノードは独立して読み取りリクエストを処理し、タイムリーにローカルに応答を送信します。
Distro プロトコルの仕組み
次のセクションでは、Distro プロトコルの動作原理を紹介するために、いくつかのシナリオに分けて説明します。
データの初期化
新しく追加された Distro ノードは、全量のデータをプルします。具体的な操作は、すべての Distro ノードをポーリングし、他のマシンにリクエストを送信して全量のデータを取得することです。
完全なプル操作が完了すると、現在登録されているすべての非永続インスタンス データが Nacos の各マシンに維持されます。
データ検証
Distro クラスターが開始されると、ハートビートがマシン間で定期的に送信されます。ハートビート情報は主に、各マシン上のすべてのデータのメタデータです (メタデータが使用される理由は、ネットワーク内のデータ送信の規模を確実に低いレベルに保つためです)。この種のデータ検証はハートビートの形式で実行されます。つまり、各マシンは一定の時間間隔で他のマシンに対してデータ検証要求を開始します。
データ検証プロセス中に、マシンは他のマシン上のデータがローカル データと矛盾していることを発見すると、データを完成させるための完全なプル リクエストを開始します。
書き込み操作
起動済みの Distro クラスターの場合、クライアントによって開始された書き込み操作の過程で、登録されている非永続インスタンスに対する書き込み要求が特定の Nacos サーバーにヒットしたときの、Distro クラスターの処理のフローチャートは次のとおりです。
ステップ全体は、いくつかの部分 (図の上から下へ) で構成されます。
- 前述のフィルターはリクエストをインターセプトし、リクエストに含まれる IP およびポート情報に従って、リクエストが属するディストリビューション担当ノードを計算し、リクエストをそのリクエストが属するディストリビューション担当ノードに転送します。
- 責任ノード上のコントローラーは書き込みリクエストを解析します。
- Distro プロトコルは定期的に同期タスクを実行して、マシンが担当するすべてのインスタンス情報を他のノードと同期します。
読み取り操作
全量のデータが各マシンに保存されるため、各読み取り操作で、Distro マシンはローカルからデータを直接取得します。迅速な対応
このメカニズムにより、Distro プロトコルを AP プロトコルとして使用して、読み取り操作にタイムリーに応答できるようになります。
ネットワーク分割の場合、すべての読み取り操作も正常に戻ることができます。ネットワークが復元されると、各 Distro ノードは各データ フラグメントのデータをマージして復元します。
まとめ
Distro プロトコルは、一時インスタンス データ用に Nacosによって開発された一貫性プロトコルです。そのデータはキャッシュに保存され、起動時に完全なデータ同期が実行され、定期的にデータ検証が実行されます。
Distro プロトコルの設計思想に基づいて、各 Distro ノードは読み取りおよび書き込みリクエストを受信できます。すべての Distro プロトコルのリクエスト シナリオは、主に 3 つの状況に分けられます。
-
ノードが担当するインスタンスに属する書き込みリクエストを受信した場合は、直接書き込みます。
-
ノードが担当するインスタンスに属さない書き込みリクエストを受信すると、そのリクエストはクラスター内でルーティングされ、対応するノードに転送されて読み取りと書き込みが完了します。
-
ノードは読み取りリクエストを受信すると、直接クエリを実行してローカルに返します(すべてのインスタンスが各マシンに同期されているため)。
Nacos の組み込み一時インスタンス整合性プロトコルとしての Distro プロトコルは、分散環境において、各ノードのサービス情報のステータスを他のノードにタイムリーに通知できることを保証し、数百のストレージとストレージを維持できます。一貫性。