关于后端:Dubbo架构设计及入门案例

42次阅读

共计 4411 个字符,预计需要花费 12 分钟才能阅读完成。

框架介绍

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 我的项目,在后续课程中会介绍右边每个模块的大抵作用。

下载源码导入工程后,进行编译,并跳过测试,这个过程中可能会遇到以下问题

[ERROR] Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.5.1:compile (default) on project dubbo-serialization-protobuf: Missing:
[ERROR] ----------
[ERROR] 1) com.google.protobuf:protoc:exe:windows-x86_64:3.7.1
[ERROR] 
[ERROR]   Try downloading the file manually from the project website.
[ERROR] 
[ERROR]   Then, install it using the command: 
[ERROR]       mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.7.1 -Dclassifier=windows-x86_64 -Dpackaging=exe -Dfile=/path/to/file
[ERROR] 
[ERROR]   Alternatively, if you host your own repository you can deploy the file there: 
[ERROR]       mvn deploy:deploy-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.7.1 -Dclassifier=windows-x86_64 -Dpackaging=exe -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
[ERROR] 
[ERROR]   Path to dependency: 
[ERROR]       1) org.apache.dubbo:dubbo-serialization-protobuf:jar:2.7.8
[ERROR]       2) com.google.protobuf:protoc:exe:windows-x86_64:3.7.1
[ERROR] 
[ERROR] ----------
[ERROR] 1 required artifact is missing.
[ERROR] 
[ERROR] for artifact: 
[ERROR]   org.apache.dubbo:dubbo-serialization-protobuf:jar:2.7.8
[ERROR] 
[ERROR] from the specified remote repositories:
[ERROR]   apache.snapshots (https://repository.apache.org/snapshots, releases=false, snapshots=true),
[ERROR]   alimaven (http://maven.aliyun.com/nexus/content/groups/public/, releases=true, snapshots=false)

手动下载,依照提醒的命令执行

mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.7.1 -Dclassifier=windows-x86_64 -Dpackaging=exe -Dfile=C:\Users\22863\Desktop\test\protoc-3.7.1-windows-x86_64.exe

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

进入治理后盾,能够看到所启动的服务端与生产端。

正文完
 0