(동영상 튜토리얼 추천: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. 더보?
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. 다른 분산 프레임워크에 대해 알고 있나요?
서비타이제이션이 더욱 발전하면서 서비스 간의 호출과 종속성이 점점 더 복잡해지고 있습니다. 서비스 지향 아키텍처(SOA)가 탄생하고 이에 상응하는 일련의 서비스가 파생되었습니다. , 서비스 제공, 서비스 호출, 연결 처리, 통신 프로토콜, 직렬화 방법, 서비스 검색, 서비스 라우팅, 로그 출력 및 기타 동작을 캡슐화하는 서비스 프레임워크 등이 있습니다. 이러한 방식으로 분산 시스템을 위한 서비스 거버넌스 프레임워크가 등장했고 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. 기본적으로 어떤 통신 프레임워크가 사용됩니까?
4. 서비스콜이 차단되나요?
5. 일반적으로 어떤 등록센터를 이용하나요? 다른 옵션이 있나요?
6. 기본적으로 사용되는 직렬화 프레임워크는 무엇인가요?
7. 서비스 제공업체의 실패 추방 원칙은 무엇인가요?
8. 이전 버전에 영향을 주지 않고 어떻게 서비스를 온라인으로 전환할 수 있나요?
9. 너무 긴 서비스 호출 체인 문제를 해결하는 방법은 무엇입니까?
Point-to-Point로 직접 연결할 수도 있고, 구성만 수정해도 되고, Telnet을 통해 서비스에 직접 연결할 수도 있습니다.
(더 관련 있는 면접 질문 추천:java 면접 질문 및 답변)
dubbo:reference에서 mock="return null"을 설정할 수 있습니다. mock 값을 true로 변경할 수도 있으며, 그러면 인터페이스와 동일한 경로에 Mock 클래스가 구현됩니다. 명명 규칙은 "인터페이스 이름 + Mock" 접미사입니다. 그런 다음 Mock 클래스에서 자신만의 다운그레이드 로직을 구현하세요
해당 서비스를 등록 센터에서 찾을 수 없습니다. 서비스 구현 클래스에 @service 주석이 추가되어 있는지 확인하세요. 등록 센터에 연결할 수 없습니다. 구성 파일의 해당 테스트 IP가 올바른지 확인하세요. . 더보 모니터 구현 원리는?
1. MonitorFilter는 DubboMonitor에 데이터를 전송합니다.
2. DubboMonitor는 데이터를 집계하고(기본적으로 1분 단위의 통계를 집계함) ConcurrentMap
3. BlockingQueue 큐(큐 대문자)는 100000입니다.
4. SimpleMonitorService는 백그라운드 스레드(스레드 이름: DubboMonitorAsyncWriteLogThread)를 사용하여 큐의 데이터를 파일에 씁니다(스레드는 무한 루프 형식으로 씁니다)
5. SimpleMonitorService도 1을 포함하는 스레드를 사용합니다. 스레드의 스레드 풀(스레드 이름: DubboMonitorTimer)은 5분마다 파일에 있는 통계 데이터를 차트로 그립니다.
18. 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。
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: 서비스 방법 세부정보 목록을 표시합니다.
dubbo:reference에서 mock="return null"을 설정하려면. mock 값을 true로 변경할 수도 있으며, 그러면 인터페이스와 동일한 경로에 Mock 클래스가 구현됩니다. 명명 규칙은 "인터페이스 이름 + Mock" 접미사입니다. 그런 다음 Mock 클래스
Dubbo는 JDK의 ShutdownHook을 사용하여 정상 종료를 완료하므로, kill -9 PID 및 기타 강제 종료 명령을 사용하면 정상 종료는 kill PID를 사용할 때만 실행되지 않습니다.
Dubbox는 Dubbo가 유지 관리를 중단한 후 Dubbo를 기반으로 Dangdang에서 만든 확장 프로젝트로, Restful에서 호출할 수 있는 서비스를 추가하고 오픈 소스 구성 요소를 업데이트했습니다.
마이크로서비스 아키텍처의 다양한 요소를 바탕으로 Spring Cloud와 Dubbo가 어떤 지원을 제공하는지 살펴보겠습니다.
Dubbo를 사용하여 구축한 마이크로서비스 아키텍처는 마치 컴퓨터를 조립하는 것과 같습니다. 각 링크마다 선택의 자유도가 높지만, 메모리 품질이 좋지 않아 최종 결과가 나오지 않을 가능성이 매우 높습니다. , 항상 사람들을 불행하게 만듭니다. 그러나 전문가라면 문제가 되지 않으며 Spring Cloud는 Spring Source 통합 하에서 많은 호환성 테스트를 수행했습니다. 기계의 안정성이 더 높아야 하지만 원래 구성 요소가 아닌 다른 것을 사용하려는 경우 기본 사항을 잘 이해해야 합니다.
기타에는 봄의 봄구름, 페이스북의 절약, 트위터의 피네글 등이 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!