RPCフレームワーク--Dubbo

ダボはじめに

ダボは、分散RPC呼び出しを実装するために使用するフレームワークです。

ダボは、RPCのリモートサービスコールプログラム、サービスおよびSOAガバナンスプログラムの高い性能と透明性を提供し、分散型サービス・フレームワークです。
プロトコルダボ、ヘッションプロトコル、トランスポートプロトコル下ダボプロトコルを含むダボのサポート複数のプロトコルは、TCPです。

これは抽象サービスプロバイダ(プロバイダ)と消費者サービス(消費者)は、2つの役割に基づいて行うことができるので、ダボは、非常に単純なモデル、のいずれかのサービスの提供、いずれかの消費者の消費者サービスを使用しています。同様などのレジストリ、プロトコルサポート、サービス監視、など、詳細については下記を参照してください。

ダボの枠組み

ダボのフレームデザインは、10層の合計を分割、トップ層はサービスに任され、実際のビジネス・ロジック・インターフェース層を実装する分散型サービスの開発者ダボの開発を使用します。サービス・インターフェースを使用する消費者のための図は、右側のライトグリーン、サービスプロバイダーは、両方のインターフェイスに使用中心軸に位置する背景を使用するためのライトブルーの背景インターフェイスを残しました。
ここに画像を挿入説明
全体のフレームワークは、10層に分かれています。

  1. 界面層サービス(サービス)は、この層は、サービスプロバイダとサービス・コンシューマ・インタフェースの設計および対応するサービスの実装によれば、実際のビジネス・ロジックに関連しています。
  2. 層構成(コンフィグ):ServiceConfig ReferenceConfig中心への外部構成インターフェースと直接新しいコンフィギュレーション・クラスとすることができ、構成がスプリングを解析してクラスを生成するように構成することができます。
  3. サービスプロキシ層(プロキシ):透過プロキシサービスインターフェース、ProxyFactoryインタフェース中心ServiceProxy拡張で、サービス顧客端末とサーバスケルトンスタブを生成します。
  4. サービス登録層(レジストリ):登録と発見のパッケージサービスのアドレスは、中央のURLとして機能するように、拡張されたインタフェースはRegistryFactory、レジストリとこのRegistryServiceです。これは、登録されたサービスセンター、サービスプロバイダーに直接公開されたサービスではないかもしれません。
  5. クラスタ層(クラスタ):ルーティングプロバイダとロードバランシング複数のカプセル化、およびクラスタ、ディレクトリ、ルータおよびロードバランスインタフェース中心インボーカ拡大に登録センターブリッジ。サービス・プロバイダーとして、複数のサービスプロバイダの組み合わせは、サービス消費者の透明性を達成するために、プロバイダはサービスのみと対話する必要があります。
  6. 中心として統計に監視呼と通話時間のRPC番号、MonitorFactory、モニタ及びMonitorService界面膨張:層(モニタ)を監視します。
  7. リモートコール・レベル(プロトコル):センターの呼び出しと結果へのRPCコールサイン、プロトコル、実行者および輸出業者インタフェースの拡張。プロトコルは、メインの入り口である、サービスドメインで実行者のライフサイクル管理を担当している、実行者の暴露とリファレンスを内蔵しています。インボーカは、それは、それが他のモデルがそれに依存するスクランブルされ、ダボのコアモデルである、またはそれを変換し、それは実行可能体を表し、それを開始するコールを呼び出すことができ、それはローカルの実装が可能であるエンティティドメインできるありますリモート実装がクラスタを達成することも可能です。
  8. 情報交換層(交換):カプセル化要求応答モード、交換、ExchangeChannel、ExchangeClientとEXCHANGESERVERインターフェース拡張中心要求と応答に同期非同期転送、、。
  9. ネットワークトランスポート層(トランスポート):抽象ミナと網状チャネル、トランスポーター、クライアント、サーバ、およびコーデックのメッセージ中心の、拡張インターフェイスの統一されたインタフェース。
  10. データシーケンス層(シリアライズ):いくつかのツールが多重化されてもよい、シリアライズするObjectInput、たObjectOutputとThreadPoolのインタフェース拡張。

契約の詳細:
https://blog.csdn.net/yuer2008200820008/article/details/80208025

ダボの機能

1.透明リモートメソッド呼び出し、任意の侵入APIなしで、ローカルメソッド呼び出しリモートメソッドだけの簡単な設定を呼び出すのと同じ。
ネットワークを含む2.ソフトの負荷分散とフォールトトレランスのメカニズムは、F5ハードウェアロードバランサを置き換え、低コスト、単一ポイントを減らすことができます。
3.オートサービスの登録と発見、死んサービスプロバイダアドレス、IPアドレス、レジストリベースのクエリインタフェース名サービスプロバイダを記述することはもはや必要性、およびサービス・プロバイダーを追加または削除スムーズにすることができます。

ダボ全て-ばね装置、透過的なアクセス・アプリケーション、アプリケーションなし侵入APIは、構成が単純に春ダボ、ダボスプリング式の拡張スキーマをロードすることができます。

ダボ操作

唯一のサービス・プロバイダーとサービス・コンシューマーを懸念ダボアプリケーション。
ここに画像を挿入説明

次のようにサービスコールプロセスは、次のとおりです。

  1. サービスプロバイダ(プロバイダ)サービスのレジストリを公開するサービス。
  2. サービスレジストリ(レジストリ)サブスクリプションサービスからサービス消費者(コンシューマー)。
  3. サービスの消費者は、利用可能なサービスが登録されている呼び出します。
  4. 呼び出し手順を記録する監視センター(モニター)。

ロールの説明時:

  1. プロバイダ:サービスプロバイダ暴露。
  2. 消費者は:サービスの消費者は、リモートサービスを呼び出します。
  3. レジストリ:登録とレジストリサービスは、登録センター、リモート・ストレージ・サービス・プロバイダの登録情報として飼育係を選択することができ、見つかりました。サインアップし、消費者にプッシュセンターやプロバイダとリリースのサービスプロバイダの変更を取得することができ、発信者、およびサービスの最新リストとの長い接続のまま
  4. モニター:通話時間の統計的なサービスは、監視センターの通話時間を調整します。
  5. コンテナ:実行コンテナサービス。

具体的なプロセスは以下のとおりです。

  1. サービスコンテナ、ロード、実行するサービスプロバイダを開始するための責任。
  2. あなたが開始するサービスプロバイダ、彼らはレジストリに提供する登録サービス。
  3. 起動時に消費者のサービスは、あなたがサービスレジストリに登録する必要があります。
  4. レジストリリターンアドレスリストサービスプロバイダの消費者に変更がある場合、レジストリは、消費者へのデータ接続を変更するには長押しに基づいて行われます。
  5. サービスの消費者は、アドレスのリスト、ソフトの負荷分散アルゴリズムのプロバイダは、呼び出しが失敗した場合、その後、別のコールを選択し、プロバイダのコールを選択してください。
  6. サービスコンシューマとプロバイダは、通話や通話時間の累積数のメモリに、時間が監視センターにあたり分の統計データいったん送りました。

なぜ我々はそれの中心を監視する必要がありますか?

  1. あなたは発見することができたときに、エラー。
  2. サービスは、(このような大きなプロモーションなど)十分でないときは、通話や他のサービスの数を確認することができ、サービスをサポートするために必要なマシンの数を推定?ときにマシンプラス?

オリジナルリンクします。https://blog.csdn.net/baoyu_G/article/details/82314435

ダボレジストリ

クラスタ全体では、各(もちろんそこのRedis、マルチキャスト、シンプルDOレジストリ)は、一般的に飼育係のレジストリに、ダボを使用して、飼育係、飼育係は、単一のサーバーを分離していないクラスタを管理するために使用されますが、ときに一緒にマシンの他のサーバーにサーバーを調整するリーダーを持って飼育係を形成します。

下に示すように、サービスプロバイダは、呼び出し側は、飼育係の管理クラスタ内にあります:
ここに画像を挿入説明

次のようにプロセスは以下のとおりです。

  1. サービスプロバイダの起動:URLアドレス/dubbo/com.foo.BarService/providersの下で、独自のディレクトリを作成するために
  2. /dubbo/com.foo.BarService/providers URLアドレスでサブスクリプションプロバイダーディレクトリ:消費者がサービスを開始すると。そして/dubbo/com.foo.BarService/consumersの下で、独自のURLアドレスのディレクトリを作成します
  3. 起動時にモニタリングセンター:/dubbo/com.foo.BarServiceディレクトリの下のすべてのプロバイダと消費者URLアドレスに加入。

注:登録およびサブスクリプションは、URLアドレス情報です。

飼育係(レジストリ)、次のようになります。

  1. 停電やその他の異常シャットダウンのプロバイダは、レジストリが自動的に情報提供を削除することができた場合
  2. 再起動するには、レジストリは、自動的に登録データだけでなく、サブスクリプション要求を復元することができた場合
  3. セッションの有効期限が切れると、自動的に登録データだけでなく、サブスクリプション要求を復元することができます

飼育係のサブスクリプション

サブスクリプションをプルするイベント通知方法を使用してZK +クライアント。

  1. クライアントは、レジストリにリンクされている最初の時間は、対応するディレクトリ内のすべてのデータを取得します。そして、サブスクリプション・ノード上のクライアントがTCPレジストリとの長いリンクを維持する、ウォッチャを登録。
  2. フォローアップのデータは、各ノードが変更された場合は、レジストリは、クライアント応じウォッチャーコールバックを通知するためのイニシアチブをとるだろう、これは、イベント通知です。
  3. クライアントが通知を受信した場合、合計量が自動的にクライアントプルであり、対応するノードのデータを引っ張ってきます。

ZK各ノードは、データがノードを変更するとき、ノード対応バージョン番号が変更され、この時間は、対応するクライアントに通知ウォッチャートリガする、バージョン番号を有しています。

飼育係キャッシュ

基本的には各シーンには、役割のキャッシュは時間のためのスペースを使用することです。毎回リモート呼び出しが再び全額レジストリからプルされる場合は、サービスのリストを想像してみて、その後、登録センターは多くのトラフィックのでメインを強化します。

だから、レジストリが登録情報を取得するために、消費者や治療センターをローカルにキャッシュされるメカニズムを、キャッシュされますダボ。これは、レジストリは、当事者でも呼び出すことができますハング理由です

なぜ、飼育係を選ぶのか?

ZooKeeperのデータモデルは、メモリに格納されたデータの完全な量をZK、従来のディスク・ファイル・システムが異なるとデータノードの系列が存在するが、のznode組成物と呼ばれ、非常に簡単であり、高性能のように記述することができ、およびクラスタリングのサポート、高可用性を記述することができ、さらに、イベントリスナーをサポートします。これらの特性は、登録センター(データはパブリッシュ/サブスクライブ)として特に好適ZK決定します。

転送します。https://www.cnblogs.com/qtlq/p/11296578.html

ダボサービス露光プロセス

おそらくプロセス:

  1. ローカルサービスへの暴露
  2. リモートサービスへの暴露
  3. スタートネッティー
  4. 接続の飼育係
  5. 飼育係に登録
  6. リスニングの飼育係

ローカルとリモートの暴露暴露、それらの間の違いは何ですか?

ダボの我々は両方のサービスプロバイダであってもよいし、それは消費者、自分の電話サービスのため、存在があります。我々はネットワークにアクセスするために行く場合、それは遠く離れて当然で、それがこの問題を解決するために、ローカル設計サービスにさらされています。

ローカル露出:露出がJVM、無ネットワーク通信です。
リモート暴露:あなたが呼び出すときに露出がリモートクライアントへの情報、IP、ポート、などで、ネットワーク通信が必要です。

露光プロセス:

  1. 私は遅延の露出があるかどうかを判断するために輸出()メソッドを呼ぶようになりました。
  2. その後、露出、doExportメソッドを呼び出して起動しません。
  3. doExport方法は、検査方法のシリーズを実行し、doExportUrlsメソッドを呼び出します。
  4. コールproxyFactory.getInvoker()メソッドは、実行を取得し、サービスが実行者は、実行者は、サービス実装クラスをカプセル化したパッケージとして実装されます。
  5. 実行者、輸出にパッケージ化、およびキャッシュされ、キャッシュURL呼び出し元は、キーとして使用します。これは、使用プロトコル(プロトコル)にダボの必要性の途中で契約がダボであれば、使用する必要があり、DubboProtocolあり、それはダボでソケットリスニングサービスを開き、様々な要求がクライアントから送信された受信、通信の詳細ます自分自身を実現。その露光工程は、ネッティーを開始します。
  6. スタートネッティーは、サーバーのサーバーは、リスニングポートを開始します。
  7. リクエストが来たときに、要求に応じて、情報がキャッシュ検索輸出業者に、鍵を生成し、我々は実行者を見つけ、あなたが呼び出しを完了することができます。

ここに画像を挿入説明

リンク:HTTPS://www.jianshu.com/p/292fcdcfe41e
https://www.jianshu.com/p/dcfe426e9cd7

ネッティーは何ですか

ネッティーは、それがNIOで、ネットワーク通信の役割です。

ネッティーは、高性能、非同期イベント駆動型のNIOフレームワークである、API JAVA NIOベースの実装を提供します。これは、TCP、UDP、およびファイル転送のためのサポートを提供します。NIO非同期フレームとして、すべての入出力操作が非ブロックメカニズムを介して網状、将来のリスナーを、ユーザが容易に取得することができる非同期又はアクティブ動作結果がIO通知機構を得られます。
原子炉パターン設計効率的なスレッドモデル(JavaのNIOによって提供される)網状結合セレクタ。

スタートネッティーは、サーバ自体もサーバークライアントで、他のネットワーク・サーバと通信することと等価です。サーバとして、サーバは、クライアントの接続要求を受け取ることができる、とNIO IOでのやり方は、接続を要求します。

詳細については、以下を参照してくださいます。https://www.cnblogs.com/technologykai/articles/10910878.html

ダボのサービス紹介のプロセス

最初は、サブスクリプションサービスのプロセスです。

  1. (世代サービスインスタンスを呼び出す必要がある)ReferenceBeanを生成する準備ができて、サブスクリプション、時設定に応じて。
  2. サービス・エージェントを作成し、ReferenceConfig.createProxy()メソッドを呼び出します。
  3. createProxy()メソッドの呼び出しがRegistryProtocolの()メソッドを参照します
  4. 参照してください()メソッドは、RegistryDirectoryを使用する必要があります。RegistryDirectory.subscribeUrlによってRegistryDirectoryは()サービスノード情報を購読するため、自動サービス検出を実現し、飼育係の変更を監視します。
  5. あなたが成功したサービス・エージェントを作成した後、呼び出し元のリストを生成します

次に紹介プロセス・サービス:

  1. 取得し、メモリキャッシュサービス参照からの呼び出しのリストを返します。
  2. サブセット呼び出しの呼び出しによって選択されたルータブラシは、リストからルールをルーティングに従います。
  3. 究極の目標の呼び出しを選択することでロードバランスは、サービスコールを開始します。
  4. 呼び出しはロードバランス、ソフトな負荷アルゴリズムを介して各再試行は、適切なサービスを見つけるためにするとき、失敗した場合、実行者のコールを選択します。
  5. コールは、実行方法を成功します。

ダボの負荷分散戦略

ダボのロードバランシング4つの戦略があります。

  1. ランダムロードバランス(デフォルト):ランダム方針。確率は、均一に応じた重みを設定して、動的負荷分散の重みに応じて、重量プロバイダの重みを調整することができ、より大きな重みより高い流速分布は、一般に、その上にこのデフォルトを使用します。
  2. ラウンドロビンロードバランス:ポーリングポリシー。デフォルトでは、一様に再設定ポーリングレート後の規則の右によると、機械まで、それぞれの流れを打っています。各マシンのパフォーマンスが異なる場合でも、簡単にマシンの負荷のパフォーマンスの低下につながるが、サービスプロバイダ積ま要求の比較的遅い実装があり、高すぎます。マシンはより小さく、よりトラフィック数のパフォーマンスの低下を重い重量を運ぶように重みを調整するので、この場合は必要。
  3. LeastActive LOADBALANCE:アクティブコールの最小数。これは、より悪いパフォーマンスマシンならば、遅く応答して、活性の低い、この時点では不活性で機械少ない要求の貧弱なパフォーマンスが得られます、自動認識です。アクティブな各プロバイダの数は、ランダムに選択同じである場合。アクティブカウンタは、各サービスプロバイダ守備は、もしそうであれば、この値は最小活性マシンの選択にルーティングするように、迅速に処理された現在のサービス・プロバイダの速度も小さいです。
  4. ConsistentHashロードバランス:整合性ハッシュ戦略。サービスプロバイダは、ハッシュリングをIP提供され、リクエストの同じパラメータが常に等しく株において同じプロバイダ、ステーションは仮想ノードに基づいてプロバイダに送信元の要求にリンクプロバイダに送信されることを保証することができプロバイダは、劇的な変化を引き起こすことはありません。
  • 政策の一貫性の原則を分散ハッシュロード?

ダボフォールトトレラント戦略

サービスの消費者は、いくつかのフォールトトレランスポリシーがあるダボ、サービスプロバイダが失敗したときに呼び出されます:

  1. フェイルオーバークラスタの障害の再試行:失敗自動切換え、自動再試行他のマシンは、デフォルトでは、これは読み出し動作では一般的であるということです。
  2. フェイルファーストクラスタフェイルファースト:一度だけ呼び出された直後にエラーで失敗したコール、書き込み動作において共通します。
  3. フェイルセーフクラスタはフェイルセーフ:例外が発生したときに無視します。一般に、ロギングなどの重要でないインターフェース呼び出しで使用されます。
  4. フェイルバッククラスタの障害自動回復:自動記録要求失敗した背景、そしてこの書き込みメッセージキュー(メッセージ通知)のためのより適切な再送信ポリシーの特定の遅いタイミングに従ってインチ
  5. クラスタフォーク並列に呼び出されたパラレル呼び出し、複数のプロバイダー限り、すぐに成功したリターンを:。
  6. broadcacstクラスタ放送コール:1つの、すべてのプロバイダによってコール1。

ダボは、RPCの例を実装します

その他の例については、元を参照してください。
します。https://blog.csdn.net/houshaolin/article/details/76408399より転載

  • 模擬試験にサービスコール異常の様々なシミュレートすることができ、また、サービスの低下を実現するために使用されます。
公開された67元の記事 ウォン称賛32 ビュー60000 +

おすすめ

転載: blog.csdn.net/weixin_43751710/article/details/104664150