(ビデオ チュートリアルの推奨: Java コース)
1. Dubbo の面接の質問
2.Dubbo の面接の質問回答分析
1. Dubbo を使用する理由?
2. Dubbo の全体的なアーキテクチャ設計の層は何ですか?
3. デフォルトで使用される通信フレームワークは何ですか? 他にオプションはありますか?
4. サービスは通話ブロック?
5.一般的にどの登録センターが使用されますか?他に選択肢はありますか?
6. デフォルトではどのシリアル化フレームワークが使用されますか? 他に何か知っていますか?
7. サービスプロバイダーの障害キックの背後にある原則は何ですか?
8.古いバージョンに影響を与えずにサービスをオンラインにするにはどうすればよいですか?
9. サービス呼び出しチェーンが長すぎる問題を解決するにはどうすればよいですか?
10. コア構成とは何ですか?
11. Dubbo が推奨するプロトコルは何ですか?
12. 同じサービスに複数の登録がある場合、特定のサービスに直接接続できますか?
13. サービスの登録と検出のフローチャートを描きますか?
14. Dubbo クラスターのフォールト トレランスを実現するソリューションはいくつありますか?
15. Dubbo サービスがダウングレードされています。失敗した後に再試行するにはどうすればよいですか?
16.Dubbo を使用するときにどのような問題に遭遇しましたか?
17. Dubbo Monitor の実装原理?
18. Dubbo はどのようなデザイン パターンを使用していますか?
19. Dubbo 設定ファイルはどのように Spring にロードされるのでしょうか?
20. Dubbo SPI と Java SPI の違いは何ですか?
21. Dubbo は分散トランザクションをサポートしていますか?
22. Dubbo は結果をキャッシュできますか?
23. サービスがオンラインの場合、どのようにして古いバージョンと互換性を保つことができますか?
24. Dubbo が依存する必要があるパッケージは何ですか?
25. Dubbo telnet コマンドでは何ができるのですか?
26. Dubbo サポート サービスはダウングレードされますか?
27. Dubbo はどのようにして正常にシャットダウンしますか?
28.ダボとダブボックスの違いは何ですか?
29.Dubbo と Spring Cloud の違いは何ですか?
30. 他の分散フレームワークをご存知ですか?
3. Spring Cloud と Dubbo の違い
4. もう 1 つのマイクロサービス フレームワーク SpringCloud
SpringCloud コンポーネントの原則: Eureka、Feign、Ribbon、Hystrix、Zuul
1. Dubbo を使用する理由は何ですか?
2. Dubbo の全体的なアーキテクチャ設計の層は何ですか?
3. デフォルトで使用される通信フレームワークは何ですか? 他にオプションはありますか?
4. サービスは通話ブロック?
5.一般的にどの登録センターが使用されますか?他に選択肢はありますか?
6. デフォルトではどのシリアル化フレームワークが使用されますか? 他に何か知っていますか?
7. サービスプロバイダーの障害キックの背後にある原則は何ですか?
8.古いバージョンに影響を与えずにサービスをオンラインにするにはどうすればよいですか?
9. サービス呼び出しチェーンが長すぎる問題を解決するにはどうすればよいですか?
10. コア構成とは何ですか?
11. Dubbo が推奨するプロトコルは何ですか?
12. 同じサービスに複数の登録がある場合、特定のサービスに直接接続できますか?
13. サービスの登録と検出のフローチャートを描きますか?
14. Dubbo クラスターのフォールト トレランスを実現するソリューションはいくつありますか?
15. Dubbo サービスがダウングレードされています。失敗した後に再試行するにはどうすればよいですか?
16.Dubbo を使用するときにどのような問題に遭遇しましたか?
17. Dubbo Monitor の実装原理?
18. Dubbo はどのようなデザイン パターンを使用していますか?
19. Dubbo 設定ファイルはどのように Spring にロードされるのでしょうか?
20. Dubbo SPI と Java SPI の違いは何ですか?
21. Dubbo は分散トランザクションをサポートしていますか?
22. Dubbo は結果をキャッシュできますか?
23. サービスがオンラインの場合、どのようにして古いバージョンと互換性を保つことができますか?
24. Dubbo が依存する必要があるパッケージは何ですか?
25. Dubbo telnet コマンドでは何ができるのですか?
26. Dubbo サポート サービスはダウングレードされますか?
27. Dubbo はどのようにして正常にシャットダウンしますか?
28.ダボとダブボックスの違いは何ですか?
29.Dubbo と Spring Cloud の違いは何ですか?
30. 他の分散フレームワークをご存知ですか?
サービス化のさらなる発展に伴い、サービスの数はますます増え、サービス間の呼び出しや依存関係はますます複雑になり、サービス指向アーキテクチャ (SOA) が誕生し、一連のサービスが派生しました。サービス プロビジョニング、サービス呼び出し、接続処理、通信プロトコル、シリアル化メソッド、サービス ディスカバリ、サービス ルーティング、ログ出力、その他の動作をカプセル化するサービス フレームワークなどの対応するテクノロジ。このようにして、分散システムのサービス ガバナンス フレームワークが登場し、Dubbo が誕生しました。
インターフェイス サービス層 (サービス): この層は、ビジネス ロジックに関連しており、プロバイダーとコンシューマー 対応するインターフェイスと実装を設計します。
構成層 (Config):ServiceConfig と ReferenceConfig を中心とした外部構成インターフェイス
サービス プロキシ層 (Proxy) ): サービス インターフェイスの透過プロキシ。ServiceProxy を中心としてサービスのクライアント スタブとサーバー スケルトンを生成します。拡張インターフェイスは ProxyFactory
サービス登録層 ( Registry): カプセル化サービス アドレス サービス URL を中心とした登録と検出。拡張インターフェイスは RegistryFactory、Registry、RegistryService です。
ルーティング層 (クラスター):ルーティングと負荷分散をカプセル化します。複数のプロバイダーとブリッジ 登録センター (Invoker を中心として、拡張インターフェイスはクラスター、ディレクトリ、ルーター、および LoadBlancce)
#監視層 (Monitor): RPC 呼び出し番号と呼び出し時間の監視、統計を中心に、拡張されています。インターフェイスは、MonitorFactory、Monitor、および MonitorService です。
リモート呼び出し層 (プロトコル):呼び出しと結果を中心に、RPC 呼び出しをカプセル化します。拡張インターフェイスは次のとおりです。プロトコル、呼び出し側およびエクスポーター
情報交換層 (Exchange): カプセル化要求応答モード、同期から非同期。リクエストとレスポンスを中心とした拡張インターフェイスは、Exchanger、ExchangeChannel、ExchangeClient、ExchangeServer です。
ネットワーク トランスポート層 (トランスポート):要約 mina と netty は、メッセージを中心に拡張された統合インターフェイスです。インターフェイスはチャネル、トランスポーター、クライアント、サーバー、およびコーデックです。
データ シリアル化レイヤー (シリアル化):いくつかの再利用可能なツール、拡張インターフェイスはシリアル化、ObjectInput、ObjectOutput、および ThreadPool です
3. デフォルトではどのような通信フレームワークが使用されますか? 他にオプションはありますか? netty フレームワークと mina もデフォルトで推奨されます。 4. サービスコールはブロックされていますか? デフォルトはブロッキングであり、戻り値がない場合は非同期で呼び出すことができます。 Dubbo は、NIO に基づく並列呼び出しのノンブロッキング実装です。クライアントは、複数のリモート サービスへの並列呼び出しを完了するために複数のスレッドを開始する必要はありません。マルチスレッドと比較して、オーバーヘッドが小さく、非同期呼び出しは Future を返します。物体。 5.一般的にどの登録センターが使用されますか?他に選択肢はありますか? Zookeeper を登録センターとして使用するほか、Redis、Multicast、Simple 登録センターを使用することをお勧めしますが、これらは推奨されません。 6. デフォルトではどのシリアル化フレームワークが使用されますか? 他に何か知っていますか? Duddo、FastJson、Java 独自のシリアル化だけでなく、ヘシアン シリアル化も使用することをお勧めします。 7. サービスプロバイダーの障害キックの背後にある原則は何ですか? サービス障害により、Zookeeper に基づいた一時ノードの原則がキックされます。 8.古いバージョンに影響を与えずにサービスをオンラインにするにはどうすればよいですか? 古いバージョンに影響を与えずにマルチバージョン開発を使用します。 9. サービス呼び出しチェーンが長すぎる問題を解決するにはどうすればよいですか? zipkin と組み合わせて、分散サービス追跡を実装できます。
構成を変更するだけでポイントツーポイントに直接接続することも、Telnet 経由でサービスに直接接続することもできます。
(より関連した面接の質問に関する推奨事項: java 面接の質問と回答 )
dubbo:reference で、mock="return null" を設定できます。また、mock の値を true に変更すると、インターフェースと同じパスに Mock クラスが実装され、命名規則は「インターフェース名 Mock」という接尾辞になります。次に、独自のダウングレード ロジックを Mock クラスに実装します
対応するサービスが登録センターに見つかりません。サービス実装クラスに @service アノテーションが追加されているかどうかを確認してください。登録センターに接続できません。構成ファイル内の対応するテスト IP が正しいかどうかを確認してください
コンシューマ側は呼び出しを開始する前にまずフィルタ チェーンを通過し、プロバイダ側もリクエストを受信するときに最初にフィルタ チェーンを通過してから、実際のビジネス ロジック処理を実行します。デフォルトでは、コンシューマ フィルタ チェーンとプロバイダ フィルタ チェーンの両方に Monitorfilter があります。
1. MonitorFilter は DubboMonitor にデータを送信します
2. DubboMonitor はデータを集計し (デフォルトでは 1 分間の統計が集計されます)、それらを ConcurrentMap
3 SimpleMonitorService これらの集計データを BlockingQueue キューに詰め込みます (キューは大文字で 100000 になります)
4. SimpleMonitorService は、バックグラウンド スレッド (スレッド名: DubboMonitorAsyncWriteLogThread) を使用して、キュー内のデータをファイル (スレッド無限ループを使用します。形式で記述されます)
5. SimpleMonitorService は、1 つのスレッド (スレッド名: DubboMonitorTimer) を含むスレッド プールも使用して、ファイル内の統計データを 5 分ごとにグラフに描画します
Dubbo フレームワークは、初期化および通信プロセスにさまざまな設計パターンを使用し、クラスのロードや権限制御などの機能を柔軟に制御できます。
ファクトリー モード
プロバイダーは、サービスをエクスポートするときに ServiceConfig のエクスポート メソッドを呼び出します。 ServiceConfig にはフィールドがあります:
private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi on();
Dubbo にはこのコードがたくさんあります。これもファクトリ パターンですが、実装クラスは JDKSPI メカニズムを使用して取得されます。この実装の利点は、拡張性が高いことです。実装を拡張したい場合は、クラスパスにファイルを追加するだけでよく、コードの侵入はありません。また、上記のAdaptive実装と同様に、呼び出し時にどの実装を呼び出すかを動的に決定することも可能ですが、この実装は動的プロキシを使用するためコードのデバッグが煩雑になり、実際に呼び出される実装を解析する必要があります。クラス。
デコレータ パターン
Dubbo 在启动和调用阶段都大量使用了装饰器模式。以 Provider 提供的调用链为例,具体的调用链代码是在 ProtocolFilterWrapper 的 buildInvokerChain 完成的,具体是将注解中含有 group=provider 的 Filter 实现,按照 order 排序,最后的调用顺序是:
EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter -> ExecuteLimitFilter -> TraceFilter -> TimeoutFilter -> MonitorFilter -> ExceptionFilter
更确切地说,这里是装饰器和责任链模式的混合使用。例如,EchoFilter 的作用是判断是否是回声测试请求,是的话直接返回内容,这是一种责任链的体现。而像ClassLoaderFilter 则只是在主功能上添加了功能,更改当前线程的 ClassLoader,这是典型的装饰器模式。
观察者模式
Dubbo 的 Provider 启动时,需要与注册中心交互,先注册自己的服务,再订阅自己的服务,订阅时,采用了观察者模式,开启一个 listener。注册中心会每 5 秒定时检查是否有服务更新,如果有更新,向该服务的提供者发送一个 notify 消息,provider 接受到 notify 消息后,运行 NotifyListener 的 notify 方法,执行监听器方法。
动态代理模式
Dubbo 扩展 JDK SPI 的类 ExtensionLoader 的 Adaptive 实现是典型的动态代理实现。Dubbo 需要灵活地控制实现类,即在调用阶段动态地根据参数决定调用哪个实现类,所以采用先生成代理类的方法,能够做到灵活的调用。生成代理类的代码是 ExtensionLoader 的 createAdaptiveExtensionClassCode 方法。代理类主要逻辑是,获取 URL 参数中指定参数的值作为获取实现类的 key。
Spring 容器在启动的时候,会读取到 Spring 默认的一些 schema 以及 Dubbo 自定义的 schema,每个 schema 都会对应一个自己的 NamespaceHandler,NamespaceHandler 里面通过 BeanDefinitionParser 来解析配置信息并转化为需要加载的 bean 对象!
JDK SPI:
JDK 标准的 SPI 会一次性加载所有的扩展实现,如果有的扩展吃实话很耗时,但也没用上,很浪费资源。所以只希望加载某个的实现,就不现实了
DUBBO SPI:
1、对 Dubbo 进行扩展,不需要改动 Dubbo 的源码
2、延迟加载,可以一次只加载自己想要加载的扩展实现。
3、增加了对扩展点 IOC 和 AOP 的支持,一个扩展点可以直接 setter 注入其
它扩展点。
4、Dubbo 的扩展机制能很好的支持第三方 IoC 容器,默认支持 Spring Bean。
目前暂时不支持,可与通过 tcc-transaction 框架实现
介绍:tcc-transaction 是开源的 TCC 补偿性分布式事务框架
TCC-Transaction 通过 Dubbo 隐式传参的功能,避免自己对业务代码的入侵。
为了提高数据访问的速度。Dubbo 提供了声明式缓存,以减少用户加缓存的工作量
其实比普通的配置文件就多了一个标签 cache="true"
可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似。
Dubbo 必须依赖 JDK,其他为可选。
dubbo 服务发布之后,我们可以利用 telnet 命令进行调试、管理。Dubbo2.0.5 以上版本服务提供端口支持 telnet 命令
连接服务
telnet localhost 20880 //键入回车进入 Dubbo 命令模式。
查看服务列表
dubbo>ls com.test.TestService dubbo>ls com.test.TestService create delete query
· ls (list services and methods)
· ls : 显示服务列表。
· ls -l : 显示服务详细信息列表。
· ls XxxService:显示服务的方法列表。
· ls -l XxxService: サービスメソッドの詳細のリストを表示します。
dubbo:referenceでmock="return null"を設定します。また、mock の値を true に変更すると、インターフェースと同じパスに Mock クラスが実装され、命名規則は「インターフェース名 Mock」という接尾辞になります。次に、独自のダウングレード ロジックを Mock クラス
##27 に実装します。Dubbo はどのようにして正常にシャットダウンしますか? Dubbo は、JDK の ShutdownHook を使用して正常なシャットダウンを完了します。したがって、kill -9 PID やその他の強制シャットダウン命令を使用すると、正常なシャットダウンは実行されません。kill PID が使用された場合にのみ実行されます。 28.ダボとダブボックスの違いは何ですか? Dubbox は、Dubbo の保守停止後に Dangdang が Dubbo をベースに作成した拡張プロジェクトで、Restful から呼び出せるサービスの追加やオープンソースコンポーネントの更新などを行っています。 29.Dubbo と Spring Cloud の違いは何ですか? マイクロサービス アーキテクチャのさまざまな要素に基づいて、Spring Cloud と Dubbo がどのようなサポートを提供するかを見てみましょう。 Dubbo を使用して構築されたマイクロサービス アーキテクチャは、コンピューターを組み立てるようなもので、各リンクで高い選択の自由がありますが、最終的な結果は次のようなものになる可能性があります。メモリの品質が悪く、メモリが切れると不安になりますが、専門家であれば問題ありません。Spring Cloud はブランドマシンのようなものです。Spring Source の統合により、マシンの安定性を高めるために多くの互換性テストが行われていますが、非純正コンポーネント以外のものを使用する場合は、その基本を十分に理解する必要があります。 30. 他の分散フレームワークをご存知ですか? その他には、spring の Spring Cloud、facebook の thrift、twitter の finagle などが含まれます。3. Spring Cloud と Dubbo の違い##Dubbo | Spring Cloud | |
Zookeeper | Spring Cloud Netflix Eureka | |
RPC | Dubbo-monitor |
Spring Boot Admin |
不完全 | #Spring Cloud Netflix Hystrix |
| ##サービス ゲートウェイ
なし |
#Spring Cloud Netflix Zuul | 分散構成 |
なし | #Spring Cloud Config#サービス追跡
| #なし|
##Spring Cloud Sleuth | #メッセージ バス |
なし |
##データ フロー | なし | Spring Cloud Stream |
##バッチ タスク |
なし |
Spring Cloudタスク |
##.... |
.... |
.... |
最大の違い:Spring Cloud は Dubbo の RPC 通信を放棄し、HTTP ベースの REST メソッドを採用します。厳密に言えば、どちらの方法にもそれぞれ長所と短所があります。後者はサービス呼び出しのパフォーマンスをある程度犠牲にしますが、前述のネイティブ RPC によって引き起こされる問題も回避します。また、REST は RPC に比べて柔軟性が高く、サービス提供者と呼び出し元はコントラクトのみに依存し、コードレベルでの強い依存関係がないため、急速な進化を重視するマイクロサービス環境に適しています。 | 4. 別のマイクロサービス フレームワーク SpringCloud以前の問題をお読みください: | SpringCloud コンポーネントの原則: Eureka、Feign、Ribbon、Hystrix、Zuul
関連推奨事項: Java の入門 |
以上がJava 面接の質問 - Dubboの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。