dubbo的配置过程,实现原理及架构详解

dxtlearningblockchain      2022-02-13     264

关键词:

一. Dubbo是什么?Dubbo能做什么?

随着互联网的发展,市场需求快速变更,业务持续高速增长,网站早已从单一应用架构演变为分布式服务架构及流动计算架构。在分布式架构的背景下,在本地调用非本进程内(远程)的资源就变得在所难免。因此,后期涌现出了很多RPC(远程过程调用)的框架,如 Apache Thrift、Hessian、gRPC 等。然而,随着 RPC 框架的推广和使用的日益深入,服务越来越多的情况也衍生出了新的业务需求:

(1)如何管理过多的服务URL

(2)消费者要想使用服务,就必须直接知道和了解服务提供方的服务地址。后台服务地址一旦改变,则需要一一通知消费者,这种高度耦合的关系很不利用维护。

(3)海量的服务会延伸出很多的错误,如何对这些常见失败案例提供服务治理的功能。

在这个背景下,阿里巴巴集团推出了Dubbo分布式框架,来解决和缓和目前RPC框架下的这些需求和瓶颈。具体措施如下:

(1)通过引入服务注册中心Registry来管理服务的依赖关系,并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖。

(2)在注册中心提供订阅发布机制,使得消费者只需要关心服务本身,而不再需要写死服务提供方地址。注册中心基于接口名查询服务提供者的ip地址,然后将服务提供方的地址动态的回传给服务消费者。

(3)专门独立出一个服务治理中心,统一对集群各节点的服务做在线治理,提升治理效率.

二. Dubbo 的工作原理(参照官方文档:https://github.com/apache/dubbo)

技术图片

 

 

 

1) 节点说明:

Provider:暴露服务的服务提供方
Consumer:调用远程服务的服务消费方
Registry:服务注册与发现的注册中心
Monitor: 统计服务的调用次数和调用时间的监控中心
Container:服务运行容器

2) 调用过程及工作原理:

0. 服务容器Container启动,加载,运行服务提供者,通过 main 函数初始化 Spring 上下文,根据服务提供者的XML配置文件将每个服务按照指定的协议发布(每个服务都有自己对应的协议端口号protocol,port),从而完成多个服务的初始化工作。

技术图片

 

 

 技术图片

1. 服务提供者Provider在启动时,根据配置的服务注册中心地址连接服务注册中心Registry,将服务提供者信息发布到注册中心(如zookeeper),向注册中心注册自己提供的服务(如上图)。

2. 服务消费者Consumer在启动时,消费者根据服务消费者XML配置文件的服务引用信息,连接到注册中心,向注册中心订阅自己所需的服务。

技术图片

3. 服务注册中心根据消费者的服务订阅关系,返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送最新的服务地址信息给消费者(这个监听过程是由Dubbo另外提供的NotifyListrener辅助完成的,具体可以看下一节的介绍)。

4. 服务消费者调用远程服务时,根据路由策略,从本地缓存的服务提供者地址列表中选择选一台提供者进行,然后根据协议类型建立链路,跨进程调用服务提供者,如果调用失败,再选另一台调用。

5. 服务消费者Consumer和提供者Provider,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心Monitor。

三.Dubbo的底层架构解读(参考文档:http://dubbo.apache.org/zh-cn/docs/dev/design.html

技术图片

 

 (1)从图上前两层,我们可以很容易的分析出左边蓝色部分是服务消费者(ReferenceConfig),右边是服务提供者(implement接口,ServiceConfig)。

 (2)其中在左边的接口表示是扩展给消费者单独使用的,右边的接口表示是扩展给服务者单独使用的。而中间的接口是服务者和消费者两者都可以使用的。

 (3)从上到下按照dubbo的工作过程,一共分为10层。各部分的介绍参照(http://crazyfzw.github.io/2018/06/10/dubbo-architecture/

  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。

大致的工作流程是:

  1.读取配置文件,生成代理对象

  2.代理对象负责将其注册到注册中心进行备份

  3.下层monitor层对双方进行业务监控。

在 RPC 中,Protocol 是核心层,也就是只要有 Protocol + Invoker + Exporter 就可以完成非透明的 RPC 调用,然后在 Invoker 的主过程上 Filter 拦截点。

需要注意的是:为了底层可以使用NIO来传输数据,所有的公共api接口都应该实现Serializable.

四.Dubbo的缺点

因为是阿里出品,所以其目前只支持Java语言,对语言的支持性不是很好。

 

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(中)(代码片段)

...终极特性】「云原生三中心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上),让我们对Dubbo3的三中心架构体系有了一定的认识和了解。Dubbo3的三中心部署架构回顾一下部署架构... 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(上)

Dubb3的应用级服务发现Dubbo3提供了全新的应用级服务发现模型,该模型在设计与实现上区别于Dubbo2的接口级服务发现模型。概括来说,Dubbo3引入的应用级服务发现主要有以下优势适配云原生微服务变革。云原生时代的基础设施能... 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(上)

Dubb3的应用级服务发现Dubbo3提供了全新的应用级服务发现模型,该模型在设计与实现上区别于Dubbo2的接口级服务发现模型。概括来说,Dubbo3引入的应用级服务发现主要有以下优势适配云原生微服务变革。云原生时代的基础... 查看详情

dubbo——dubbo及注册中心原理

1.Dubbo意义网站应用的架构变化经历了一个从所有服务分布在一台服务器上(Allinone、单一应用架构)到垂直应用架构(MVC模式,按照各模块的职能划分)到分布式应用架构(RPC、按照服务不同分布在不同的... 查看详情

使用lvs实现负载均衡原理及安装配置详解(代码片段)

负载均衡集群是loadbalance集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习LVS并对其进行了详细的总结记录。一、负载均衡LVS基本介绍... 查看详情

dubbo原理和机制详解(非常全面)

...以及软负载均衡,失败容错,地址路由,动态配置等集群支持。3)服务注册和发现服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑... 查看详情

dubbo启动过程(spring方式)详解

一、使用Springxml配置方式的启动过程  1.解析XML,注册Bean  2.监听Spring事件  3.启动或关闭dubbo二、详细过程1.解析XML,注册Bean  利用Spring提供的NamespaceHandler扩展机制,META-INF下放两个spring配置文件,  spring.schemas定义x... 查看详情

详解微服务:springcloud原理及核心

...地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较... 查看详情

dubbo整体架构

...服务提供方和服务消费方的业务设计对应的接口和实现。配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。服务代理层(Proxy):服务接口透明代理,生成... 查看详情

dubbo架构设计及入门案例(代码片段)

...一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载... 查看详情

dubbo原理应用与面经总结(代码片段)

...件机制 官网介绍的架构设计思想是两点:采用URL作为配置信息的统一格式,所有扩展点都通过传递URL携带配置信息;采用Microkernel+Plugin模式,Microkernel只负责组装Plugin,Dubbo自身的功能也是通过扩展点实现的,也就是Dubbo的所... 查看详情

hbase架构详解及读写流程原理剖析(代码片段)

1、HBase简介HBase是BigTable(架构如下图所示)的开源“山寨”版本,建立在hdfs(对应GFS)之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。HBase底层依赖于HDFS的。整体架构图如下:HBa... 查看详情

dubboremoting模块详解

...、Mina、Grizzly等NIO框架:dubbo-remoting-zookeeper使用ApacheCurator实现与zk的交互。2dubbo-remoting-api是其他​​dubbo-remoting-*​​模块的顶层抽象,其他dubbo-remoting子模块都是依赖第三方NIO库,来实现dubbo-remoting-api模块。2.1buffer包定义Buffer相... 查看详情

tomcat原理详解及请求过程(转)(代码片段)

https://www.cnblogs.com/hggen/p/6264475.htmlTOMCAT原理详解及请求过程Tomcat:  Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。Tomcat目录:tomcat  |---bin:存放... 查看详情

xxljob负载均衡用法及实现原理详解(代码片段)

目录一、配置一个应用执行器二、同一台机器上模拟负载均衡 1.环境准备2.触发任务,选择轮询策略3.机器实例动态伸缩三、负载均衡原理解析1. 根据应用名查找地址列表​2.ExecutorRouteStrategyEnum3. ExecutorRouteRound计算server地址... 查看详情

apk安装过程及原理详解

 PackageInstaller原理简述 应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作。APK是AndroidPackage的缩写,即Android安装包。APK是类似SymbianSis或Sisx的... 查看详情

dubbo源码学习系列动手写dubbo核心原理(代码片段)

前言    我觉得通过学习源码,可以获取到与大师交流的机会,优秀的设计能让我在编程思想上得到锻炼提升,也会让我去更注重自己的代码质量!一、 Dubbo架构详解    理解Dubbo前,最好先手动画一下dubbo的架... 查看详情

dubbo的spi机制与jdk机制的不同及原理分析

从今天开始,将会逐步介绍关于DUbbo的有关知识。首先先简单介绍一下DUbbo的整体概述。概述Dubbo是SOA(面向服务架构)服务治理方案的核心框架。用于分布式调用,其重点在于分布式的治理。简单的来说,可以把它分为四个角色。... 查看详情