Heim  >  Artikel  >  Java  >  Fragen zum Java-Interview – Dubbo

Fragen zum Java-Interview – Dubbo

王林
王林nach vorne
2020-10-28 16:26:482603Durchsuche

??

2. Welche Ebenen des gesamten Architekturdesigns werden verwendet? Fragen zum Java-Interview – Dubbo

4.

5. Welches Registrierungszentrum wird im Allgemeinen verwendet? Gibt es noch andere Möglichkeiten?

6. Welches Serialisierungsframework wird standardmäßig verwendet?

7. Was ist das Prinzip hinter dem Ausfall-Kickout von Dienstleistern?

8. Wie kann der Dienst online gehen, ohne die alte Version zu beeinträchtigen?

9. Wie lässt sich das Problem einer zu langen Serviceanrufkette lösen?

10. Was sind die Kernkonfigurationen?

11. Welches Protokoll empfiehlt Dubbo?

12. Kann ich mich direkt mit einem bestimmten Dienst verbinden, wenn ich mehrere Registrierungen für denselben Dienst habe?

13. Ein Flussdiagramm für die Registrierung und Entdeckung von Diensten zeichnen?

14. Wie viele Lösungen gibt es für Dubbo-Clusterfehlertoleranz?

15. Der Dubbo-Dienst wurde herabgestuft.

16. Auf welche Probleme sind Sie bei der Verwendung von Dubbo gestoßen?

17. Was ist das Implementierungsprinzip von Dubbo Monitor?

18. Welche Designmuster verwendet Dubbo?

19. Wie wird die Dubbo-Konfigurationsdatei in Spring geladen?

20. Was ist der Unterschied zwischen Dubbo SPI und Java SPI?

21. Unterstützt Dubbo verteilte Transaktionen?

22. Kann Dubbo Ergebnisse zwischenspeichern?

23. Wie kann der Dienst mit alten Versionen kompatibel sein, wenn er online ist?

24. Auf welche Pakete muss sich Dubbo verlassen?

25. Was kann der Dubbo-Telnet-Befehl?

26. Unterstützt Dubbo ein Downgrade des Dienstes?

27. Wie fährt Dubbo ordnungsgemäß herunter?

28. Was ist der Unterschied zwischen Dubbo und Dubbox?

29. Was ist der Unterschied zwischen Dubbo und Spring Cloud?

30. Kennen Sie andere verteilte Frameworks?

3. Der Unterschied zwischen Spring Cloud und Dubbo

SpringCloud-Komponentenprinzip: Eureka, Feign, Ribbon, Hystrix, Zuul

1. Warum es verwenden? Dubbo?

2. Welche Ebenen des gesamten Architekturdesigns werden verwendet?

4.

5. Welches Registrierungszentrum wird im Allgemeinen verwendet? Gibt es noch andere Möglichkeiten?

6. Welches Serialisierungsframework wird standardmäßig verwendet?

7. Was ist das Prinzip hinter dem Ausfall-Kickout von Dienstleistern?

8. Wie kann der Dienst online gehen, ohne die alte Version zu beeinträchtigen?

9. Wie lässt sich das Problem einer zu langen Serviceanrufkette lösen?

10. Was sind die Kernkonfigurationen?

11. Welches Protokoll empfiehlt Dubbo?

12. Kann ich mich direkt mit einem bestimmten Dienst verbinden, wenn mehrere Registrierungen für denselben Dienst vorliegen?

13. Ein Flussdiagramm für die Registrierung und Entdeckung von Diensten zeichnen?

14. Wie viele Lösungen gibt es für Dubbo-Clusterfehlertoleranz?

15. Der Dubbo-Dienst wurde herabgestuft.

16. Auf welche Probleme sind Sie bei der Verwendung von Dubbo gestoßen?

17. Was ist das Implementierungsprinzip von Dubbo Monitor?

18. Welche Designmuster verwendet Dubbo?

19. Wie wird die Dubbo-Konfigurationsdatei in Spring geladen?

20. Was ist der Unterschied zwischen Dubbo SPI und Java SPI?

21. Unterstützt Dubbo verteilte Transaktionen?

22. Kann Dubbo Ergebnisse zwischenspeichern?

23. Wie kann der Dienst mit alten Versionen kompatibel sein, wenn er online ist?

24. Auf welche Pakete muss Dubbo angewiesen sein?

25. Was kann der Dubbo-Telnet-Befehl?

26. Unterstützt Dubbo ein Downgrade des Dienstes?

27. Wie fährt Dubbo ordnungsgemäß herunter?

28. Was ist der Unterschied zwischen Dubbo und Dubbox?

29. Was ist der Unterschied zwischen Dubbo und Spring Cloud?

30. Kennen Sie andere verteilte Frameworks?

2.Dubbo-Interview-Fragen-Antworten-Analyse

1 Warum Dubbo verwenden?

Mit der Weiterentwicklung der Servitisierung gibt es immer mehr Dienste und die Aufrufe und Abhängigkeiten zwischen Diensten werden immer komplexer. Es wurde eine Reihe entsprechender Dienste entwickelt B. ein Dienst-Framework, das Dienstbereitstellung, Dienstaufruf, Verbindungsverarbeitung, Kommunikationsprotokolle, Serialisierungsmethoden, Diensterkennung, Dienstrouting, Protokollausgabe und andere Verhaltensweisen kapselt. Auf diese Weise entstand das Service-Governance-Framework für verteilte Systeme und Dubbo war geboren.

2. Was sind die Schichten des gesamten Architekturdesigns von Dubbo?

Schnittstellendienstschicht (Dienst): Die entsprechende Schnittstelle und Implementierung richtet sich nach dem Geschäft des Anbieters und des Verbrauchers

Konfigurationsschicht (Config):

Externe Konfigurationsschnittstelle, zentriert auf ServiceConfig und ReferenceConfig

Dienst-Proxy-Schicht (Proxy):

Transparenter Proxy der Dienstschnittstelle, der den Client-Stub und das Server-Skelett des Dienstes generiert, zentriert auf ServiceProxy und dem Die erweiterte Schnittstelle ist ProxyFactory.

Dienstregistrierungsschicht (Registry):

Verkapselt die Registrierung und Erkennung von Dienstadressen, zentriert auf der Dienst-URL. Die erweiterten Schnittstellen sind RegistryFactory, Registry und RegistryService.

Routing-Schicht (Cluster):

Kapselt das Routing mehrerer Anbieter und den Lastausgleich und überbrückt das Registrierungszentrum mit Invoker als Zentrum. Die Erweiterungsschnittstelle ist Cluster, Verzeichnis, Router und LoadBlancce

Überwachungsschicht (Monitor):

RPC-Anrufnummer und Anrufzeit Überwachung, mit Statistik als Zentrum, die Erweiterungsschnittstelle ist MonitorFactory, Monitor und MonitorService

Fernaufrufschicht (Protokoll):

Kapselt RPC-Aufrufe, zentriert auf Aufruf und Ergebnis, und die erweiterten Schnittstellen sind Protokoll, Invoker und Exporter

Informationsaustauschschicht (Exchange):

Verkapselt den Anforderungsantwortmodus, synchron bis asynchron. Die erweiterten Schnittstellen konzentrieren sich auf Anfrage und Antwort und sind Exchanger, ExchangeChannel, ExchangeClient und ExchangeServer. Server und Codec

Datenserialisierungsschicht (Serialisieren):

Einige wiederverwendbare Tools, die erweiterten Schnittstellen sind Serialisierung, ObjectInput, ObjectOutput und ThreadPool3. Welches Kommunikationsframework wird standardmäßig verwendet?

Standardmäßig werden auch das Netty-Framework und Mina empfohlen. 4. Blockiert der Serviceanruf?

Der Standardwert ist blockierend und kann asynchron aufgerufen werden. Wenn kein Rückgabewert vorhanden ist, können Sie dies tun. Dubbo ist eine nicht blockierende Implementierung paralleler Aufrufe auf Basis von NIO. Der Client muss nicht mehrere Threads starten, um parallele Aufrufe an mehrere Remote-Dienste abzuschließen. Im Vergleich zu Multithreading ist der Overhead geringer und asynchrone Aufrufe geben einen Future zurück Objekt.

5. Welches Registrierungszentrum wird im Allgemeinen verwendet? Gibt es noch andere Möglichkeiten?

Es wird empfohlen, Zookeeper sowie die Registrierungszentren Redis, Multicast und Simple als Registrierungszentrum zu verwenden, diese werden jedoch nicht empfohlen.

6. Welches Serialisierungsframework wird standardmäßig verwendet?

Es wird empfohlen, die hessische Serialisierung sowie Duddo, FastJson und Javas eigene Serialisierung zu verwenden.

7. Was ist das Prinzip hinter dem Ausfall-Kickout von Dienstleistern?

Das auf zookeeper basierende temporäre Knotenprinzip wird außer Kraft gesetzt, wenn der Dienst ausfällt.

8. Wie kann der Dienst online gehen, ohne die alte Version zu beeinträchtigen?

Entwickelt unter Verwendung mehrerer Versionen und hat keinen Einfluss auf alte Versionen.

9. Wie lässt sich das Problem einer zu langen Serviceanrufkette lösen?

Kann mit Zipkin kombiniert werden, um die Ablaufverfolgung verteilter Dienste zu implementieren.

10. Was sind die Kernkonfigurationen?

11. Welches Protokoll empfiehlt Dubbo?

12. Kann ich mich direkt mit einem bestimmten Dienst verbinden, wenn ich mehrere Registrierungen für denselben Dienst habe?

Es kann eine direkte Punkt-zu-Punkt-Verbindung hergestellt werden, indem Sie einfach die Konfiguration ändern, oder Sie können sich direkt über Telnet mit einem Dienst verbinden.

(Empfehlungen für weitere verwandte Interviewfragen: Java-Interviewfragen und -antworten)

13 Ein Flussdiagramm für die Registrierung und Entdeckung von Diensten zeichnen?

14. Wie viele Lösungen gibt es für Dubbo-Clusterfehlertoleranz?

15. Der Dubbo-Dienst wurde herabgestuft. Wie kann ich es nach einem Fehler erneut versuchen?

Sie können in dubbo:reference „mock="return null"“ festlegen. Der Wert von „Mock“ kann auch in „True“ geändert werden. Anschließend wird eine Mock-Klasse im selben Pfad wie die Schnittstelle implementiert. Die Benennungsregel lautet „Schnittstellenname + Mock“. Implementieren Sie dann Ihre eigene Downgrade-Logik in der Mock-Klasse

16 Auf welche Probleme sind Sie bei der Verwendung von Dubbo gestoßen?

Der entsprechende Dienst kann im Registrierungscenter nicht gefunden werden. Überprüfen Sie, ob der Service-Implementierungsklasse die Annotation „Verbindung zum Registrierungscenter nicht möglich“ hinzugefügt wurde. Überprüfen Sie, ob die entsprechende Test-IP in der Konfigurationsdatei korrekt ist . Dubbo Monitor-Implementierungsprinzip?

Die Verbraucherseite durchläuft zunächst die Filterkette, bevor sie einen Anruf tätigt. Die Anbieterseite durchläuft beim Empfang der Anfrage ebenfalls zuerst die Filterkette und führt dann die eigentliche Geschäftslogikverarbeitung durch. Standardmäßig gibt es sowohl in der Consumer- als auch in der Provider-Filterkette einen Monitorfilter.

1. MonitorFilter sendet Daten an DubboMonitor

2. DubboMonitor aggregiert die Daten (Standardmäßig werden Statistiken in 1 Minute aggregiert) und speichert sie vorübergehend in ConcurrentMap Name: Der Thread-Pool von DubboMonitorSendTimer ruft SimpleMonitorService auf, um die statistischen Daten in der StatisticsMap jede Minute zu durchlaufen und zu senden. Bei jedem Senden wird die AtomicReference der aktuellen Statistik zurückgesetzt BlockingQueue-Warteschlange (Warteschlange großgeschrieben) ist 100000)

4. SimpleMonitorService verwendet einen Hintergrundthread (Threadname: DubboMonitorAsyncWriteLogThread), um die Daten in der Warteschlange in die Datei zu schreiben (der Thread schreibt in Form einer Endlosschleife)

5. SimpleMonitorService verwendet außerdem einen Thread mit 1. Der Thread-Pool des Threads (Threadname: DubboMonitorTimer) zeichnet alle 5 Minuten die statistischen Daten in der Datei in ein Diagramm.

18 Welche Entwurfsmuster verwendet Dubbo?

Das Dubbo-Framework verwendet im Initialisierungs- und Kommunikationsprozess verschiedene Entwurfsmuster, mit denen Funktionen wie Klassenladen und Berechtigungssteuerung flexibel gesteuert werden können.

Werksmodus

Der Anbieter ruft beim Exportieren eines Dienstes die Exportmethode von ServiceConfig auf. In ServiceConfig gibt es ein Feld:

private static final Protocol protocol =
ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi
on();
Dubbo hat viel von dieser Art von Code. Dies ist ebenfalls ein Factory-Muster, die Implementierungsklasse wird jedoch mithilfe des JDKSPI-Mechanismus abgerufen. Der Vorteil dieser Implementierung besteht darin, dass sie hoch skalierbar ist. Wenn Sie die Implementierung erweitern möchten, müssen Sie nur eine Datei zum Klassenpfad hinzufügen und es gibt keinen Codeeingriff. Darüber hinaus ist es wie bei der oben genannten adaptiven Implementierung möglich, dynamisch zu entscheiden, welche Implementierung beim Aufruf aufgerufen werden soll. Da diese Implementierung jedoch einen dynamischen Proxy verwendet, wird das Code-Debuggen schwieriger und es ist erforderlich, die tatsächlich aufgerufene Implementierung zu analysieren Klasse.

Dekorationsmodus

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: Zeigt eine Liste mit Details zur Dienstmethode an.

26. Unterstützt Dubbo ein Downgrade des Dienstes?

So setzen Sie „mock="return null"“ in dubbo:reference. Der Wert von „Mock“ kann auch in „True“ geändert werden, und dann wird eine Mock-Klasse im gleichen Pfad wie die Schnittstelle implementiert. Die Benennungsregel lautet „Schnittstellenname + Mock“. Implementieren Sie dann Ihre eigene Downgrade-Logik in der Mock-Klasse

27. Wie wird Dubbo ordnungsgemäß heruntergefahren?

Dubbo verwendet den ShutdownHook des JDK, um das ordnungsgemäße Herunterfahren abzuschließen. Wenn Sie also kill -9 PID und andere Anweisungen zum erzwungenen Herunterfahren verwenden, wird das ordnungsgemäße Herunterfahren nicht ausgeführt. Es wird nur ausgeführt, wenn die Kill-PID verwendet wird.

28. Was ist der Unterschied zwischen Dubbo und Dubbox?

Dubbox ist ein Erweiterungsprojekt von Dangdang, das auf Dubbo basiert, nachdem Dubbo die Wartung eingestellt hat. Es enthält zusätzliche Dienste, die von Restful aufgerufen werden können, aktualisierte Open-Source-Komponenten usw.

29. Was ist der Unterschied zwischen Dubbo und Spring Cloud?

Anhand verschiedener Elemente der Microservice-Architektur wollen wir sehen, welche Unterstützung Spring Cloud und Dubbo bieten.

Die mit Dubbo erstellte Microservice-Architektur ähnelt dem Zusammenbau eines Computers. Wir haben bei jedem Link ein hohes Maß an Wahlfreiheit, aber das Endergebnis wird aufgrund der schlechten Speicherqualität höchstwahrscheinlich nicht aufleuchten , was die Leute immer unglücklich macht, aber wenn Sie ein Experte sind, dann ist Spring Cloud wie eine Markenmaschine, die viele Kompatibilitätstests durchgeführt hat Stellen Sie sicher, dass die Maschine eine höhere Stabilität aufweist. Wenn Sie jedoch etwas anderes als Originalkomponenten verwenden möchten, müssen Sie die Grundlagen gut verstehen.

30. Kennen Sie andere verteilte Frameworks?

Andere sind Spring's Spring Cloud, Facebook's Thrift, Twitter's Finagle usw.

3 Der Unterschied zwischen Spring Cloud und Dubbo

Spring Cloud Stream Spring Cloud-Aufgabe…4. Ein weiteres Microservice-Framework SpringCloudSpringCloud-Komponentenprinzipien: Eureka, Feign, Ribbon, Hystrix, ZuulVerwandte Empfehlungen:

Dubbo

Spring Cloud

Service Registration Center

Zookeeper

Spring Cloud Netflix Eureka

Service-Aufrufmethode

RPC    

REST-API

Serviceüberwachung

Dubbo - Monitor

Spring Boot Admin

Leistungsschalter

Unvollkommen

Spring Cloud Netflix Hystrix

Service Gateway

Keine

Spring Cloud Netflix Azure „Spring Cloud Sleuth“

Stapelaufgaben

Keine

Der größte Unterschied: Spring Cloud hat Dubbo aufgegeben. Die RPC-Kommunikation verwendet das REST-Methode basierend auf HTTP. Streng genommen haben beide Methoden ihre eigenen Vor- und Nachteile. Letzteres beeinträchtigt zwar in gewissem Maße die Leistung von Serviceaufrufen, vermeidet aber auch die oben erwähnten Probleme, die durch natives RPC verursacht werden. Darüber hinaus ist REST flexibler als RPC. Der Dienstanbieter und der Anrufer verlassen sich nur auf einen Vertrag, und es besteht keine starke Abhängigkeit auf Codeebene. Dies ist in einer Microservice-Umgebung angemessener, in der eine schnelle Entwicklung im Vordergrund steht.

Bitte lesen Sie die vorherigen Ausgaben:

Erste Schritte mit Java

Das obige ist der detaillierte Inhalt vonFragen zum Java-Interview – Dubbo. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen