著者|テクノロジーミャオミャオ
出典|テクノロジーミャオミャオ(ID:kajimiumiu)
ヘッド画像|オリエンタルICからのCSDNダウンロード
Dubbo自体は複雑ではなく、公式文書は非常に明確で詳細です。インタビューでのDubboの問題は一般に多くありません。階層化から動作原理まで、負荷分散戦略、障害耐性メカニズム、SPIメカニズムは基本的に同じです。最大のもの問題は一般的にRPCフレームワークをどのように設計するかですが、レイヤーでの動作原理を理解していれば、この質問は実際には答えと同等ですよね?
ダボのレイヤリングについて話しますか?
大規模なダボは3つの層に分かれています。ビジネスロジック層は、インターフェイス、実装、およびいくつかの構成情報を提供する独自の層です。RPC層は、実際のRPC呼び出しのコア層であり、RPC呼び出しプロセス全体と負荷をカプセル化します。バランス、クラスター障害耐性、プロキシ、およびリモート処理は、ネットワーク伝送プロトコルとデータ変換のカプセル化です。
より詳細なレベルに分けて、図の10層モデルです。層全体は上から下に依存します。ビジネスビジネスロジックを除いて、他の層はすべてSPIメカニズムです。
Dubboの仕組みを教えてください。
サービスが開始されると、プロバイダーとコンシューマーは構成情報に従ってレジストリレジスタに接続し、それぞれレジストリを登録およびサブスクライブします。
Registerは、サービスサブスクリプション関係に従ってプロバイダー情報をコンシューマーに返し、コンシューマーはプロバイダー情報をローカルにキャッシュします。情報が変更された場合、消費者はレジスターからプッシュを受け取ります
コンシューマーはプロキシオブジェクトを生成し、負荷分散戦略に従ってプロバイダーを選択し、インターフェイス呼び出しの数と時間情報をモニターに定期的に記録します。
プロキシオブジェクトを取得した後、コンシューマーはプロキシオブジェクトを介してインターフェイス呼び出しを開始します
プロバイダーはリクエストを受信した後、データを逆シリアル化し、プロキシを使用して特定のインターフェイスを呼び出して実現します
なぜプロキシ経由で通信するのですか?
主な目的は、インターフェイスの透過プロキシを実装し、呼び出しの詳細をカプセル化して、ユーザーがローカルメソッドなどのリモートメソッドを呼び出すことができるようにすることと、プロキシを介して次のような他の戦略を実装することです。
1.と呼ばれる負荷分散戦略
2.呼び出しの失敗、タイムアウト、劣化、および障害許容メカニズム
3.キャッシュやモックデータの追加など、いくつかのフィルタリング操作を実行します
4.インターフェース呼び出しデータ統計
サービスエクスポージャーのプロセスについて話しますか?
コンテナが開始されると、ServiceConfigを介してタグが解析され、dubboタグを解析するためにdubboタグリゾルバが作成されます。コンテナが作成されると、ContextRefreshEventイベントコールバックがトリガーされ、サービスの公開が開始されます。
呼び出し元は、実行されるメソッドのオブジェクト情報と特定のURLアドレスを含むProxyFactoryを介して取得されます。
次に、DubboProtocolの実装により、パッケージ化された呼び出し元がエクスポーターに変換され、サーバーサーバーが起動してポートを監視します。
最後に、RegistryProtocolは、URLアドレスと呼び出し元の間のマッピング関係を保存し、同時にサービスセンターに登録します
サービス参照プロセスについて話しますか?
サービスが公開された後、クライアントはサービスを参照してから、呼び出しプロセスを参照する必要があります。
まず、クライアントは構成ファイル情報に従ってレジストリからサービスにサブスクライブします
その後、DubboProtocolは、サブスクリプションから取得したプロバイダーアドレスとインターフェイス情報に従ってサーバーサーバーに接続し、クライアントクライアントを開いて、呼び出し元を作成します。
呼び出し元が作成されると、呼び出し側を介してサービスインターフェイスのプロキシオブジェクトが生成されます。このプロキシオブジェクトは、プロバイダーをリモートで呼び出すために使用され、サービス参照が完了します。
負荷分散戦略とは何ですか?
ランダムに重み付け:サーバーのセット= [A、B、C]があり、対応する重みは重み= [5、3、2]であり、合計の重みは10であるとします。これらの重み値を1次元の座標値に並べて、[0、5)間隔はサーバーAに属し、[5、8)間隔はサーバーBに属し、[8、10)間隔はサーバーCに属します。次に、ランダム数ジェネレーターを使用して[0、10)の範囲のランダム数を生成し、このランダム数がどの間隔に収まるかを計算します。
最小アクティブ数:各サービスプロバイダーはアクティブなアクティブ番号に対応します。最初は、すべてのサービスプロバイダーのアクティブ数は0です。リクエストを受信するたびに、アクティブの数が1ずつ増え、リクエストが完了すると、アクティブの数が1ずつ減ります。サービスが一定期間実行された後、パフォーマンスの高いサービスプロバイダーは要求をより速く処理できるため、アクティブな数がより速く減少します。この時点で、そのようなサービスプロバイダーは最初に新しいサービス要求を取得できます。
一貫性のあるハッシュ:ハッシュアルゴリズムを使用して、プロバイダーの呼び出しノードとランダムノードからハッシュを生成し、このハッシュを[0、2 ^ 32-1]の円に投影します。クエリを実行するときは、md5を実行してから、キーに従ってハッシュして取得します。最初のノードの値は、現在のハッシュの呼び出し元以上です。
加重ラウンドロビン:たとえば、サーバーA、B、およびCの加重比が5:2:1の場合、8つの要求のうち、サーバーAは5つを受け取り、サーバーBは2つを受け取ります。 Cはこれらの要求の1つを受け取ります。
クラスターの耐障害性の方法は何ですか?
フェイルオーバークラスター障害の自動切り替え:Dubboのデフォルトのフォールトトレラントスキームは、呼び出しが失敗すると、他の使用可能なノードに自動的に切り替わります。サービスが参照されるときに、特定の再試行回数と間隔を構成できます。デフォルトの再試行回数は1で、呼び出しのみを意味します。一度。
フェイルバッククラスターはすぐに失敗します。通話が失敗すると、ログと通話情報が記録され、空の結果がコンシューマーに返され、失敗した通話は5秒ごとに時間指定タスクによって再試行されます。
フェイルファストクラスター障害の自動回復:一度だけ呼び出され、障害の直後に例外がスローされます
フェイルセーフクラスター障害の安全性:呼び出しで例外が発生し、ログはスローされず、空の結果が返されます
Forking Clusterは、複数のサービスプロバイダーを並行して呼び出します。スレッドプールを介して複数のスレッドが作成され、複数のプロバイダーが同時に呼び出され、結果がブロッキングキューに保存されます。1つのプロバイダーが結果を正常に返す限り、結果はすぐに返されます。
ブロードキャストクラスターブロードキャストモード:各プロバイダーを1つずつ呼び出します。プロバイダーのいずれかがエラーを報告した場合、ループ呼び出しの終了後に例外がスローされます。
Dubbo SPIメカニズムを理解していますか?
SPIのフルネームは、サービス検出メカニズムであるサービスプロバイダーインターフェイスです。基本は、インターフェイス実装クラスの完全修飾名をファイルに構成することです。サービスローダーは、構成ファイルを読み取り、実装クラスをロードして、実行時に動的に実行できるようにします。インターフェイスの実装クラスを置き換えます。
DubboはSPIメカニズムを介して多くの拡張機能も実装し、dubboはJavaネイティブSPIメカニズムを使用しませんが、調整が強化および改善されています。
SPIには、プロトコル拡張、クラスター拡張、ルーティング拡張、シリアル化拡張など、dubboに多くのアプリケーションがあります。
使用法は、META-INF / dubboディレクトリで構成できます。
key=com.xxx.value
次に、DubboのExtensionLoaderを使用して、指定されたキーに従って対応する実装クラスをロードします。これの利点は、オンデマンドでロードでき、パフォーマンスが最適化されることです。
RPCフレームワークを実装する場合の設計方法は?
まず、消費者とプロバイダーがサービスを登録およびサブスクライブできるように、サービス登録センターが必要です。
消費者がクライアントを呼び出す方法を決定するには、負荷分散メカニズムが必要です。これには、もちろん、障害耐性と再試行メカニズムも含まれます。
httpやrmiプロトコルを介した通信など、通信プロトコルとツールフレームワークが必要です。次に、プロトコルに従って通信に使用するフレームワークとツールを選択します。もちろん、データ送信のシリアル化を検討する必要があります。
基本的な要素に加えて、いくつかの監視、構成管理ページ、およびログは、追加の最適化の考慮事項です。
したがって、本質的に、1つまたは2つのRPCフレームワークに精通している限り、RPCフレームワークを自分で実装する方法を理解するのは簡単です。
更多精彩推荐
☞感动!盲人计算机科学家研发语音浏览器,致力科技改善盲人生活
☞1024 程序员节重要议程曝光,开源技术英雄会聊开源“真心话”
☞蓝色版苹果iPhone 12开箱上手视频流出;谷歌回应司法部反垄断诉讼:存在严重漏洞;Git 2.29 稳定版发布|极客头条
☞我是一个平平无奇的AI神经元
☞对话阿里云:开源与自研如何共处?
☞10 月中旬的 Medalla 测试网失常:如何开始,将如何结束?
点分享点点赞点在看