目次
まえがき
Dubbo フレームワークには次のコンポーネントがあります
Consumer
プロバイダー
レジストリ
Monitor
Container
高可用性
最初にプロバイダーが開始され、プロキシ エージェントを通じてプロトコルが必要になります。公開されたインターフェイスは、実行可能本体である Invoker にカプセル化され、次に Exporter を通じてパッケージ化されて送信されます。登録センターに送信して登録を完了すると、サービスが公開されます。
ホームページ Java &#&チュートリアル Javaベースの分散サービスフレームワークDubboの原理と事例分析

Javaベースの分散サービスフレームワークDubboの原理と事例分析

Apr 24, 2023 pm 08:13 PM
java dubbo

    まえがき

    Dubbo を紹介する前に、まず基本的な概念を理解しましょう:

    Dubbo は RPC フレームワークです。 .RPC、つまり Remote Procedure Call (リモート プロシージャ コール)、その反対はローカル プロシージャ コールです。分散アーキテクチャが登場する前は、シングル アプリケーション アーキテクチャと垂直アプリケーション アーキテクチャでローカル プロシージャが使用されていました。電話。これにより、プログラマがリモート呼び出しの詳細を明示的にコーディングすることなく、プログラムが別のアドレス空間 (通常はネットワーク上で共有される別のマシン) にあるプロシージャまたは関数を呼び出すことができます。

    分散アーキテクチャ アプリケーション間のリモート呼び出しには、RPC フレームワークが必要です。目的は、リモート呼び出しをローカル呼び出しと同じくらい単純にすることです。

    Javaベースの分散サービスフレームワークDubboの原理と事例分析

    Dubbo フレームワークには次のコンポーネントがあります

    Consumer

    つまり、リモート サービスを呼び出すサービス コンシューマです。インターフェイス プログラミングでは、どのインターフェイスを呼び出すことができるかを知っています。特定の実装では、フレームワークがインターフェイスの特定の実装を提供するプロキシ クラスを提供する必要があるため、コンシューマはどのインターフェイスを呼び出すだけで済み、特定の実装の取得は によって処理されます。プロキシクラス。

    コンシューマは、呼び出しメソッド名とメソッド パラメータ値も指定する必要があります。

    しかし、プロキシ クラスは、この時点でサーバー上のどのリモート メソッドを呼び出す必要があるのか​​をまだ認識していません。この時点で、呼び出すことができるリモート サービスのリストを取得するために登録センターが必要です。

    リモート サーバーは通常、クラスター内に展開されるため、どのサーバーを呼び出すかについては、呼び出すのに最適なサーバーを選択するために負荷分散が必要です。

    同時に、クラスターのフォールト トレラント メカニズムも必要です。さまざまな理由により、リモート呼び出しが失敗する可能性があります。このとき、安定性を確保するために呼び出しを再試行するには、フォールト トレラント メカニズムが必要です。リモート通話の。

    同時に、通信とデータ送信を容易にするために、通信プロトコルとシリアル化形式がサービスプロバイダーと合意されます。

    プロバイダー

    つまり、サービスを公開するサービス プロバイダーです。サービス プロバイダーは、特定のインターフェイスを内部で実装し、そのインターフェイスを公開して、登録センターにサービスを登録します。サービス コンシューマはサービスを呼び出します。プロバイダは呼び出しリクエストを受信すると、合意された通信プロトコルを通じてリクエストを処理し、デシリアライズします。完了後、リクエストをスレッド プールに入れて処理します。スレッドはリクエストを受信し、対応するインターフェイス実装呼び出しを行い、呼び出しの結果を返します。

    レジストリ

    サービスの登録と検出のための登録センターです。登録センターは、サービス ディレクトリに相当するサービス アドレスの登録と検索を担当します。サービス プロバイダーと消費者開始時にのみ相互に登録されます。センターの対話、登録センターはリクエストを転送せず、プレッシャーは低いです。

    Javaベースの分散サービスフレームワークDubboの原理と事例分析

    #レジストリは、構成処理を一元化し、サブスクライバに変更を動的に通知することもできます。

    しかし、なぜ登録センターが必要なのでしょうか?登録センターがないと無理なのでしょうか?

    登録センターがない場合、サービス間の呼び出し関係は次のようになります。

    Javaベースの分散サービスフレームワークDubboの原理と事例分析

    サービスが増えると、サービス URL 構成管理が必要になります。ハードウェアロードバランサーへのシングルポイントプレッシャーも高まっています登録センターを利用することでサービスの一元管理、ソフトロードバランシングの実現、ハードウェアコストの削減が可能となります。登録センターの概略図:

    Javaベースの分散サービスフレームワークDubboの原理と事例分析

    Monitor

    は、サービスのコール数とコール時間をカウントする監視センターです。洗練された監視と便利な操作とメンテナンスが不可欠であり、これは後のメンテナンスにとって非常に重要です。

    Container

    は、サービスが実行されるコンテナです。

    #アーキテクチャ

    Javaベースの分散サービスフレームワークDubboの原理と事例分析

    図内の各ノードが果たす役割を紹介しました。各ノード間の呼び出し関係は次のとおりです:

    コンテナ サービス コンテナは、起動、読み込み、実行を担当します。

    プロバイダサービス プロバイダプロバイダサービス プロバイダが起動するときは、次のことを行う必要があります。リモート サーバーは、提供するサービスを検出し、Registry 登録センターに登録できます。

    コンシューマサービス コンシューマが開始されると、# に登録されます。 ##Registry 登録センター。必要なサービスへの加入

    Registry

    登録センターは、サービス プロバイダーのリストを消費者に返します。同時に、変更が発生した場合は、登録センターは、長時間の接続に基づいてリアルタイム データを消費者にプッシュします<p>サービス コンシューマがリモート サービスを呼び出す必要がある場合、ロード バランシング アルゴリズムに基づいて、プロバイダのアドレス リストからプロバイダ サーバーを選択して呼び出します。呼び出しが失敗した場合、クラスタのフォールト トレランスに基づいて呼び出しが再試行されます。戦略</p> <p>サービス利用者とプロバイダーは、メモリ内の呼び出し数と呼び出し時間をカウントし、そのデータを <code>Monitor監視センター

    高可用性

    #に送信します。
    • ##監視センターがダウンしても、サービスには影響しませんが、一部の統計データは失われます。

    • センター クラスターの登録後他の登録センターに自動的に切り替える

    • すべての登録センターがダウンした場合でも、サービス プロバイダーとコンシューマはローカル キャッシュを介して通信できます。お互いの情報を記録しますが、一方が変更を加えた場合、もう一方はそれを検出できません。

    • サービス プロバイダーはステートレスです。サーバーがダウンしても、サーバーには影響しません。サービスを提供する他のサービス プロバイダーがあります

    • すべてのサービス プロバイダーがダウンすると、サービス コンシューマは通常どおりに使用できなくなり、サービス プロバイダーが再接続して回復するまで無期限に再接続することになります。

    フレームワーク設計

    Javaベースの分散サービスフレームワークDubboの原理と事例分析

    主な層は、ビジネス (ビジネス ロジック層)、RPC 層、およびリモート層です。

    さらに細分化すると、Dubbo には合計 10 層のアーキテクチャがあり、その機能は次のとおりです。

    サービス、ビジネス層、つまりビジネス ロジック日常の開発におけるレイヤー

    Config、構成レイヤー、ServiceConfigReferenceConfig を中心とする外部構成インターフェイスは、構成クラスを直接初期化できます。または、構成クラス

    Proxy、サービス プロキシ層、サービス インターフェイス透過プロキシ、サービス クライアント Stub およびクライアント Skeleton を生成する Spring の構成解析を通じて生成できます。 、リモート呼び出しと返される結果を担当します。

    Registry、登録センター層は、サービス URL を中心として、サービス アドレスの登録と検出をカプセル化します。インターフェイスは RegistryFactory RegistryRegistryService

    Cluster ルーティングおよびクラスターのフォールト トレランス層は、ルーティング、負荷分散をカプセル化します。複数のプロバイダーのクラスター フォールト トレランスと、登録センターのブリッジを行います。ロード バランシングを通じて呼び出す特定のノードの選択、特別な呼び出しリクエストの処理、およびリモート呼び出しの失敗に対するフォールト トレランス措置を講じます。

    Monitor、監視層、RPC 呼び出しの数と呼び出し時間の監視とカウントを担当します

    Portocol、リモート呼び出し層、主に RPC リモート呼び出しメソッド

    Exchange、要求応答モデルのカプセル化に使用される情報交換層

    Transport、ネットワーク トランスポート層、抽象ネットワーク送信統合インターフェイス、MinaNetty が利用可能です

    # Serialize

    (シリアル化レイヤー) は、送信のためにデータをバイナリ ストリームにシリアル化し、データを逆シリアル化して受信することもできますサービス公開プロセス

    最初にプロバイダーが開始され、プロキシ エージェントを通じてプロトコルが必要になります。公開されたインターフェイスは、実行可能本体である Invoker にカプセル化され、次に Exporter を通じてパッケージ化されて送信されます。登録センターに送信して登録を完了すると、サービスが公開されます。

    #サービス利用プロセスJavaベースの分散サービスフレームワークDubboの原理と事例分析

    注: 上の図の青い部分はサービス利用者、緑の部分はサービス利用者です。部分はサービスプロバイダーです。 Javaベースの分散サービスフレームワークDubboの原理と事例分析

    サービス コンシューマが開始すると、登録センターをサブスクライブし、必要なサービス プロバイダー情報を取得し、それをローカル キャッシュに保存します。したがって、すべての登録センターがダウンしている場合でも、サービス プロバイダーとサービスはローカルキャッシュを介して通信することもできますが、一方が情報に変更を加えた場合、もう一方はそれを検出できませんが、サービスの進行には影響しません。

    その後、サービス消費プロセス全体が図のプロキシから開始され、プロキシ クラスによって処理され、透明性と認識性が実現されます。

    ProxyFactory

    Proxy プロキシ クラスを生成します。プロキシは、Invoker 実行可能オブジェクトを保持します。invoke を呼び出した後、Cluster を渡す必要があります。 Directory からすべての呼び出し可能なリモート サービス呼び出し元のリストを取得します。特定のルーティング ルールが設定されている場合は、呼び出し元リストを再度フィルターする必要があります。 残りの呼び出し元は、LoadBalance

    を通じてロード バランシングのために選択され、一部のデータ統計はフィルターを通じて実行する必要があります。その後、データが保存されて

    Monitor# に送信されます。定期的に。 ##。 次に、データ送信には Client を使用します。通常は

    Netty

    を使用して送信します。 送信には、Codec インターフェイスを介したプロトコル構築、次に

    Serialization

    を介したシリアル化が必要で、最後にシリアル化されたバイナリ ストリームが対応するサービス プロバイダー By に送信されます。 <p>バイナリ ストリームを受信した後、サービス プロバイダーもコーデック プロトコル処理を実行し、デシリアライズ (ここでの処理は送信前の処理と対称です) してから、リクエストを処理のためにスレッド プールに入れます。リクエストに従って対応する <code>Exporter を呼び出し、それを Filter でレイヤーごとにフィルターして Invoker を取得し、最後に対応する実装クラスを呼び出して元の方法で結果を返します。

    以上がJavaベースの分散サービスフレームワークDubboの原理と事例分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

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

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

    Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

    Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

    Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

    Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

    Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

    Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

    Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

    ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

    Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

    Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

    Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

    Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

    この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

    Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

    Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

    See all articles