概要----ダボの発動サービスの発見、クラスタリング、ロードバランシング、ルーティングシステム

呼び出し、コンポーネントを呼び出す負荷ネットワーク、基礎となるネットワーク通信と怠惰によれば、呼び出しは、サービスコールを担当して、天然及びルーティング(クラスタリングなど)と密接にダボサービスコール、サービス発見、クラスタリングでシステム全体を制御するために、このセクションの開始に関連する他の機能、 、バランス機構、知識の全体をルーティング、次のようにダボインボーカクラス全体図を仕上げコーミング読み込みます。

書き込み絵は、ここで説明しました
主なグループは、以下のインターフェースを有しています

  1. 呼び出し(コールコンテキスト)
  • 呼び出し:
    • 文字列getMethodNameに()メソッドが呼ばれる名前を取得します。
    • クラス<?> [] GetParameterTypes( )
      と呼ばれるメソッドのパラメータリスト(パラメータの型)を取得します
    • オブジェクト[] getArguments()メソッドと呼ばれる配列パラメータの値を取得します。
    • 地図<文字列、文字列>追加のプロパティのためのgetattachments()。
    • 文字列getAttachment(文字列のキー)追加のキーを取得する属性値。
    • 文字列getAttachment(文字列のキー、列はdefaultValue)が存在しない場合は、追加の属性を取得するための鍵は、デフォルト値。
    • 実行者<?> GetInvoker()は、現在の呼び出しを取得します。
  • コンテキストを呼び出しRpcInvocation rpc呼び出しサービス実装クラスの呼び出しは、現在のメソッド呼び出しのビーンストアのパラメータを使用することで、その本質は、普通の豆です。
  • MockInvocation模擬試験装置。
  • 関数呼び出しコンテキストを復号RPC DecodeableRpcInvocationバンドは、コンテキスト(メタデータメソッド呼び出し)を呼び出すRPCサービスを与えるためにバイナリストリーム(バイナリ)を解析することによってRPCコールからのサービス要求を達成するために主にあります。
  1. 呼び出し元のサービスコール、コールダボ抽象サービス。

com.alibaba.dubbo.common.Nodeインタフェースから継承された抽象インタフェース、Invoer

  • ノード:
    • URLのgetURL();フェッチURL、ダボ、レジストリ、サービスプロバイダ、サービスコンシューマ、以下のURLを使用してその監視センターインチ
    • ブールisAvailable():利用可能かどうかを判断します。
    • ボイドは破棄():リソースが破壊されました。
  • 実行者:
    • クラスGETINTERFACEは():サービス・プロバイダーのインターフェースを取得します。(呼び出しの呼び出し)を呼び出す結果RpcExceptionをスロー:コールサービス、呼び出し結果が返されます。
  • AbstractInvoker実行者のデフォルトの実装(テンプレートクラス)このメソッドは、主に、公共の結果のinvoke(呼び出しINV)RpcExceptionをスローを達成し、基本的なプロセス定義、実行呼び出し(テンプレート)を行い、実装サブクラス(異なるプロトコル)に応じてパーソナライズされた自分のを実行しますタスク。抽象メソッド:保護された抽象結果doInvoke(呼び出し呼び出しが)後の解析で具体たThrowableをスローします。
  • 契約の呼び出し側の実装ダボDubboInvoker。
  • 特定の実装のためのInjvmInvoker injvm契約コール(現地協定)
    • AbstractClusterInvokerクラスタモデルは、このクラスのテンプレートを呼び出すサービスを呼び出すための特定のメッセージ消費者側のサービスプロバイダを選択する方法を、トピックアドレス複数のサービスプロバイダを持っているサービスは、この時間をテンプレートクラスダボクラスタモデルを呼び出すことです。このクラスは、複数のサービスプロバイダ、サービスプロバイダを整理し、指定されたアルゴリズムに従ってコールを選択する必要があります。
  • <:サービスクラスタ=「利用可能」... /ダボ>または<ダボ:参照クラスタ=「利用可能」... />クラスター戦略:によってAvailableClusterInvokerは常に使用可能な最初のサービスプロバイダを選択してください。
  • <:サービスクラスタ=「放送」... /ダボ>または<ダボ:参照クラスタ=「放送」... />クラスター戦略:によってBroadcastClusterInvokerブロードキャストモードでは、任意の呼び出しが失敗し、すべてのサービスプロバイダに要求を送信しますそれが失敗したとみなされます。
  • または<ダボ:参照クラスタ=「フェイルバック」... />クラスター戦略:サービスの呼び出しが失敗した後、タイミング、リトライ、リトライ回数無線、重い、:<サービスクラスタ=「フェイルバック」... /ダボ>によってFailbackClusterInvokerテスト周波数:5秒。そして、サービスプロバイダを切り替えることはありません。
  • <:サービスクラスタ=「フェイルファースト」... /ダボ>または<ダボ:参照クラスタ=「フェイルファースト」... />クラスター戦略:サービスコール、フェイルファースト、直接投げる例外の後、再試行しませによってFailfastClusterInvoker 、追加、変更級動作の再試行パラメータの制約を受けません。
  • <:サービスクラスタ=「フェイルオーバー」... /ダボ>または<ダボ:参照クラスタ=「フェイルオーバー」... />クラスター戦略:によってFailoverClusterInvokerサービスコールの後、障害が発生した場合、再試行他のサービスプロバイダ、デフォルトの再試行を2回、再試行、ダボクラスタデフォルトで設定再試行の3倍の数の合計を行いました。
  • または:<サービスクラスタ=「フェイルセーフ」... /ダボ>によってFailsafeClusterInvoker <ダボ:参照クラスタ=「フェイルセーフ」... />クラスター戦略:サービスコールの後、唯一のエラーログを印刷した後、直接返します。
  • ForkingClusterInvoker
    <:サービスクラスタ=「フォークダボによる 」... /> または<ダボ:参照クラスタ=「フォーク 」... /> クラスター戦略:複数のサービスプロバイダへの同時呼び出しは、最初の結果を取る返さ。同時呼び出しの設定サービスデスクフォークを通じて提供することができます人々の数。

その他のクラスター戦略は、/dubbo-cluster/src/main/resources/META-/com.alibaba.dubbo.rpc.cluster.Clusterファイルを参照することができます。

書き込み絵は、ここで説明しました

  1. ロードバランスクラスタリングアルゴリズムロードサービスは、複数のサービスプロバイダを持っている場合、サービスコール時にサービスプロバイダの消費者の側を選択するようにバランシングアルゴリズムをロードします。ロードバランスのために定義されたインタフェース:<T>の発動(一覧は<実行者は>呼び出し側は、URLのURLは、呼び出しの呼び出しは)RpcExceptionスロー選択します。
  • 複数のサービスプロバイダからの一貫性ハッシュアルゴリズム、AbstractClusterInvoker:または<ダボ:プロバイダのロードバランス=「consistenthash」... />ロードバランシングアルゴリズム:<サービスロードバランス=「consistenthash」... /ダボ>によってConsistentHashLoadBalanceサービスプロバイダを選択するときに呼び出されます。
  • または<ダボ:プロバイダのロードバランス= "leastactive" ... />ロードバランシングアルゴリズム:最小アクティブコール:<サービスロードバランス= "leastactive" ... /ダボ>によってLeastActiveLoadBalance。
  • RandomLoadBalance <ダボ:サービスのロードバランス=「ランダム」... />または<ダボ:サービスのロードバランス=「ランダム」... />アルゴリズムロードバランシング:ランダム、量(重量、高いチャンス)の場合
  • または<ダボ:プロバイダのロードバランス= "ラウンドロビン" ... />:WRRアルゴリズムアルゴリズムをロードバランシング:<サービスロードバランス= "ラウンドロビン" ... /ダボ>によってRoundRobinLoadBalance。
  • インタフェース主な役割は、複数のサービスプロバイダを管理するためのディレクトリサービスのサービスプロバイダにあることをディレクトリ(ディレクトリサービス、実行者のディレクトリサービス)。
  • ディレクトリ
    • クラス<T> GETINTERFACE()は、サービス・インターフェースのカテゴリを取得します。
    • 一覧<実行者<T >>一覧(呼び出し呼び出し)RpcExceptionが呼び出しに応じたサービスのすべてのサービスプロバイダの現在のコンテキストを取得スローされます。

4.2 AbstractDirectory抽象列のディレクトリ・サービスの実装(テンプレートクラス)

4.3 StaticDirectory静的ディレクトリサービス

StaticDirectoryを作成する際に、いわゆる静的なディレクトリサービスは、サービスプロバイダのセットを指定することで、彼らのライフサイクルでのディレクトリサービスインスタンスは、これらのサービスプロバイダにのみ返されます。

  • デフォルトのメッセージコンシューマは、レジストリから特定のサービスプロバイダのURLを指定していないRegistryDirectory Active Directoryサービス(レジストリベース)、提供発見サービスへの動的アクセスは、それがレジストリにサービスプロバイダのサービスに加入します(レジストリプロバイダモニターディレクトリ)、RegistryDirectoryが自動的にレジストリ・サーバのリストを取得します。
  • ルータは、URLのニュース消費者による機能、またはルーティング表現JSエンジンの組み合わせをルーティング、実行者は、ディレクトリからのルーティング規則に従わ選択し、実行するには、負荷分散アルゴリズム。
  • ルータ
    • URLのgetURL()は、メッセージコンシューマのURLを取得します。
    • 2、<T>一覧<実行者<T >>ルート(一覧<実行者<T >>インボーカ、URLのURL、呼び出し呼び出しは)ニュース消費者URL、中に呼び出し側から最適呼び出し元の選択に応じてRpcExceptionをスローします。
  • 条件式ベースの実装をルーティングConditionRouter。
  • ScriptRouterは、JSエンジンをルーティング達成します。

呼び出しは、単一の、例えばDubboInvoker、InJVMInvoker基礎となるネットワーク通話チャネルの送信要求コマンドを実装する基礎となるネットワークの詳細に捧げられる(片道、同期、非同期呼び出し)は、後続の章、次の章、メインソースからネットワークに焦点を当てクラスタリング、ロードバランシング、動的ルーティング、ディレクトリサービス(RegistryDirectory)実装の詳細の角度分析。


著者:丁偉、「RocketMQ技術インサイダー」の著者、RocketMQコミュニティ説教、公共数:ミドルウェア関心サークル擁護、Javaソースコード解析のセット、Javaと契約(JUC)が公開されている、ネッティー、Mycat、ダボ、 RocketMQ、MyBatisのと他のソース列。参加することができますリンクをクリックして、惑星のミドルウェア知識を高並行性、分散型サービスアーキテクチャ、AC電源を探索します、。

ここに画像を挿入説明

おすすめ

転載: juejin.im/post/5e04ba53518825123b1aa61b
おすすめ