Dubbo介绍

Dubbo介绍

   概要

   Dubbo由阿里巴巴最早于 2011 年发布,是一款高性能的 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协议

   Dubbo 协议基于 Netty 传输,采用单一长连接和 NIO 异步通信方式,适用于小数据量和高并发场景,尤其适合消费者数量远大于提供者的调用需求。该协议使用 TCP 作为传输层协议,具备异步特性,并默认使用高效的 Hessian 序列化方式,能够显著提升序列化与反序列化效率,是 Dubbo 在高性能分布式系统中的推荐协议。

   二、服务注册和发现

   1. 服务提供者和服务消费者

   Dubbo的服务提供者是指提供服务的主体,通常会暴露自己的服务接口,并通过某种协议提供服务。而服务消费者是使用服务的主体,通常会引用提供者的服务接口,并通过某种协议调用服务。如下图:

   服务提供者向 Zookeeper 注册服务,服务消费者向 Zookeeper 订阅服务;

   服务消费者通过 Zookeeper 获取服务提供者的地址信息,然后调用服务提供者的服务

   2. 注册中心

   Dubbo 自身并没有实现独立的注册中心,但它支持多种主流的注册中心(如 Zookeeper、Nacos、Redis 等),从而使服务治理更灵活和适应不同的分布式环境。其中Zookeeper是Dubbo默认的注册中心。

   如下图:

   注册中心: 提供服务的注册和发现功能,即实现服务的治理。

   服务提供者: Service Provider。 它将自身服务注册到注册中心当中,以便"服务消费者"能够通过服务器端提供的服务清单(注册服务列表)来调用它。

   服务消费者:  Service Consumer。服务消费者。它从注册中心获取"已注册的服务列表",从而消费服务。

   三、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的基础设施层具有较高的性能和可定制性。

   五、Dubbo的RPC与OpenFeign的区别

   Dubbo 的 RPC 和 OpenFeign 都可以用于服务间通信,但它们的设计目标、工作原理以及使用场景有较大的差异。以下是两者的主要区别:

   1. 定位与协议

   Dubbo:是高性能 RPC 框架,使用 Dubbo 二进制协议,相比 HTTP 协议更高效。支持 TCP 传输,更适合高并发和低延迟场景。

   OpenFeign:基于 HTTP 协议的声明式 REST 客户端,使用 JSON 格式,适合 REST API 调用。

   2. 调用方式

   Dubbo:面向接口调用,Consumer 通过动态代理调用远程服务,类似调用本地方法,方法透明度高。

   OpenFeign:通过注解声明 HTTP 请求,更显式地配置 API 路径和请求参数,符合 RESTful 风格。

   3. 性能与序列化

   Dubbo:使用二进制序列化,效率高,占用带宽少,适合数据密集、实时性要求高的内部调用。

   OpenFeign:使用 JSON 序列化,易于调试,适合跨系统或对性能要求不高的场景。

   4. 生态集成

   Dubbo:在 Spring Cloud Alibaba 生态中集成,适合构建高性能的分布式系统。

   OpenFeign:Spring Cloud 原生支持,与 Eureka、Ribbon、Hystrix 等组件联动性好,使用便捷。

   六、Dubbo和Spring Cloud的区别

   1.  架构定位 

   Dubbo:专注于高性能的 RPC 调用和服务治理,主要关注分布式服务间的通信和管理。

   Spring Cloud:微服务全家桶,涵盖服务发现、配置管理、网关、监控等多个微服务组件,提供完整的微服务解决方案。

   2. 协议和调用模式

   Dubbo:采用 TCP 和自定义协议,支持多种序列化方式,性能更优。

   Spring Cloud:默认基于 HTTP/REST 通信,遵循 RESTful 风格,更适合对外服务。

   3. 适用场景

   Dubbo:适合企业内部高并发、低延迟的服务调用,常用于电商、金融等高性能系统。

   Spring Cloud:适合 REST 风格的微服务架构,广泛应用于中小型分布式系统,对接外部系统方便。

   4. 生态扩展

   Dubbo:与 Spring Cloud Alibaba 集成后,可以使用 Spring Cloud 的服务治理和配置管理功能。

   Spring Cloud:原生集成 Spring 生态,组件丰富,方便开发快速搭建微服务系统。

 


   参考链接:

   https://juejin.cn/post/7264829808008511499

   https://juejin.cn/post/7298682235975548968

posted @ 2024-11-07 09:37  欢乐豆123  阅读(1)  评论(0编辑  收藏  举报