Maison  >  Article  >  Java  >  Questions d'entretien Java-Dubbo

Questions d'entretien Java-Dubbo

王林
王林avant
2020-10-28 16:26:482595parcourir

Questions d'entretien Java-Dubbo

Table des matières

(Tutoriel vidéo recommandé : cours Java)

1. Questions d'entretien Dubbo

2. Analyse des questions et réponses de l'entretien Dubbo

1 Pourquoi utiliser Dubbo ?

2. Quelles sont les couches de la conception globale de l'architecture de Dubbo ?

3. Quel cadre de communication est utilisé par défaut ?

4. le blocage d'appel ?

5. Quel centre d'inscription est généralement utilisé ? Y a-t-il d'autres options ?

6. Quel framework de sérialisation est utilisé par défaut et que savez-vous d'autre ?

7. Quel est le principe qui se cache derrière le renvoi en échec des prestataires de services ?

8. Comment le service peut-il être mis en ligne sans affecter l'ancienne version ?

9. Comment résoudre le problème d'une chaîne d'appel de service trop longue ?

10. Quelles sont les configurations de base ?

11. Quel protocole Dubbo recommande-t-il ?

12. Puis-je me connecter directement à un certain service si j'ai plusieurs inscriptions pour le même service ?

13. Dessiner un organigramme de l'enregistrement et de la découverte des services ?

14. Combien de solutions existe-t-il pour la tolérance aux pannes du cluster Dubbo ?

15. Le service Dubbo est dégradé. Comment réessayer après un échec ?

16. Quels problèmes avez-vous rencontrés lors de l'utilisation de Dubbo ?

17. Principe de mise en œuvre de Dubbo Monitor ?

18. Quels modèles de conception Dubbo utilise-t-il ?

19. Comment le fichier de configuration Dubbo est-il chargé dans Spring ?

20. Quelle est la différence entre Dubbo SPI et Java SPI ?

21. Dubbo prend-il en charge les transactions distribuées ?

22. Dubbo peut-il mettre en cache les résultats ?

23. Comment le service peut-il être compatible avec les anciennes versions lors de son lancement ?

24. De quels packages Dubbo doit-il dépendre ?

25. Que peut faire la commande Dubbo telnet ?

26. Dubbo prend-il en charge la rétrogradation du service ?

27. Comment Dubbo s'arrête-t-il avec élégance ?

28. Quelle est la différence entre Dubbo et Dubbox ?

29. Quelle est la différence entre Dubbo et Spring Cloud ?

30. Connaissez-vous d’autres frameworks distribués ?

3. La différence entre Spring Cloud et Dubbo

4. Un autre framework de microservice SpringCloud

Principe du composant SpringCloud : Eureka, Feign, Ribbon, Hystrix, Zuul


1.Questions d'entretien Dubbo

1.Pourquoi utiliser Dubbo ?

2. Quelles sont les couches de la conception globale de l'architecture de Dubbo ?

3. Quel cadre de communication est utilisé par défaut ?

4. le blocage d'appel ?

5. Quel centre d'inscription est généralement utilisé ? Y a-t-il d'autres options ?

6. Quel framework de sérialisation est utilisé par défaut et que savez-vous d'autre ?

7. Quel est le principe qui se cache derrière le renvoi en échec des prestataires de services ?

8. Comment le service peut-il être mis en ligne sans affecter l'ancienne version ?

9. Comment résoudre le problème d'une chaîne d'appel de service trop longue ?

10. Quelles sont les configurations de base ?

11. Quel protocole Dubbo recommande-t-il ?

12. Puis-je me connecter directement à un certain service si j'ai plusieurs inscriptions pour le même service ?

13. Dessiner un organigramme de l'enregistrement et de la découverte des services ?

14. Combien de solutions existe-t-il pour la tolérance aux pannes du cluster Dubbo ?

15. Le service Dubbo est dégradé. Comment réessayer après un échec ?

16. Quels problèmes avez-vous rencontrés lors de l'utilisation de Dubbo ?

17. Principe de mise en œuvre de Dubbo Monitor ?

18. Quels modèles de conception Dubbo utilise-t-il ?

19. Comment le fichier de configuration Dubbo est-il chargé dans Spring ?

20. Quelle est la différence entre Dubbo SPI et Java SPI ?

21. Dubbo prend-il en charge les transactions distribuées ?

22. Dubbo peut-il mettre en cache les résultats ?

23. Comment le service peut-il être compatible avec les anciennes versions lors de son lancement ?

24. De quels packages Dubbo doit-il dépendre ?

25. Que peut faire la commande Dubbo telnet ?

26. Dubbo prend-il en charge la rétrogradation du service ?

27. Comment Dubbo s'arrête-t-il avec élégance ?

28. Quelle est la différence entre Dubbo et Dubbox ?

29. Quelle est la différence entre Dubbo et Spring Cloud ?

30. Connaissez-vous d’autres frameworks distribués ?

2.Analyse des réponses aux questions d'entretien de Dubbo

1.Pourquoi utiliser Dubbo ?

Avec le développement de la servitisation, il existe de plus en plus de services, et les appels et les dépendances entre les services deviennent de plus en plus complexes. L'architecture orientée services (SOA) est née, et ainsi dérivée d'une série de. technologies correspondantes, telles qu'un cadre de service qui encapsule la fourniture de services, l'invocation de services, le traitement de connexion, les protocoles de communication, les méthodes de sérialisation, la découverte de services, le routage de services, la sortie de journaux et d'autres comportements. De cette manière, un cadre de gouvernance des services pour les systèmes distribués a émergé et Dubbo est né.

2. Quelles sont les couches de la conception globale de l'architecture de Dubbo ?

Couche de service d'interface (Service) : Cette couche est liée à la logique métier, basée sur l'activité de fournisseur et consommateur Concevoir les interfaces et implémentations correspondantes

Couche de configuration (Config) : Interface de configuration externe, centrée sur ServiceConfig et ReferenceConfig

Couche proxy de service (Proxy) : Le proxy transparent de l'interface de service génère le Stub client et le Squelette serveur du service, centré sur ServiceProxy, et l'interface étendue est ProxyFactory

Couche d'enregistrement du service (Registry) : encapsule l'adresse du service Enregistrement et découverte, centrés sur l'URL du service, les interfaces étendues sont RegistryFactory, Registry, RegistryService

Couche de routage (Cluster) : encapsule le routage et l'équilibrage de charge de plusieurs fournisseurs et relie l'enregistrement center, centré sur Invoker, les interfaces étendues sont Cluster, Directory, Router et LoadBlancce

Monitor : Surveillance du numéro d'appel et du temps d'appel RPC, centrée sur les statistiques, étendue Les interfaces sont MonitorFactory, Monitor et MonitorService

Couche d'appel à distance (Protocal) : encapsule les appels RPC, centrés sur l'invocation et le résultat, et les interfaces étendues sont Protocal, Invoker et Exporter

Informations couche d'échange (Exchange) : Mode de réponse à la demande d'encapsulation, synchrone à asynchrone. Centrées sur Request et Response, les interfaces étendues sont Exchanger, ExchangeChannel, ExchangeClient et ExchangeServer

Couche de transport réseau (Transport) : Abstract mina et netty sont des interfaces unifiées, centrées sur Message, étendues. les interfaces sont Channel, Transporter, Client, Server et Codec

Couche de sérialisation des données (Serialize) : Certains outils réutilisables, les interfaces étendues sont Serialization, ObjectInput, ObjectOutput et ThreadPool

3. Quel framework de communication est utilisé par défaut ? Existe-t-il d'autres options ?

Le framework netty et mina sont également recommandés par défaut.

4. Les appels de service bloquent-ils ?

La valeur par défaut est bloquante et peut être appelée de manière asynchrone. S'il n'y a pas de valeur de retour, vous pouvez le faire. Dubbo est une implémentation non bloquante d'appels parallèles basée sur NIO. Le client n'a pas besoin de démarrer plusieurs threads pour effectuer des appels parallèles vers plusieurs services distants. Par rapport au multithread, la surcharge est plus petite et les appels asynchrones renverront un Future. objet.

5. Quel centre d'inscription est généralement utilisé ? Y a-t-il d'autres options ?

Il est recommandé d'utiliser Zookeeper comme centre d'enregistrement, ainsi que les centres d'enregistrement Redis, Multicast et Simple, mais ils ne sont pas recommandés.

6. Quel framework de sérialisation est utilisé par défaut et que savez-vous d'autre ?

Il est recommandé d'utiliser la sérialisation hessienne, ainsi que la sérialisation Duddo, FastJson et Java.

7. Quel est le principe qui se cache derrière le renvoi en échec des prestataires de services ?

Une panne de service élimine le principe du nœud temporaire basé sur zookeeper.

8. Comment le service peut-il être mis en ligne sans affecter l'ancienne version ?

Utiliser le développement multiversion sans affecter les anciennes versions.

9. Comment résoudre le problème d'une chaîne d'appel de service trop longue ?

Peut être combiné avec zipkin pour implémenter le traçage de services distribués.

10. Quelles sont les configurations de base ?

11. Quel protocole Dubbo recommande-t-il ?

12. Puis-je me connecter directement à un certain service si j'ai plusieurs inscriptions pour le même service ?

Vous pouvez vous connecter directement point à point, il suffit de modifier la configuration, ou vous pouvez vous connecter directement à un service via telnet.

(Recommandations pour des questions d'entretien plus connexes : questions et réponses d'entretien Java)

13. Dessiner un organigramme de l'enregistrement et de la découverte du service ?

14. Combien de solutions existe-t-il pour la tolérance aux pannes du cluster Dubbo ?

15. Le service Dubbo est déclassé. Comment réessayer après un échec ?

Vous pouvez définir mock="return null" dans dubbo:reference. La valeur de mock peut également être modifiée en true, puis une classe Mock est implémentée dans le même chemin que l'interface. La règle de dénomination est le suffixe "nom de l'interface + Mock". Ensuite, implémentez votre propre logique de rétrogradation dans la classe Mock

16 Quels problèmes avez-vous rencontrés lors de l'utilisation de Dubbo ?

Le service correspondant est introuvable dans le centre d'enregistrement. Vérifiez si la classe d'implémentation du service a ajouté l'annotation @service Impossible de se connecter au centre d'enregistrement, vérifiez si l'IP de test correspondante dans le fichier de configuration est correcte.

17 , Principe de mise en œuvre de Dubbo Monitor ?

Le côté consommateur passera d'abord par la chaîne de filtrage avant de passer un appel ; le côté fournisseur passera également par la chaîne de filtrage en premier lors de la réception de la demande, puis effectuera le traitement de la logique métier proprement dite. Par défaut, il existe un Monitorfilter dans les chaînes de filtres du consommateur et du fournisseur.

1. MonitorFilter envoie des données à DubboMonitor

2. DubboMonitor agrège les données (les statistiques en 1 minute sont agrégées par défaut) et les enregistre temporairement dans ConcurrentMap a Le pool de threads contenant 3 threads (nom du thread : DubboMonitorSendTimer) appelle SimpleMonitorService toutes les 1 minute pour parcourir et envoyer les données statistiques dans StatisticsMap Après l'envoi de chacun, l'AtomicReference des statistiques actuelles est réinitialisée

3. . SimpleMonitorService Insérez ces données agrégées dans la file d'attente BlockingQueue (la file d'attente porte la valeur 100000)

4. SimpleMonitorService utilise un thread d'arrière-plan (nom du thread : DubboMonitorAsyncWriteLogThread) pour écrire les données de la file d'attente dans le fichier (le thread). utilise une boucle infinie écrite sous la forme)

5. SimpleMonitorService utilisera également un pool de threads contenant 1 thread (nom du thread : DubboMonitorTimer) pour dessiner les données statistiques du fichier dans un graphique toutes les 5 minutes

18. Quels modèles de conception Dubbo utilise-t-il ?

Le framework Dubbo utilise une variété de modèles de conception dans le processus d'initialisation et de communication, qui peuvent contrôler de manière flexible des fonctions telles que le chargement de classe et le contrôle des autorisations.

Mode usine

Le fournisseur appellera la méthode d'exportation de ServiceConfig lors de l'exportation d'un service. Il y a un champ dans ServiceConfig :

private static final Protocol protocol =
ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi
on();

Dubbo a beaucoup de ce genre de code. Il s'agit également d'un modèle d'usine, mais la classe d'implémentation est obtenue à l'aide du mécanisme JDKSPI. L'avantage de cette implémentation est qu'elle est hautement évolutive. Si vous souhaitez étendre l'implémentation, il vous suffit d'ajouter un fichier au chemin de classe, et il n'y a aucune intrusion de code. De plus, comme l'implémentation adaptative ci-dessus, il est possible de décider dynamiquement quelle implémentation appeler lors de l'appel. Cependant, comme cette implémentation utilise un proxy dynamique, cela rendra le débogage du code plus difficile et il est nécessaire d'analyser l'implémentation réellement appelée. classe.

Mode Décorateur

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。

19、Dubbo 配置文件是如何加载到 Spring 中的?

Spring 容器在启动的时候,会读取到 Spring 默认的一些 schema 以及 Dubbo 自定义的 schema,每个 schema 都会对应一个自己的 NamespaceHandler,NamespaceHandler 里面通过 BeanDefinitionParser 来解析配置信息并转化为需要加载的 bean 对象!

20、Dubbo SPI 和 Java SPI 区别?

JDK SPI:

JDK 标准的 SPI 会一次性加载所有的扩展实现,如果有的扩展吃实话很耗时,但也没用上,很浪费资源。所以只希望加载某个的实现,就不现实了

 DUBBO SPI:

1、对 Dubbo 进行扩展,不需要改动 Dubbo 的源码

2、延迟加载,可以一次只加载自己想要加载的扩展实现。

3、增加了对扩展点 IOC 和 AOP 的支持,一个扩展点可以直接 setter 注入其

它扩展点。

4、Dubbo 的扩展机制能很好的支持第三方 IoC 容器,默认支持 Spring Bean。

21、Dubbo 支持分布式事务吗?

目前暂时不支持,可与通过 tcc-transaction 框架实现

介绍:tcc-transaction 是开源的 TCC 补偿性分布式事务框架

TCC-Transaction 通过 Dubbo 隐式传参的功能,避免自己对业务代码的入侵。

22、Dubbo 可以对结果进行缓存吗?

为了提高数据访问的速度。Dubbo 提供了声明式缓存,以减少用户加缓存的工作量

其实比普通的配置文件就多了一个标签 cache="true"

23、服务上线怎么兼容旧版本?

可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似。

24、Dubbo 必须依赖的包有哪些?

Dubbo 必须依赖 JDK,其他为可选。

25、Dubbo telnet 命令能做什么?

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 : affiche une liste des détails de la méthode de service.

26. Dubbo prend-il en charge la rétrogradation du service ?

pour définir mock="return null" via dubbo:reference. La valeur de mock peut également être modifiée en true, puis une classe Mock est implémentée dans le même chemin que l'interface. La règle de dénomination est le suffixe "nom de l'interface + Mock". Ensuite, implémentez votre propre logique de rétrogradation dans la classe Mock

27. Comment Dubbo s'arrête-t-il correctement ?

Dubbo utilise ShutdownHook du JDK pour effectuer un arrêt progressif, donc si vous utilisez kill -9 PID et d'autres instructions d'arrêt forcé, l'arrêt progressif ne sera pas exécuté. Il ne sera exécuté que lorsque kill PID est utilisé.

28. Quelle est la différence entre Dubbo et Dubbox ?

Dubbox est un projet d'extension construit par Dangdang basé sur Dubbo après que Dubbo a arrêté de le maintenir. Il a ajouté des services qui peuvent être appelés par Restful, des composants open source mis à jour, etc.

29. Quelle est la différence entre Dubbo et Spring Cloud ?

Sur la base de divers éléments de l'architecture des microservices, voyons quel support fournissent Spring Cloud et Dubbo.

Utiliser Dubbo pour construire une architecture de microservices, c'est comme assembler un ordinateur. Nous avons un haut degré de liberté de choix dans chaque lien, mais le résultat final est probablement dû. à la mauvaise qualité d'une mémoire. Cela met toujours les gens mal à l'aise s'il s'éteint, mais si vous êtes un expert, ce ne sont pas des problèmes ; et Spring Cloud est comme une machine de marque. Sous l'intégration de Spring Source, cela a été le cas. de nombreux tests de compatibilité pour garantir une plus grande stabilité de la machine, mais si vous souhaitez utiliser autre chose que des composants non originaux, vous devez avoir une compréhension suffisante de ses bases.

30. Connaissez-vous d'autres frameworks distribués ?

D'autres incluent Spring's Spring Cloud, Facebook's Thrift, Twitter's Finagle, etc.

3 La différence entre Spring Cloud et Dubbo

Spring Cloud Config......

 

Dubbo

Spring Cloud

服务注册中心      

Zookeeper

Spring Cloud Netflix Eureka

服务调用方式

RPC          

REST API

服务监控

Dubbo-monitor

Spring Boot Admin

断路器

不完善

Spring Cloud Netflix Hystrix

服务网关

Spring Cloud Netflix Zuul

分布式配置

Spring Cloud Config

服务跟踪

Spring Cloud Sleuth

消息总线

Spring Cloud Bus

数据流

Spring Cloud Stream

批量任务

Spring Cloud Task

......

......

......

Dubbo

Spring Cloud

Centre d'enregistrement des services

Zookeeper

Spring Cloud Netflix Eureka
Méthode d'appel de service RPC      API REST
Surveillance des services Dubbo-monitor Administrateur Spring Boot
Disjoncteur Imparfait Spring Cloud Netflix Hystrix
Passerelle de services Aucun Printemps Cloud Netflix Zuul
Configuration distribuée Aucun
Suivi des services Aucun Spring Cloud Sleuth
Message Bus Aucun Spring Cloud Bus
Flux de données Aucun td> Spring Cloud Stream
Tâche par lots Aucun Tâche Spring Cloud
............
Le Plus grande différence : Spring Cloud abandonne la communication RPC de Dubbo et adopte la méthode REST basée sur HTTP. À proprement parler, les deux méthodes ont leurs propres avantages et inconvénients. Même si dans une certaine mesure, cette dernière sacrifie la performance des appels de service, elle évite également les problèmes causés par le RPC natif évoqués ci-dessus. De plus, REST est plus flexible que RPC. Le fournisseur de services et l'appelant s'appuient uniquement sur un contrat, et il n'y a pas de forte dépendance au niveau du code. Ceci est plus approprié dans un environnement de microservices qui met l'accent sur une évolution rapide. 4. Un autre framework de microservices SpringCloudVeuillez lire les numéros précédents : Principes des composants SpringCloud : Eureka, Feign, Ribbon, Hystrix, ZuulConnexes recommandations : Démarrer avec Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer