【Dubo】重要概念
5662 ワード
重要な概念 proxyFactoryは、例えば遠隔インターフェースのエージェントを取得するためのインターフェースのエージェントである。これは2つの方法があります。a.get Invokerを表します。server端末に対して、DemoServiceImplなどのサービス対象をInvokerオブジェクトに包装します。b.get Proxy:client端末に対して、DemoServiceのインターフェースなどのインターフェースを作成する。 WrapperはspringのBeanWrapperのようなものです。これは一つのインターフェースまたはクラスを包装しています。例のオブジェクトに対して、wrapperを通して値を付けたり、方法を決めたりする呼び出しができます。 Invokerは、方法の名称、パラメータに従って、対応する実行結果を得ることができる実行可能なオブジェクトである。その中には重要な方法があります。Revocation invocationは実行する方法やパラメータなどの重要な情報を含んでいます。現在は2つのタイプのRpcInvocation MockInvocationしかありません。3タイプのInvokerがあります。 ローカル実行クラスのInvoker server端:demoService.sayHelloを実行するには、InjvmExportを通じて反射実行するdemoService.sayHelloを実行すればいいです。 リモート通信クラスのInvoker client端末:demoService.sayHelloを実行するには、DubboInvokerをカプセル化してリモート通信を行い、実行するインターフェースをserver端に送信します。server端:AbstractProxyInvokerを採用し、DemoServiceImpl.sayHelloを実行し、その結果をclientに返信します。 以上のリモート通信実行クラスのInvokerがクラスタ化されたInvoker client端末:demoService.sayHelloを実行するには、AbstractClauster Invokerを介して負荷均衡を行い、DubboInvokerはリモート通信を行い、実行するインターフェースをserver端末に送信します。server端:AbstractProxyInvokerを採用し、DemoServiceImpl.sayHelloを実行し、その結果をclientに返信します。 Protocol 1.export:リモートサービスを暴露するということは、proxyFactory.get Invokerが作成したプロキシ類invokerオブジェクトをプロトコルにより外部に露出することである。export Mapの2.referに預け入れ:リモートサービスを引用し、proxyFactory.get Proxyを通じてリモートの動的エージェントクラス、例えばDemoServiceのリモートダイナミックインターフェースを作成します。 exportはinvoderのライフサイクルを維持します。 exchange情報交換層は、要求応答モードをカプセル化し、同期して非同期に移行する。 transportネットワーク転送層は、抽象的なnettyとminaの統一インターフェースに用いられる。 DirectoryディレクトリサービスStatic Directory:静的ディレクトリサービスは、彼のInvokerが固定されています。
重要なクラス Extension Loader:dubbo自己SPIのクラスローディング機構 Javassist ProxyFactory:遠端サービスのプロキシとローカルサービスを生成するInvoker クラスタフォールトトレランスMockClouster Invoker:サービスのドロップダウンを実現するためのCompditionRouter:directoryは、ルーティングフィルタを使用してproviderをフィルタリングしてinvokerを生成しません。呼出するたびに、フィルタリング条件に応じてinvoker LoadBalance:負荷バランス呼び出しを実現し、directoryからinvokerリストを取得します。 サービス登録RegistryProtocol:サービス露出とサービスの引用を行う起点RegistryDirectory:zkを傍受するconfノード、invokerリストZookeeper Registryを作成し、動的にメンテナンスする:パッケージとzkの操作詳細 サービスがDubbo Invokerを呼び出す:consumerが遠隔起動するクラス 通信NettyServer:nettyのサービス開始NettyHandler:nettyデータ傍受、受信したデータは上位のHeader Exchange Handlerに送信されます。交換層、受信したデータは論理処理を行います。invokerを呼び出し、future ExchangeCodecを起動します。編集復号 サービスリリース-原理サービスリリースフロー ローカルサービスを暴露し、ローカルの実装クラスをInjvmInvokerを生成し、export Map に入れる。長距離サービスを暴露して遠端サービスを生成するDubboInvokerはDubbo Exportに入れ、最後にexport Mapに預け入れてconsumerに を呼び出す。により、nettyを起動し、invokerのアドレスに従って、ポートの傍受を開始する 。接続を開けます。zkはregistryを使ってzk に接続します。.zkにproviderノード を登録する。 zk傍受ノード ローカルサービスと暴露リモートサービスの違いは何ですか? ローカルサービスを暴露する:JVMを使って露出し、zkを呼び出して遠隔通信を行う必要がないこと。例えば、同じサービスで自分のインターフェースを呼び出しても、ネットワークIP接続をして通信する必要はありません。 は、リモートサービスを暴露する:リモートクライアントに露出されたIPとポート番号を指し、ネットワークを介して通信を実現する。 zk恒久化ノードと一時ノードの違いは何ですか?持続ノード:一旦作成されたら、自発的に削除するようにトリガします。そうでなければ、ずっとZKに格納します。一時ノード:クライアントセッションと結合し、クライアントセッションが無効になると、このクライアント端末で作成されたすべての一時ノードが削除されます。サービス登録は一時ノードを採用し、プロバイダーが失効すると構成を削除する 。
SPIどうしてadapptiveを設計しますか?注解は類にありますか?方法にありますか?adapptive設計の目的は、既知のクラスを固定し、未知のクラスを拡張することです。 注釈はクラスにあります。人工的な実現を代表して、装飾類(設計モードにおける装飾モード)を実現します。これは主に固定既知類に作用しています。現在システム全体は2つしかありません。Adaptive Compler、Adaptive Extension Factory。a.なぜAdaptive Complerという種類が固定的に知られているのですか?全体のフレームはJavassistとJdkComplerしかサポートしていないからです。b.なぜAdaptive Extension Factoryという種類が固定的に知られているのですか?全体のフレームは2つのobjFactoryしかサポートしていないので、一つはspiで、もう一つはスプリング です。注解方法:自動生成とコンパイルを表す動的なAdpative類は、主にSPIに使われます。spiのクラスは固定されていない、未知の拡張タイプなので、動的なAdaptiveのクラスを設計しました。Extension Loader.gets Extension Loader(Protocol.class)。を選択してオブジェクトを抽出します。 どうしてdubboは自分でひとまとまりのSPIを設計しますか?これは元のJDK spiのコード です。元のJDK spiはキャッシュをサポートしていません。dubboはキャッシュオブジェクトを設計しました。spiのkeyとvalueはcachedInstanceオブジェクトの中にキャッシュされています。これはConcerentMap です。元JDK spiはデフォルト値をサポートしていません。Dubbotocolは、Extension Loader.getExtension Loader.Protocl.classなど、デフォルトのspiオブジェクトを表します。 jdkはforループでオブジェクトを判断し、Dubb設計getExtensionは柔軟で便利で、spiオブジェクトを動的に取得し、例えばExtension Loader.getExtension Loader.getExtension Loader.gets Extensionはオブジェクトを抽出する 。オリジナルJDK spiはAOP機能をサポートしていません。DubbデザインはAOP機能を追加しました。cachedWrapperClass esで、オリジナルspi類で、XxxxFilterWrapper XxListenerWrapper を包装しました。元JDK spiはIOC機能をサポートしていません。DubbデザインはIOCを追加しました。構造関数を通して注入します。コードは:wrapperClass.get Contstruct.newInstance、 です。
dubbo spiの目的:達成クラスを指定するオブジェクトを取得する。ルート:Extension Loader.get Extension(String name)実現経路:get Extension Loader(Class type)はこのインターフェースnewのためのExtension Loaderであり、キャッシュされる。get Adaptive Extension()は拡張クラスを取得します。もし@Adaptive注解がクラスにあるなら、装飾類です。注釈が方法的には動的エージェントである場合、例えばProtocl$Adaptiveオブジェクト。get Extensionは、指定されたオブジェクトを取得します。
通信
dubboはnetty NIOの非遮断に基づいて並列に通信を呼び出します。(ブロッキング非ブロッキング非同期区別)dubboの通信方式は、3つのタイプがあります。非同期で、戻り値Future temp=RpcConttext.get Conttext().get Future()があります。hello=temp.get(); 非同期、戻り値なし 非同期(デフォルトの通信方式)A.現在のスレッドはどうやって「一時停止」させますか?結果が戻ったら実行しますか?B.socketは全二重の通信方式ですが、マルチスレッドの場合、どうやってその返却結果が元のスレッドの呼び出しに対応するかを知りますか?一つのグローバル一意IDを通してconsumerとproviderを往復します。 tcpではなぜ、カバンを外すという問題が発生しますか?1.メッセージの固定長は、例えば1000バイトとする。2.バックエンドに、リターンやスペースなどの特殊文字をカットとして追加する。典型的なFTPプロトコル3.メッセージをメッセージヘッドメッセージ体に分類する。例えばdubbo
RegistryDirectory
:ディレクトリサービスを登録して、彼のInvokerのセットデータはzk登録センターから来ています。NotifyListenerインターフェースを実現して、notify(List urls)をフィードバックして、プロセス全体に重要なmap変数があります。methodInvoker Map(データのソースです。notifyの重要な操作対象です。重要な操作ルートルールを書くことに重点を置いています。重要なクラス
SPI
ServiceLoader serviceLoader=ServiceLoader.load(Command.class);
for(Command command:serviceLoader){
command.execute();
}
dubboはもとの基礎の上で以下の機能を設計しました。dubbo spiの目的:達成クラスを指定するオブジェクトを取得する。ルート:Extension Loader.get Extension(String name)実現経路:get Extension Loader(Class type)はこのインターフェースnewのためのExtension Loaderであり、キャッシュされる。get Adaptive Extension()は拡張クラスを取得します。もし@Adaptive注解がクラスにあるなら、装飾類です。注釈が方法的には動的エージェントである場合、例えばProtocl$Adaptiveオブジェクト。get Extensionは、指定されたオブジェクトを取得します。
通信
dubboはnetty NIOの非遮断に基づいて並列に通信を呼び出します。(ブロッキング非ブロッキング非同期区別)dubboの通信方式は、3つのタイプがあります。