目录
一、Dubbo 简介
Apache Dubbo 是一款微服务开发框架,它帮助解决微服务开发中的通信问题,同时为构建企业级微服务的提供服务治理能力,Dubbo 不绑定编程语言,我们的目标是为所有主流语言提供对等的微服务开发体验。
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
简单的说,Dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有Dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在Dubbo上注册)。
二、Dubbo组件角色
调用关系说明:
1.服务容器Container负责启动,加载,运行服务提供者。
2.服务提供者Provider在启动时,向注册中心注册自己提供的服务。
3.服务消费者Consumer在启动时,向注册中心订阅自己所需的服务。
4.注册中心Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5.服务消费者Consumer,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6.服务消费者Consumer和提供者Provider,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心Monitor。
三、Dubbo 有哪些注册中心?
Multicast 注册中心:Multicast 注册中心不需要任何中心节点,只要广播地址,就能进行服务注册和发现,基于网络中组播传输实现。
Zookeeper 注册中心:基于分布式协调系统 Zookeeper 实现,采用 Zookeeper 的 watch 机制实现数据变更。
Redis 注册中心:基于 Redis 实现,采用 key/map 存储,key 存储服务名和类型,map 中 key 存储服务 url,value 服务过期时间。基
于 Redis 的发布/订阅模式通知数据变更。
Simple 注册中心。
四、Dubbo的架构设计
Dubbo框架具有极高的扩展性,主要采用微核+插件体系,并且文档齐全,很方便二次开发,适应性极强。
Dubbo的总体架构,如图所示:
Dubbo架构图注释:
- 图中左边淡蓝背景的为服务消费方使用的接口;
- 右边淡绿色背景的为服务提供方使用的接口;
- 位于中轴线上的为双方都用到的接口;
- 最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。
Dubbo框架设计一共划分了10个层:
1.服务接口层(Service)
该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
2.配置层(Config)
对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。
3.服务代理层(Proxy)
服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
4.服务注册层(Registry)
封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
5.集群层(Cluster)
封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
6.监控层(Monitor)
RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
7.远程调用层(Protocol)
封装RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠拢,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
8.信息交换层(Exchange)
封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
9.网络传输层(Transport)
抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
10.数据序列化层(Serialize)
可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。
五、Dubbo 的使用场景有哪些?
Dubbo是一个高性能、轻量级的Java RPC远程通讯框架,它主要用于分布式服务架构中,解决了服务之间的远程调用问题。以下是Dubbo的主要使用场景:
- 微服务架构:微服务架构下服务的拆分很细,服务之间需要相互调用,使用Dubbo可以方便地实现微服务之间的通讯。
- 分布式系统:在分布式系统中,各个模块需要互相合作处理任务,这时就需要Dubbo作为服务调用中间件。
- 高并发、大流量场景:在高并发下,需要用优秀的RPC框架实现高性能的服务调用,Dubbo能很好的满足这方面的要求。
- 游戏、电商、社交等实时性较强的领域:这些领域的系统需要快速响应并确保低延迟,Dubbo可以提供高效可靠的RPC实现方案。
- 公司内部系统架构:Dubbo不仅用于大型互联网系统上,也可以用于企业内部系统架构,增加系统之间的协作能力。
Dubbo主要适用于分布式服务架构下,需要实现高效、快速、可靠远程服务调用的场景。
六、Dubbo 核心功能有哪些?
Dubbo是一个高性能、轻量级的Java RPC远程通讯框架,核心功能包括:
- 服务治理:Dubbo提供了服务治理的功能,可以通过注册中心管理所有的服务,并提供服务发现、负载均衡、容错机制等功能。
- 高效的RPC通讯:Dubbo基于Netty实现了高效的RPC通讯机制,支持多种序列化方式和通讯协议,并且支持异步调用和多线程并发处理。
- 负载均衡和容错:Dubbo提供了多种负载均衡算法和容错机制,例如轮询、随机、最少活跃调用等选项,同时支持容错方案,例如失败自动切换、失败重试、失败快速失败等。
- 分布式事务:通过注册中心来实现分布式事务的处理,Dubbo支持多种事务协调器,例如TCC、2PC和XA等。
- 配置管理:Dubbo的配置项非常强大,可以通过多种配置方式来定义各种参数,例如系统参数、服务参数、应用参数等,同时也支持动态配置和预热等特性。
七、Dubbo 提供了哪些能力?
提供微服务抽象与框架
首先,Dubbo 作为服务开发框架解决了业务应用中微服务定义、暴露、通信与治理的问题,为业务应用开发定义了一套微服务编程范式。 具体来说,Dubbo 为业务应用提供了微服务开发API、RPC 协议、服务治理三大核心能力,让开发者真正的专注业务逻辑开发。
Dubbo 不是应用框架的替代者,它可以很好的工作在每种语言的主流编程框架之上,以 Java 为例,Dubbo 可以很好的与 Spring 协作,并在此基础上提供服务定义、微服务编程、服务发现、负载均衡、流量管控等能力。
提供灵活的通信协议切换能力
在通信方面,Dubbo 区别于其他 RPC 框架的是它不绑定特定协议,你可以在底层选用 HTTP./2、TCP、gRPC、REST、Hessian 等任意通信协议,同时享受统一的 API、以及对等的服务治理能力。
一切皆可扩展
Dubbo 的另一个优势在于其可扩展性设计,从流量管控、协议编码、诊断调优、再到服务治理,你都可以去扩展,满足企业级微服务开发与运维的所有诉求。
丰富的生态
基于扩展能力 Dubbo 官方提供了丰富的生态适配,涵盖了所有主流的开源微服务组件。
服务网格
对于服务网格架构,Dubbo也可以轻松接入原生 Istio 体系; 在数据面支持与 Envoy 部署的 Proxy 模式,也支持无 Envoy 的 Proxyless 模式,提供更灵活的数据面选择。