Dubbo介绍
概要
Dubbo是一个高性能的Java RPC框架。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案
一、面向接口的远程方法调用(RPC)
1. 什么是RPC?
RPC是远程过程调用(Remote Procedure Call)。 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制,让使用者不必显式的区分本地调用和远程调用。
2. RPC框架的特点
1) RPC框架一般使用长链接,不必每次通信都要3次握手,减少网络开销。
2) RPC框架一般都有注册中心,有丰富的监控管理。发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作协议私密,安全性较高
3) RPC 协议更简单内容更小,效率更高,服务化架构、服务化治理,RPC框架是一个强力的支撑。
3. Dubbo提供的RPC
Dubbo提供高性能的基于代理的远程调用能力,服务以接口为粒度,屏蔽了远程调用底层细节。
在 Dubbo 的服务架构中,服务提供方(Provider)和服务消费方(Consumer)通过接口来约定服务调用的逻辑,而不依赖于具体的实现。也就是说,Provider 提供一个接口,Consumer 仅需引用这个接口便可以调用远程服务,而无需了解具体的实现类。这种方式带来了两个好处:
1)解耦性
Provider 和 Consumer 通过接口进行调用,不直接耦合在一起,即使服务实现发生改变,Consumer 端也无需做任何修改。
2)易于扩展
服务提供方可以灵活地扩展或更换服务实现,只需确保接口不变,服务调用就不会受到影响。
4. Dubbo默认使用什么协议
Dubbo缺省协议是dubbo协议,采用的是单一长连接和NIO异步通信的方式,适用于小数据量以及大并发的服务调用,消费者远大于提供者,Dubbo的传输层协议TCP,异步的,使用Hessian序列化
二、服务注册和发现
注册中心
Dubbo 自身并没有实现独立的注册中心,但它支持多种主流的注册中心(如 Zookeeper、Nacos、Redis 等),从而使服务治理更灵活和适应不同的分布式环境。其中Zookeeper是Dubbo默认的注册中心。
服务提供者向 Zookeeper 注册服务,服务消费者向 Zookeeper 订阅服务;
服务消费者通过 Zookeeper 获取服务提供者的地址信息,然后调用服务提供者的服务
三、Dubbo的负载均衡策略
Dubbo内置多种负载均衡策略:
1. 轮询
2. 随机
3. 最小活跃调用
4. 一致性哈希
但是,这些负载均衡策略并不一定适用于所有的场景,因此Dubbo也允许我们自定义负载均衡策略。
自定义负载均衡策略需要实现LoadBalance接口,然后通过SPI机制进行扩展。自定义负载均衡策略可以根据不同场景的需求,实现不同的算法和逻辑,从而更好地满足业务需求。
四、Dubbo架构
1. 十层架构
Dubbo 的十层架构是对整个框架的详细分层,将 Dubbo 的各个模块和功能进行清晰的职责划分。每一层都独立运作,相互协作,主要用于详细描述 Dubbo 框架内部的技术实现。具体的十层包括:
1)服务接口层(Service):定义服务接口,供 Consumer 和 Provider 双方使用。
2)配置层(Config):负责配置解析,将服务、注册中心、协议、接口等进行配置。
3)服务代理层(Proxy):对服务接口生成代理类,使得服务消费端可以透明调用。
4)服务注册层(Registry):负责服务的注册与发现,Consumer 从注册中心获取 Provider 的地址。
5)集群层(Cluster):提供负载均衡、容错、路由等功能,实现集群调用的高可用性。
6)监控层(Monitor):记录服务调用次数和调用时间等数据,用于监控服务性能和健康状况。
7)远程调用层(Protocol):定义调用协议(如 Dubbo、HTTP、REST),负责序列化、反序列化和数据传输。
8)信息交换层(Exchange):负责信息的请求和响应,包括异步调用和事件通知机制。
9)网络传输层(Transport):底层的网络通信支持,负责基于 TCP 或其他协议的网络传输。
10)数据序列化层(Serialize):将数据序列化成字节流,以便通过网络传输。
2. 三层架构
从Dubbo 在服务治理和配置方面的模块划分,可以分为三层架构。如下图:
Dubbo的三层架构包括:
1)接口层
接口层是Dubbo的核心,它定义了服务提供者和服务消费者之间的通信接口。在Dubbo中,接口默认使用Java接口实现,具有很强的可扩展性。
2)配置层
配置层的作用是通过配置文件或代码来配置Dubbo的各种参数,包括连接参数、超时时间、重试次数等等。Dubbo支持多种配置方式,包括XML配置、注解配置和属性配置。
3)基础设施层
基础设施层是Dubbo的底层架构,包括了Dubbo的RPC框架、网络通信、序列化和反序列化等实现细节。Dubbo的基础设施层具有较高的性能和可定制性。
参考链接:
https://juejin.cn/post/7264829808008511499
https://juejin.cn/post/7298682235975548968