(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.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 ?
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é.
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
Le framework netty et mina sont également recommandés par défaut.
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.
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.
Il est recommandé d'utiliser la sérialisation hessienne, ainsi que la sérialisation Duddo, FastJson et Java.
Une panne de service élimine le principe du nœud temporaire basé sur zookeeper.
Utiliser le développement multiversion sans affecter les anciennes versions.
Peut être combiné avec zipkin pour implémenter le traçage de services distribués.
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)
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
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.
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
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
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。
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 : affiche une liste des détails de la méthode de 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
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é.
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.
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.
D'autres incluent Spring's Spring Cloud, Facebook's Thrift, Twitter's Finagle, etc.
|
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 | Spring Cloud Config|||||||||||||||||||||||||||||||||||||
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 | ||||||||||||||||||||||||||||||||||||
...... | ............ |
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!