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

author author     2022-12-03     523

关键词:

框架介绍

1.1.1 概述

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

1.1.2 运行架构

dubbo运行架构如下图示

节点角色说明

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

调用关系说明

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

关于dubbo 的特点分别有连通性、健壮性、伸缩性、以及向未来架构的升级性。特点的详细介绍也可以参考官方文档

1.1.3 整体设计

图例说明:

  • 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。
  • 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。
  • 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。
  • 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。

**各层说明: **

  • config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  • proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory
  • registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService
  • cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance
  • monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService
  • protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter
  • exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  • transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec
  • serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

1.2 环境搭建

接下来逐步对dubbo各个模块的源码以及原理进行解析,目前dubbo框架已经交由Apache基金会进行孵化,被在github开源。

Dubbo 社区目前主力维护的有 2.6.x 和 2.7.x 两大版本,其中,

  • 2.6.x 主要以 bugfix 和少量 enhancements 为主,因此能完全保证稳定性
  • 2.7.x 作为社区的主要开发版本,得到持续更新并增加了大量新 feature 和优化,同时也带来了一些稳定性挑战

1.2.1 源码拉取

通过以下的这个命令签出最新的dubbo项目源码,并导入到IDEA中

git clone https://github.com/apache/dubbo.git dubbo

可以看到Dubbo被拆分成很多的Maven项目,在后续课程中会介绍左边每个模块的大致作用。

1.2.2 源码结构

通过如下图形可以大致的了解到,dubbo源码各个模块的相关作用:

模块说明:

  • dubbo-common 公共逻辑模块:包括 Util 类和通用模型。
  • dubbo-remoting 远程通讯模块:相当于 Dubbo 协议的实现,如果 RPC 用 RMI协议则不需要使用此包。
  • dubbo-rpc 远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。
  • dubbo-cluster 集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡, 容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。
  • dubbo-registry 注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。
  • dubbo-monitor 监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。
  • dubbo-config 配置模块:是 Dubbo 对外的 API,用户通过 Config 使用Dubbo,隐藏 Dubbo 所有细节。
  • dubbo-container 容器模块:是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。

1.2.3 环境导入

在本次课程中,不仅讲解dubbo源码还会涉及到相关的基础知识,为了方便学员快速理解并掌握各个内容,已经准备好了相关工程,只需导入到IDEA中即可。对于工程中代码的具体作用,在后续课程会依次讲解

1.2.4 测试

(1) 安装zookeeper

(2) 修改官网案例,配置zookeeper地址

(3) 启动服务提供者,启动服务消费者

1.2.5 管理控制台

  1. 下载管理控制台, GITHUB地址

  2. 进入源码目录, 进行打包编译

    mvn clean package -Dmaven.test.skip=true
    

    构建成功提示:

如果构建过程中出现nodejs安装包下载错误, 可以将安装包直接放置maven仓库内(资料中已提供安装包)。

  1. 启动后台管理服务

    java -jar dubbo-admin-0.2.0-SNAPSHOT.jar
    

  1. 管理后台

    地址: http://127.0.0.1:8080/

    默认账户名和密码都为root

进入管理后台, 可以看到所启动的服务端与消费端。

flume快速入门及常用案例整理(代码片段)

...的海量日志采集、聚合和传输的系统,flume基于流式架构,灵活简单Flume最主要的作用就是,实时读取服务器本次磁盘的数据,讲数据写入到HDFS。1.2flume基础架构Agent​Ag 查看详情

探花交友day00—探花交友前置dubbo(代码片段)

目录1、Dubbo的前世今生2、Dubbo的快速入门2.1、Dubbo的基本架构2.2、Nacos2.3、管理后台2.4、入门案例2.5、代码优化3、Dubbo高级特性3.2、超时与重试3.3、启动检查3.4、多版本3.5、负载均衡4、SpringCloud整合Dubbo4.1、功能概述4.2、入门案例... 查看详情

dubbo入门(代码片段)

...网的不断发展,网站的规模也越来越大,常规的垂直应用架构已经不能再满足开发的需求,分布式服务架构和流式计算架构已成为趋势。单一应用架构:当网站流量很小时,只需要一个应用,将所有的功能都部署在一起,以减少... 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"enco 查看详情

springsecurity——整体架构与入门案例分析(代码片段)

一:整体架构在<SpringSecurity>的架构设计中,认证<Authentication>和授权<Authorization>是分开的,无论使用什么样的认证方式。都不会影响授权,这是两个独立的存在,这种独立带来的好处之一,就... 查看详情

springcloudalibaba系列dubbo基础入门篇(代码片段)

...础入门篇一、分布式系统中的相关概念1.大型互联网项目架构目标(1)特点(2)衡量网站的性能指标(3)目标2.集群和分布式3.架构演进(1)单体架构(2)垂直架构(3)分布式架构... 查看详情

dubbo入门和springboot集成dubbo小例子(代码片段)

...用方案,以及SOA服务治理方案一、Dubbo的简单介绍1.网站架构的发展历程网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多.......单一应用架构(OORM)当网站流量很小时,将所有的功能部署到一起,以减... 查看详情

记录一下dubbo的快速入门(代码片段)

文档背景在很多后台服务的架构中,采用了RPC+微服务的架构思想。RPC采用dubbo框架作为治理框架,对外接口采用RESTful和GraphQL接口方式所以学习一下dubbo是很有必要的1、什么是Dubbo官网:https://dubbo.apache.org/zh/docs/背... 查看详情

lucene介绍及简单入门案例(集成ik分词器)(代码片段)

...不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系... 查看详情

dubbo(代码片段)

Dubbo快速入门一、软件架构1.单一软件架构2.分布式服务架构二、Dubbo1.介绍2.架构3.协议4.注册中心概述三、代码实现1.创建三个工程2.接口工程3.服务提供者工程4.服务消费者工程5.配置Tomcat6.效果资料来自:动力节点一、软件架... 查看详情

dubbo(代码片段)

Dubbo快速入门一、软件架构1.单一软件架构2.分布式服务架构二、Dubbo1.介绍2.架构3.协议4.注册中心概述三、代码实现1.创建三个工程2.接口工程3.服务提供者工程4.服务消费者工程5.配置Tomcat6.效果资料来自:动力节点一、软件架... 查看详情

dubbo快速入门介绍使用(代码片段)

...#xff0c;反之Dubbo2的消费者也不能订阅到Dubbo3Provider。这里的架构和使用都是基于Dubbo2.7版本,Dubbo2(2.7以下 查看详情

dubbo远程调用(rpc)-->快速入门+管理控制台+整合springboot开发(代码片段)

文章目录一、ApacheDubbo概述1.Dubbo简介2.Dubbo架构二、Dubbo快速入门1.点对点直连【1】服务提供者-service项目【2】服务消费者-web项目2.zookeeper注册中心【1】服务提供者【2】服务消费者三、Dubbo管理控制台1.jar包部署管理平台2.war包部... 查看详情

java学习---dubbo+zookeeper微服务架构(代码片段)

Dubbo+Zookeeper微服务架构1、ApacheDubbo概述 1.1、Dubbo简介 1.2、Dubbo的服务架构2、服务注册中心Zookeeper 2.1、ZooKeeper介绍 2.2、ZooKeeper安装 2.3、启动ZooKeeper3、ZooKeeper快速入门 3.1、服务提供方 3.2、服务消费方 3.3、问题思考4、Dub... 查看详情

springboot+dubbo+zookeeper快速入门案例(代码片段)

项目目录结构:第一步:创建一个SpringBoot项目,这里选择Maven项目或者SpringInitializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下:<?xmlversion="1.0"encoding="UTF-8... 查看详情

分享《微信小程序开发图解案例教程》pdf及代码+《微信小程序开发入门及案例详解》pdf及代码

...详细说明的示例代码相结合的叙述方式,讲解微信小程序设计的基本原理和知识,简单易懂,提供了丰富详尽的实战案例,带读者边做边学,快速掌握微信小程序的设计和实现。 《微信小程序开发入门及案例详解》PDF,514页... 查看详情