【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)

文章目录

  • 一、学习目录
    • 1.1、背景
    • 1.2、收益&目标&优势&需求
    • 1.3、名词解释
    • 1.4、架构设计
      • 1.4.1、现在架构
        • 1.4.1.1、架构总调用链
        • 1.4.1.2、服务注册暴露时序图
        • 1.4.1.3、服务发现引用时序图![在这里插入图片描述](https://img-blog.csdnimg.cn/20210602234301993.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvbGZfbG92ZTY2Ng==,size_16,color_FFFFFF,t_70)
      • 1.4.2、未来架构
    • 1.5、核心模块设计
      • 1.5.1、【编译构建发布·编译项目】dubbo-all
      • 1.5.2、【编译构建发布·项目构建】dubbo-bom
      • 1.5.3、【编译构建发布·编译依赖】dubbo-dependencies
      • 1.5.4、【编译构建发布·构建依赖】dubbo-dependencies-bom
      • 1.5.5、【编译构建发布·编译】compiler
      • 1.5.6、【编译构建发布·项目打包】dubbo-distribution
      • 1.5.7、【编译构建发布·构建工具】dubbo-build-tools
      • 1.5.8、【运行执行·服务器】dubbo-configcenter
      • 1.5.9、【运行执行·服务器】dubbo-registry
      • 1.5.10、【运行执行·服务器】dubbo-cluster
      • 1.5.11、【运行执行·容器】dubbo-container
      • 1.5.12、【运行执行·容器】dubbo-config
      • 1.5.13、【运行执行·监控】dubbo-metadata
      • 1.5.14、【运行执行·监控】dubbo-monitor
      • 1.5.15、【运行执行·执行】dubbo-rpc
      • 1.5.16、【运行执行·序列化】dubbo-serialization
      • 1.5.17、【运行执行·通信】dubbo-remoting
      • 1.5.18、【运行执行·缓存】dubbo-filter
      • 1.5.19、【运行执行·接口】dubbo-common
      • 1.5.20、【适配升级·升级】dubbo-compatible
      • 1.5.21、【适配升级·扩展】dubbo-plugin
      • 1.5.22、【应用实践·测试】dubbo-demo
      • 1.5.23、【应用实践·启动】dubbo-spring-boot
      • 1.6、部署示例
      • 1.7、源码分析
  • 二、精华

一、学习目录

1.1、背景

单一/垂直应用架构已经满足不了互联网应用的规模,因为痛所以需要找到解决方案。dubbo的官方背景描述

1.2、收益&目标&优势&需求

dubbo能解决什么问题?或者定位要解决什么问题呢?
Dubbo需要解决的是,
(1)如何管理繁多的依赖关系?
(2)如何进行负载均衡和故障转移(failOver)?
(3)如何进行服务治理,请求量,响应时间和容量水位等?
我们回忆下一个基本的RPC框架组成结构需要的是:
✅基础:
• 网络通信(信息传递的方式)
• 序列化框架(编码解码)
• 服务&消费的注册与发现(寻址服务)
• 动态代理(客户端代理模式透明服务实现)
✅好用:
• 业务集成(配置或者Spring等主流框架集成)
✅成熟:服务治理
• 可观测性(监控,调用量、响应时间(网络带宽、IO)、容量规划(cpu、内存、磁盘))
• 高并发(四高一安全)
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第1张图片

具体可以看:RPC框架的核心组件

1.3、名词解释

RPC : 在分布式系统中,计算机程序使一个过程在不同的地址空间中执行,通常是共享网络上的另外一台计算机,而这个地址空间的编码就好像是一个普通的本地调用,没有程序员去远程交互显示的编码。面向对象编程范式中,rpc是由远程方法调用RMI标识。
来自wiki:https://en.wikipedia.org/wiki/Remote_procedure_call

1.4、架构设计

1.4.1、现在架构

【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第2张图片

【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第3张图片

调用关系说明

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    (PS:并发量大,但每个用户无需频繁操作情况下需用短连好)
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
    Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。

1.4.1.1、架构总调用链

1.4.1.2、服务注册暴露时序图

【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第4张图片

1.4.1.3、服务发现引用时序图【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第5张图片

1.4.2、未来架构

【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第6张图片

1.5、核心模块设计

源码整个架构模块如下图:
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第7张图片
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第8张图片

1.5.1、【编译构建发布·编译项目】dubbo-all

在这里插入图片描述

这个模块里面只有一个 pom.xml ,是 Dubbo 的 maven 打包脚本。

1.5.2、【编译构建发布·项目构建】dubbo-bom

这个里面也只有一个 pom.xml ,通过 Maven 的 统一定义了 Dubbo 项目本身每个包的版本。
Bom参考官方说明
在这里插入图片描述

1.5.3、【编译构建发布·编译依赖】dubbo-dependencies

该模块是 Dubbo 对所依赖的第三方 jar 包。这里面有zookeeper的依赖管理
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第9张图片

1.5.4、【编译构建发布·构建依赖】dubbo-dependencies-bom

该模块是 Dubbo 对所依赖的第三方 jar 包进行了一个统一管理,用于保证同一个 jar 包版本的一致性,避免依赖冲突。
在这里插入图片描述

1.5.5、【编译构建发布·编译】compiler

该模块是用于生成RPC框架的stub存根,代码中可以看到除了dubbo还有grpc
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第10张图片

1.5.6、【编译构建发布·项目打包】dubbo-distribution

Dubbo 准备 发布到中央仓库 # Apache Release 会打包到此目录。个人项目一般会打包到公司的私服统一管理,现在dubbo归Apache管理。
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第11张图片

1.5.7、【编译构建发布·构建工具】dubbo-build-tools

这两个包是对代码风格进行管理
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第12张图片
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第13张图片

1.5.8、【运行执行·服务器】dubbo-configcenter

这个模块是服务器IP的配置中心管理,比如常用的配置中心
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第14张图片

1.5.9、【运行执行·服务器】dubbo-registry

这个模块是服务器IP的注册模块
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第15张图片

1.5.10、【运行执行·服务器】dubbo-cluster

集群模块负责把多个服务提供者封装为一个,并提供负载均衡, 集群容错,路由,分组聚合等功能,集群的地址列表可以静态配置,也可以由配置中心下发。
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第16张图片

1.5.11、【运行执行·容器】dubbo-container

这个模块是由于dubbo非常好的集成了Spring,提供了SPI,这里对于springBean的容器管理,以及日志容器管理
并且是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。
• dubbo-container-api :定义了 com.alibaba.dubbo.container.Container 接口,里面包含了容器的 start() 和 stop() 方法,并提供加载所有容器启动的 Main 类。
• 实现dubbo-container-api
• dubbo-container-spring ,提供了 com.alibaba.dubbo.container.spring.SpringContainer 。
• dubbo-container-log4j ,提供了 com.alibaba.dubbo.container.log4j.Log4jContainer 。
• dubbo-container-logback ,提供了 com.alibaba.dubbo.container.logback.LogbackContainer 。【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第17张图片

1.5.12、【运行执行·容器】dubbo-config

这个模块是dubbo的API接口或者Spring的方式进行暴露对外使用。
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第18张图片

1.5.13、【运行执行·监控】dubbo-metadata

这个模块是用于监控整个框架中的元数据收集上报,接口,序列化,注册,执行器,注册,故障转移等
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第19张图片

1.5.14、【运行执行·监控】dubbo-monitor

这个模块是通过Metric进行监控,达到服务的可观测性
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第20张图片

1.5.15、【运行执行·执行】dubbo-rpc

这个模块是列举了所有的rpc目前支持的通讯协议
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第21张图片

1.5.16、【运行执行·序列化】dubbo-serialization

这个模块是列举了支持的序列化框架
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第22张图片

1.5.17、【运行执行·通信】dubbo-remoting

这个模块列举了网络通信交互的支持方式,一般常用的还是Netty和mina。
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第23张图片

1.5.18、【运行执行·缓存】dubbo-filter

这个模块是过滤器
• dubbo-filter-cache,缓存过滤器。
• 对调用返回的结果做缓存。
• dubbo-filter-validation,参数验证过滤器。
• 参数验证功能是基于 JSR303 实现的,
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第24张图片

1.5.19、【运行执行·接口】dubbo-common

这个模块主要是一些工具类和通用模型。与其他业务系统的公共包一样。
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第25张图片

1.5.20、【适配升级·升级】dubbo-compatible

这个模块主要是针对版本升级2.7.X的一些,官方说是因为改变了报名所以需要有些类的适配
From 2.7.x, Dubbo has renamed package to org.apache.dubbo, so dubbo-compatible module is provided
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第26张图片

1.5.21、【适配升级·扩展】dubbo-plugin

这个模块是鉴权以及扩展插件模块
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第27张图片

1.5.22、【应用实践·测试】dubbo-demo

这个模块提供了不同方式的测试demo,在实际使用中可以进行借鉴
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第28张图片

1.5.23、【应用实践·启动】dubbo-spring-boot

这个模块主要是对于SpringBoot的应用兼容
【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第29张图片

1.6、部署示例

【聊聊源码·源码篇】聊聊源码dubbo(目录篇全局核心重点图)_第30张图片

(注册中心服务注册和发现):安装zookeeper、按装redis作为注册中心
(提供服务者&消费者):服务者、消费者

1.7、源码分析

待处理…

二、精华

待处理…

参考资料
✅官网资料
Dubbo搭建使用

你可能感兴趣的:(#,聊聊源码dubbo,dubbo,聊聊dubbo源码,dubbo源码解密,三道题,dubbo深入浅出)