1.Proxy持有一个Invoker对象,使用Invoker调用2.之后通过Cluster进行负载容错,失败重试3.调用Directory获取远程服务的Invoker列表4.负载均衡用户配置了路由规则,则根据路由规则过滤获取到的Invoker列表用户没有配置路由规则或配置路由后还有很多节点,则使用LoadBalance方法做负载均衡,选用一个可以调用的Invoker5.经过一个一个过滤器链,通常是处理上下文、限流、计数等。6.会使用Client做数据传输7.私有化协议的构造(Codec)8.进行序列化9.服务端收到这个Request请求,将其分配到ThreadPool中进行处理10.Server来处理这些Request11.根据请求查找对应的Exporter12.之后经过一个服务提供者端的过滤器链13.然后找到接口实现并真正的调用,将请求结果返回
dubbo
:单一长连接和 NIO 异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化;
rmi
:采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现 Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。 多个短连接,TCP 协议传输,同步传输,适用常规的远程服务调用和 rmi 互操作。在依赖低版本的 Common-Collections 包,java 序列化存在安全漏洞;
webservice
:基于 WebService 的远程调用协议,集成 CXF 实现,提供和原生 WebService 的互操作。多个短连接,基于 HTTP 传输,同步传输,适用系统集成和跨语言调用;http: 基于 Http 表单提交的远程调用协议,使用 Spring 的 HttpInvoke 实现。多个短连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消费者,需要给应用程序和浏览器 JS 调用; hessian: 集成 Hessian 服务,基于 HTTP 通讯,采用 Servlet 暴露服务,Dubbo 内嵌 Jetty 作为服务器时默认实现,提供与 Hession 服务互操作。多个短连接,同步 HTTP 传输,Hessian 序列化,传入参数较大,提供者大于消费者,提供者压力较大,可传文件;
memcache
: 基于 Memcached 实现的 RPC 协议 Redis: 基于 Redis 实现的 RPC 协议
通信方式
:Dubbo使用的是RPC通信,Spring Cloud使用的是HTTP RestFul方式
注册中心
:Dubbo使用Zookeeper(官方推荐),还有Redis、Multicast、Simple注册中心,但不推荐,
Spring Cloud使用的是Spring Cloud Netflix Eureka
监控
:Dubbo使用的是Dubbo-monitor,Spring Cloud使用的是Spring Boot admin
断路器
:Dubbo在断路器这方面还不完善,Spring Cloud使用的是Spring Cloud Netflix Hystrix
分布式配置、网关服务、服务跟踪、消息总线、批量任务等
JDK 标准的 SPI 会一次性加载所有的扩展实现,如果有的扩展很耗时,但也没用上,很浪费资源。所以只希望加载某个的实现,就不现实了
DUBBO SPI:
1、 对 Dubbo 进行扩展,不需要改动 Dubbo 的源码
2、 延迟加载,可以一次只加载自己想要加载的扩展实现。
3、 增加了对扩展点 IOC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。
4、 Dubbo 的扩展机制能很好的支持第三方 IoC 容器,默认支持 Spring Bean。
接口服务层(Service)
:该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现
配置层(Config)
:对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心
服务代理层(Proxy)
:服务接口透明代理,生成服务的客户端 Stub 和 服务端的 Skeleton,以 ServiceProxy 为中心,扩展接口为 ProxyFactory
服务注册层(Registry
):封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为 RegistryFactory、Registry、RegistryService
路由层(Cluster)
:封装多个提供者的路由和负载均衡,并桥接注册中心,以Invoker 为中心,扩展接口为 Cluster、Directory、Router和LoadBlancce
监控层(Monitor)
:RPC调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory、Monitor和MonitorService
远程调用层(Protocal)
:封装 RPC 调用,以 Invocation 和 Result 为中心,扩展接口为 Protocal、Invoker和Exporter
信息交换层(Exchange)
:封装请求响应模式,同步转异步。以 Request 和 Response 为中心,扩展接口为 Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer
网络传输层(Transport)
:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为Channel、Transporter、Client、Server和Codec
数据序列化层(Serialize)
:可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool
1、首先服务的提供者启动服务到注册中心注册,包括各种ip端口信息,Dubbo会同时注册该项目提供的远程调用的方法
2、服务的消费者(使用者)注册到注册中心,订阅发现
3、当有新的远程调用方法注册到注册中心时,注册中心会通知服务的消费者有哪些新的方法,如何调用
4、RPC调用:服务的调用者就无需知道ip和端口号,只需要服务名称就可以调用到服务提供者的方法
私信我:
面试题
,免费领取面试题合集
内容概要:最新
2023
年
Java
dubbo
后端
面试题
整理, 包含工作原理,序列化协议,序列化协议等等问题, 用简洁明了的语言,通俗易懂地阐述了
dubbo
相关面试的知识点。
适用人群:适合想了解或学习Spring的 IT 学生、开发人员、研究人员以及使用Spring进行开发的任何人。
能学到什么:常见Spring面试问题及在相关场景下如何处理和解决这些问题。
阅读建议:通过快速阅读全文并在过程中标记自己不熟悉的问题,定期复习来提高理解和记忆。通过反复学习和复习,达到消化吸收和内化的目的。
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题
【BAT必备】
dubbo
面试题