大きな工場に入りたいですか?ダボ普通9はあなたが知っているように尋ねます

著者|テクノロジーミャオミャオ

出典|テクノロジーミャオミャオ(ID:kajimiumiu)

ヘッド画像|オリエンタルICからのCSDNダウンロード

Dubbo自体は複雑ではなく、公式文書は非常に明確で詳細です。インタビューでのDubboの問題は一般に多くありません。階層化から動作原理まで、負荷分散戦略、障害耐性メカニズム、SPIメカニズムは基本的に同じです。最大のもの問題は一般的にRPCフレームワークをどのように設計するかですが、レイヤーでの動作原理を理解していれば、この質問は実際には答えと同等ですよね?

ダボのレイヤリングについて話しますか? 

大規模なダボは3つの層に分かれています。ビジネスロジック層は、インターフェイス、実装、およびいくつかの構成情報を提供する独自の層です。RPC層は、実際のRPC呼び出しのコア層であり、RPC呼び出しプロセス全体と負荷をカプセル化します。バランス、クラスター障害耐性、プロキシ、およびリモート処理は、ネットワーク伝送プロトコルとデータ変換のカプセル化です。

より詳細なレベルに分けて、図の10層モデルです。層全体は上から下に依存します。ビジネスビジネスロジックを除いて、他の層はすべてSPIメカニズムです。

Dubboの仕組みを教えてください。 

  • サービスが開始されると、プロバイダーとコンシューマーは構成情報に従ってレジストリレジスタに接続し、それぞれレジストリを登録およびサブスクライブします。

  • Registerは、サービスサブスクリプション関係に従ってプロバイダー情報をコンシューマーに返し、コンシューマーはプロバイダー情報をローカルにキャッシュします。情報が変更された場合、消費者はレジスターからプッシュを受け取ります

  • コンシューマーはプロキシオブジェクトを生成し、負荷分散戦略に従ってプロバイダーを選択し、インターフェイス呼び出しの数と時間情報をモニターに定期的に記録します。

  • プロキシオブジェクトを取得した後、コンシューマーはプロキシオブジェクトを介してインターフェイス呼び出しを開始します

  • プロバイダーはリクエストを受信した後、データを逆シリアル化し、プロキシを使用して特定のインターフェイスを呼び出して実現します

なぜプロキシ経由で通信するのですか? 

主な目的は、インターフェイスの透過プロキシを実装し、呼び出しの詳細をカプセル化して、ユーザーがローカルメソッドなどのリモートメソッドを呼び出すことができるようにすることと、プロキシを介して次のような他の戦略を実装することです。

1.と呼ばれる負荷分散戦略

2.呼び出しの失敗、タイムアウト、劣化、および障害許容メカニズム

3.キャッシュやモックデータの追加など、いくつかのフィルタリング操作を実行します

4.インターフェース呼び出しデータ統計

サービスエクスポージャーのプロセスについて話しますか? 

  1. コンテナが開始されると、ServiceConfigを介してタグが解析され、dubboタグを解析するためにdubboタグリゾルバが作成されます。コンテナが作成されると、ContextRefreshEventイベントコールバックがトリガーされ、サービスの公開が開始されます。

  2. 呼び出し元は、実行されるメソッドのオブジェクト情報と特定のURLアドレスを含むProxyFactoryを介して取得されます。

  3. 次に、DubboProtocolの実装により、パッケージ化された呼び出し元がエクスポーターに変換され、サーバーサーバーが起動してポートを監視します。

  4. 最後に、RegistryProtocolは、URLアドレスと呼び出し元の間のマッピング関係を保存し、同時にサービスセンターに登録します

サービス参照プロセスについて話しますか? 


サービスが公開された後、クライアントはサービスを参照してから、呼び出しプロセスを参照する必要があります。

  1. まず、クライアントは構成ファイル情報に従ってレジストリからサービスにサブスクライブします

  2. その後、DubboProtocolは、サブスクリプションから取得したプロバイダーアドレスとインターフェイス情報に従ってサーバーサーバーに接続し、クライアントクライアントを開いて、呼び出し元を作成します。

  3. 呼び出し元が作成されると、呼び出し側を介してサービスインターフェイスのプロキシオブジェクトが生成されます。このプロキシオブジェクトは、プロバイダーをリモートで呼び出すために使用され、サービス参照が完了します。

負荷分散戦略とは何ですか? 

  1. ランダムに重み付け:サーバーのセット= [A、B、C]があり、対応する重みは重み= [5、3、2]であり、合計の重みは10であるとします。これらの重み値を1次元の座標値に並べて、[0、5)間隔はサーバーAに属し、[5、8)間隔はサーバーBに属し、[8、10)間隔はサーバーCに属します。次に、ランダム数ジェネレーターを使用して[0、10)の範囲のランダム数を生成し、このランダム数がどの間隔に収まるかを計算します。

  2. 最小アクティブ数:各サービスプロバイダーはアクティブなアクティブ番号に対応します。最初は、すべてのサービスプロバイダーのアクティブ数は0です。リクエストを受信するたびに、アクティブの数が1ずつ増え、リクエストが完了すると、アクティブの数が1ずつ減ります。サービスが一定期間実行された後、パフォーマンスの高いサービスプロバイダーは要求をより速く処理できるため、アクティブな数がより速く減少します。この時点で、そのようなサービスプロバイダーは最初に新しいサービス要求を取得できます。

  3. 一貫性のあるハッシュ:ハッシュアルゴリズムを使用して、プロバイダーの呼び出しノードとランダムノードからハッシュを生成し、このハッシュを[0、2 ^ 32-1]の円に投影します。クエリを実行するときは、md5を実行してから、キーに従ってハッシュして取得します。最初のノードの値は、現在のハッシュの呼び出し元以上です。

ダボオフィシャルからの写真
  1. 加重ラウンドロビン:たとえば、サーバーA、B、およびCの加重比が5:2:1の場合、8つの要求のうち、サーバーAは5つを受け取り、サーバーBは2つを受け取ります。 Cはこれらの要求の1つを受け取ります。

クラスターの耐障害性の方法は何ですか? 

  1. フェイルオーバークラスター障害の自動切り替え:Dubboのデフォルトのフォールトトレラントスキームは、呼び出しが失敗すると、他の使用可能なノードに自動的に切り替わります。サービスが参照されるときに、特定の再試行回数と間隔を構成できます。デフォルトの再試行回数は1で、呼び出しのみを意味します。一度。

  2. フェイルバッククラスターはすぐに失敗します。通話が失敗すると、ログと通話情報が記録され、空の結果がコンシューマーに返され、失敗した通話は5秒ごとに時間指定タスクによって再試行されます。

  3. フェイルファストクラスター障害の自動回復:一度だけ呼び出され、障害の直後に例外がスローされます

  4. フェイルセーフクラスター障害の安全性:呼び出しで例外が発生し、ログはスローされず、空の結果が返されます

  5. Forking Clusterは、複数のサービスプロバイダーを並行して呼び出します。スレッドプールを介して複数のスレッドが作成され、複数のプロバイダーが同時に呼び出され、結果がブロッキングキューに保存されます。1つのプロバイダーが結果を正常に返す限り、結果はすぐに返されます。

  6. ブロードキャストクラスターブロードキャストモード:各プロバイダーを1つずつ呼び出します。プロバイダーのいずれかがエラーを報告した場合、ループ呼び出しの終了後に例外がスローされます。

Dubbo SPIメカニズムを理解していますか? 

SPIのフルネームは、サービス検出メカニズムであるサービスプロバイダーインターフェイスです。基本は、インターフェイス実装クラスの完全修飾名をファイルに構成することです。サービスローダーは、構成ファイルを読み取り、実装クラスをロードして、実行時に動的に実行できるようにします。インターフェイスの実装クラスを置き換えます。

DubboはSPIメカニズムを介して多くの拡張機能も実装し、dubboはJavaネイティブSPIメカニズムを使用しませんが、調整が強化および改善されています。

SPIには、プロトコル拡張、クラスター拡張、ルーティング拡張、シリアル化拡張など、dubboに多くのアプリケーションがあります。

使用法は、META-INF / dubboディレクトリで構成できます。

key=com.xxx.value

次に、DubboのExtensionLoaderを使用して、指定されたキーに従って対応する実装クラスをロードします。これの利点は、オンデマンドでロードでき、パフォーマンスが最適化されることです。

RPCフレームワークを実装する場合の設計方法は? 

  1. まず、消費者とプロバイダーがサービスを登録およびサブスクライブできるように、サービス登録センターが必要です。

  2. 消費者がクライアントを呼び出す方法を決定するには、負荷分散メカニズムが必要です。これには、もちろん、障害耐性と再試行メカニズムも含まれます。

  3. httpやrmiプロトコルを介した通信など、通信プロトコルとツールフレームワークが必要です。次に、プロトコルに従って通信に使用するフレームワークとツールを選択します。もちろん、データ送信のシリアル化を検討する必要があります。

  4. 基本的な要素に加えて、いくつかの監視、構成管理ページ、およびログは、追加の最適化の考慮事項です。

したがって、本質的に、1つまたは2つのRPCフレームワークに精通している限り、RPCフレームワークを自分で実装する方法を理解するのは簡単です。


更多精彩推荐
☞感动!盲人计算机科学家研发语音浏览器,致力科技改善盲人生活
☞1024 程序员节重要议程曝光,开源技术英雄会聊开源“真心话”
☞蓝色版苹果iPhone 12开箱上手视频流出;谷歌回应司法部反垄断诉讼:存在严重漏洞;Git 2.29 稳定版发布|极客头条
☞我是一个平平无奇的AI神经元
☞对话阿里云:开源与自研如何共处?
☞10 月中旬的 Medalla 测试网失常:如何开始,将如何结束?
点分享点点赞点在看

おすすめ

転載: blog.csdn.net/csdnsevenn/article/details/109212859