>Java >Java인터뷰 질문들 >Java 면접 질문 - Dubbo

Java 면접 질문 - Dubbo

王林
王林앞으로
2020-10-28 16:26:482659검색

Java 면접 질문 - Dubbo

목차

(동영상 튜토리얼 추천: java 강좌)

1.Dubbo 면접 질문

2.Dubbo 면접 질문 답변 분석

1. 왜 Dubbo를 사용하나요?

2. Dubbo의 전체 아키텍처 디자인에는 어떤 레이어가 있나요?

3. 기본적으로 사용되는 통신 프레임워크는 무엇인가요?

4.

5. 일반적으로 어떤 등록센터를 이용하나요? 다른 옵션이 있나요?

6. 기본적으로 사용되는 직렬화 프레임워크는 무엇인가요?

7. 서비스 제공업체의 실패 추방 원칙은 무엇인가요?

8. 이전 버전에 영향을 주지 않고 어떻게 서비스를 온라인으로 전환할 수 있나요?

9. 너무 긴 서비스 호출 체인 문제를 해결하는 방법은 무엇입니까?

10. 핵심 구성은 무엇인가요?

11. 더보는 어떤 프로토콜을 권장하나요?

12. 동일한 서비스에 여러 번 등록된 경우 특정 서비스에 직접 연결할 수 있나요?

13. 서비스 등록 및 검색 흐름도를 그리시겠습니까?

14. Dubbo 클러스터 내결함성을 위한 솔루션은 몇 개입니까?

15. 더보 서비스가 다운그레이드되었습니다. 실패 후 재시도하는 방법은 무엇인가요?

16. Dubbo를 사용하면서 어떤 문제가 발생했나요?

17. 더보 모니터의 구현 원리는 무엇인가요?

18. 더보는 어떤 디자인 패턴을 사용하나요?

19. Dubbo 구성 파일은 어떻게 Spring에 로드되나요?

20. 더보 SPI와 자바 SPI의 차이점은 무엇인가요?

21. Dubbo는 분산 트랜잭션을 지원하나요?

22. Dubbo는 결과를 캐시할 수 있나요?

23. 온라인 상태에서 서비스가 이전 버전과 어떻게 호환되나요?

24. Dubbo가 의존해야 하는 패키지는 무엇인가요?

25. Dubbo telnet 명령은 무엇을 할 수 있나요?

26. 더보는 서비스를 다운그레이드하나요?

27. Dubbo는 어떻게 정상적으로 종료되나요?

28. 더보(Dubbo)와 더보박스(Dubbox)의 차이점은 무엇인가요?

29. 더보와 스프링클라우드의 차이점은 무엇인가요?

30. 다른 분산 프레임워크에 대해 알고 있나요?

3. Spring Cloud와 Dubbo의 차이점

4. 또 다른 마이크로서비스 프레임워크 SpringCloud

SpringCloud 구성 요소 원리: Eureka, Feign, Ribbon, Hystrix, Zuul


1.Dubbo 인터뷰 질문

1. 더보?

2. Dubbo의 전체 아키텍처 디자인에는 어떤 레이어가 있나요?

3. 기본적으로 사용되는 통신 프레임워크는 무엇인가요?

4.

5. 일반적으로 어떤 등록센터를 이용하나요? 다른 옵션이 있나요?

6. 기본적으로 사용되는 직렬화 프레임워크는 무엇인가요?

7. 서비스 제공업체의 실패 추방 원칙은 무엇인가요?

8. 이전 버전에 영향을 주지 않고 어떻게 서비스를 온라인으로 전환할 수 있나요?

9. 너무 긴 서비스 호출 체인 문제를 해결하는 방법은 무엇입니까?

10. 핵심 구성은 무엇인가요?

11. 더보는 어떤 프로토콜을 권장하나요?

12. 동일한 서비스에 여러 번 등록된 경우 특정 서비스에 직접 연결할 수 있나요?

13. 서비스 등록 및 검색 흐름도를 그리시겠습니까?

14. Dubbo 클러스터 내결함성을 위한 솔루션은 몇 개입니까?

15. 더보 서비스가 다운그레이드되었습니다. 실패 후 재시도하는 방법은 무엇인가요?

16. Dubbo를 사용하면서 어떤 문제가 발생했나요?

17. 더보 모니터의 구현 원리는 무엇인가요?

18. 더보는 어떤 디자인 패턴을 사용하나요?

19. Dubbo 구성 파일은 어떻게 Spring에 로드되나요?

20. 더보 SPI와 자바 SPI의 차이점은 무엇인가요?

21. Dubbo는 분산 트랜잭션을 지원하나요?

22. Dubbo는 결과를 캐시할 수 있나요?

23. 온라인 상태에서 서비스가 이전 버전과 어떻게 호환되나요?

24. Dubbo가 의존해야 하는 패키지는 무엇인가요?

25. Dubbo telnet 명령은 무엇을 할 수 있나요?

26. 더보는 서비스를 다운그레이드하나요?

27. Dubbo는 어떻게 정상적으로 종료되나요?

28. 더보(Dubbo)와 더보박스(Dubbox)의 차이점은 무엇인가요?

29. 더보와 스프링클라우드의 차이점은 무엇인가요?

30. 다른 분산 프레임워크에 대해 알고 있나요?

2.더보 면접 질문 답변 분석

1. 왜 더보를 사용하나요?

서비타이제이션이 더욱 발전하면서 서비스 간의 호출과 종속성이 점점 더 복잡해지고 있습니다. 서비스 지향 아키텍처(SOA)가 탄생하고 이에 상응하는 일련의 서비스가 파생되었습니다. , 서비스 제공, 서비스 호출, 연결 처리, 통신 프로토콜, 직렬화 방법, 서비스 검색, 서비스 라우팅, 로그 출력 및 기타 동작을 캡슐화하는 서비스 프레임워크 등이 있습니다. 이러한 방식으로 분산 시스템을 위한 서비스 거버넌스 프레임워크가 등장했고 Dubbo가 탄생했습니다.

2. Dubbo의 전체 아키텍처 디자인에는 어떤 레이어가 있나요?

인터페이스 서비스 레이어(서비스): 이 레이어는 비즈니스 로직과 관련되어 있으며 해당 인터페이스와 구현은 공급자와 소비자의 비즈니스에 따라 설계되었습니다.

구성 계층(Config):

ServiceConfig 및 ReferenceConfig를 중심으로 하는 외부 구성 인터페이스

서비스 프록시 계층(프록시):

서비스 인터페이스 투명 프록시, 클라이언트 스텁 및 서버 생성 ServiceProxy를 중심으로 하는 서비스의 뼈대 확장 인터페이스는 ProxyFactory

서비스 등록 계층(레지스트리):

서비스 URL을 중심으로 서비스 주소의 등록 및 검색을 캡슐화하며 확장 인터페이스는 RegistryFactory, Registry 및 RegistryService

라우팅 계층(클러스터)입니다.

여러 공급자의 라우팅을 캡슐화하고 로드 밸런싱을 수행하며 등록 센터를 연결하고 Invoker를 중심으로 확장 인터페이스는 클러스터, 디렉터리, 라우터 및 LoadBlancce입니다

모니터링 계층(모니터):

RPC 호출 번호 및 호출 시간 모니터링, 통계를 중심으로 확장 인터페이스는 MonitorFactory, Monitor 및 MonitorService

원격 호출 계층(Protocal):

Invocation 및 Result를 중심으로 RPC 호출을 캡슐화하고 확장 인터페이스는 Protocol, Invoker 및 Importer

정보 교환 계층(Exchange):

요청 응답 모드를 동기식에서 비동기식으로 캡슐화합니다. 요청 및 응답을 중심으로 확장된 인터페이스는 Exchanger, ExchangeChannel, ExchangeClient 및 ExchangeServer입니다

네트워크 전송 계층(전송):

Abstract mina 및 netty는 메시지를 중심으로 하는 통합 인터페이스이며 확장 인터페이스는 Channel, Transporter, Client, 서버 및 코덱

데이터 직렬화 계층(직렬화):

일부 재사용 가능한 도구, 확장 인터페이스는 Serialization, ObjectInput, ObjectOutput 및 ThreadPool3. 기본적으로 어떤 통신 프레임워크가 사용됩니까?

netty 프레임워크와 mina도 기본적으로 권장됩니다.

4. 서비스콜이 차단되나요?

기본값은 차단이며 비동기적으로 호출할 수 있습니다. 반환 값이 없으면 이렇게 할 수 있습니다. Dubbo는 NIO 기반 병렬 호출의 비차단 구현입니다. 클라이언트는 다중 원격 서비스에 대한 병렬 호출을 완료하기 위해 다중 스레드를 시작할 필요가 없으며, 오버헤드가 더 적고 비동기 호출이 Future를 반환합니다. 물체.

5. 일반적으로 어떤 등록센터를 이용하나요? 다른 옵션이 있나요?

등록 센터로는 Zookeeper를 사용하는 것이 좋으며 Redis, Multicast, Simple 등록 센터를 사용하는 것이 좋지만 권장하지는 않습니다.

6. 기본적으로 사용되는 직렬화 프레임워크는 무엇인가요?

Hessian 직렬화는 물론 Duddo, FastJson, Java 자체 직렬화를 사용하는 것이 좋습니다.

7. 서비스 제공업체의 실패 추방 원칙은 무엇인가요?

주키퍼 기반의 임시 노드 원칙은 서비스 장애 시 쫓겨납니다.

8. 이전 버전에 영향을 주지 않고 어떻게 서비스를 온라인으로 전환할 수 있나요?

여러 버전을 사용하여 개발되었으며 이전 버전에는 영향을 미치지 않습니다.

9. 너무 긴 서비스 호출 체인 문제를 해결하는 방법은 무엇입니까?

zipkin과 결합하여 분산 서비스 추적을 구현할 수 있습니다.

10. 핵심 구성은 무엇인가요?

11. Dubbo에서는 어떤 프로토콜을 권장하나요?

12. 동일한 서비스에 여러 번 등록한 경우 특정 서비스에 직접 연결할 수 있나요?

Point-to-Point로 직접 연결할 수도 있고, 구성만 수정해도 되고, Telnet을 통해 서비스에 직접 연결할 수도 있습니다.

(더 관련 있는 면접 질문 추천: java 면접 질문 및 답변)

13. 서비스 등록 및 검색 흐름도를 그려보세요.

14. Dubbo 클러스터 내결함성을 위한 솔루션은 몇 개 있나요?

15. Dubbo 서비스가 다운그레이드되었습니다. 실패 후 어떻게 재시도하나요?

dubbo:reference에서 mock="return null"을 설정할 수 있습니다. mock 값을 true로 변경할 수도 있으며, 그러면 인터페이스와 동일한 경로에 Mock 클래스가 구현됩니다. 명명 규칙은 "인터페이스 이름 + Mock" 접미사입니다. 그런 다음 Mock 클래스에서 자신만의 다운그레이드 로직을 구현하세요

16. Dubbo를 사용할 때 어떤 문제가 발생했나요?

해당 서비스를 등록 센터에서 찾을 수 없습니다. 서비스 구현 클래스에 @service 주석이 추가되어 있는지 확인하세요. 등록 센터에 연결할 수 없습니다. 구성 파일의 해당 테스트 IP가 올바른지 확인하세요. . 더보 모니터 구현 원리는?

소비자 측에서는 호출을 하기 전에 먼저 필터 체인을 거치고, 제공자 측에서도 요청을 받을 때 먼저 필터 체인을 거친 후 실제 비즈니스 로직 처리를 수행합니다. 기본적으로 소비자 및 공급자 필터 체인 모두에 Monitorfilter가 있습니다.

1. MonitorFilter는 DubboMonitor에 데이터를 전송합니다.

2. DubboMonitor는 데이터를 집계하고(기본적으로 1분 단위의 통계를 집계함) ConcurrentMap 이름: DubboMonitorSendTimer의 스레드 풀은 SimpleMonitorService를 호출하여 1분마다 통계 데이터를 순회하고 전송될 때마다 현재 통계의 AtomicReference가 재설정됩니다.

3. BlockingQueue 큐(큐 대문자)는 100000입니다.

4. SimpleMonitorService는 백그라운드 스레드(스레드 이름: DubboMonitorAsyncWriteLogThread)를 사용하여 큐의 데이터를 파일에 씁니다(스레드는 무한 루프 형식으로 씁니다)

5. SimpleMonitorService도 1을 포함하는 스레드를 사용합니다. 스레드의 스레드 풀(스레드 이름: DubboMonitorTimer)은 5분마다 파일에 있는 통계 데이터를 차트로 그립니다.

18. Dubbo는 어떤 디자인 패턴을 사용하나요?

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。

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: 서비스 방법 세부정보 목록을 표시합니다.

26. 더보는 서비스를 다운그레이드하나요?

dubbo:reference에서 mock="return null"을 설정하려면. mock 값을 true로 변경할 수도 있으며, 그러면 인터페이스와 동일한 경로에 Mock 클래스가 구현됩니다. 명명 규칙은 "인터페이스 이름 + Mock" 접미사입니다. 그런 다음 Mock 클래스

27에서 자신만의 다운그레이드 논리를 구현하세요. Dubbo는 어떻게 정상적으로 종료되나요?

Dubbo는 JDK의 ShutdownHook을 사용하여 정상 종료를 완료하므로, kill -9 PID 및 기타 강제 종료 명령을 사용하면 정상 종료는 kill PID를 사용할 때만 실행되지 않습니다.

28. 더보(Dubbo)와 더보박스(Dubbox)의 차이점은 무엇인가요?

Dubbox는 Dubbo가 유지 관리를 중단한 후 Dubbo를 기반으로 Dangdang에서 만든 확장 프로젝트로, Restful에서 호출할 수 있는 서비스를 추가하고 오픈 소스 구성 요소를 업데이트했습니다.

29. 더보와 스프링클라우드의 차이점은 무엇인가요?

마이크로서비스 아키텍처의 다양한 요소를 바탕으로 Spring Cloud와 Dubbo가 어떤 지원을 제공하는지 살펴보겠습니다.

Dubbo를 사용하여 구축한 마이크로서비스 아키텍처는 마치 컴퓨터를 조립하는 것과 같습니다. 각 링크마다 선택의 자유도가 높지만, 메모리 품질이 좋지 않아 최종 결과가 나오지 않을 가능성이 매우 높습니다. , 항상 사람들을 불행하게 만듭니다. 그러나 전문가라면 문제가 되지 않으며 Spring Cloud는 Spring Source 통합 하에서 많은 호환성 테스트를 수행했습니다. 기계의 안정성이 더 높아야 하지만 원래 구성 요소가 아닌 다른 것을 사용하려는 경우 기본 사항을 잘 이해해야 합니다.

30. 다른 분산 프레임워크에 대해 알고 있나요?

기타에는 봄의 봄구름, 페이스북의 절약, 트위터의 피네글 등이 있습니다.

3. Spring Cloud와 Dubbo의 차이점

4. 또 다른 마이크로서비스 프레임워크 SpringCloud

Dubbo

Spring Cloud

서비스 등록센터

Zookeeper

Spring Cloud Netflix Eureka

서비스 호출 방법

RPC    

REST API

서비스 모니터링

Dubbo - monitor

Spring Boot Admin

회로 차단기

Imperfect

Spring Cloud Netflix Hystrix

Service Gateway

없음

스프링 클라우드 넷플릭스 Azure

Spring Cloud Sleuth

메시지 버스

None

Spring Cloud Bus

Data Stream

None

봄구름 스트림

일괄 작업

없음

스프링 클라우드 작업

… 가장 큰 차이점은 Spring Cloud가 Dubbo를 포기했다는 것입니다. RPC 통신은 HTTP 기반의 REST 방식입니다. 엄밀히 말하면 두 방법 모두 장단점이 있습니다. 후자는 서비스 호출 성능을 어느 정도 희생하지만 위에서 언급한 기본 RPC로 인해 발생하는 문제도 방지합니다. 게다가 REST는 RPC보다 유연하며, 서비스 제공자와 호출자는 계약에만 의존하며, 코드 수준에서는 강한 의존성이 없습니다. 이는 빠른 진화를 강조하는 마이크로서비스 환경에 더 적합합니다.
이전 문제를 읽어보세요.

SpringCloud 구성 요소 원칙: Eureka, Feign, Ribbon, Hystrix, Zuul
관련 권장 사항:

Java 시작하기

위 내용은 Java 면접 질문 - Dubbo의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제