??
2. Welche Ebenen des gesamten Architekturdesigns werden verwendet?
4.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?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?
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.
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?
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?
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)
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
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?
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
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.
WerksmodusDer 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.
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: Zeigt eine Liste mit Details zur Dienstmethode an.
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
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.
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.
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.
Andere sind Spring's Spring Cloud, Facebook's Thrift, Twitter's Finagle usw.
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. | 4. Ein weiteres Microservice-Framework SpringCloudBitte lesen Sie die vorherigen Ausgaben: | SpringCloud-Komponentenprinzipien: Eureka, Feign, Ribbon, Hystrix, Zuul|
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!