共计 4411 个字符,预计需要花费 12 分钟才能阅读完成。
框架介绍
1.1.1 概述
Dubbo 是阿里巴巴公司开源的一个高性能优良的服务框架,使得利用可通过高性能的 RPC 实现服务的输入和输出性能,能够和 Spring 框架无缝集成。
Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大外围能力:面向接口的近程办法调用,智能容错和负载平衡,以及服务主动注册和发现。
1.1.2 运行架构
dubbo 运行架构如下图示
节点角色阐明
节点 | 角色阐明 |
---|---|
Provider |
裸露服务的服务提供方 |
Consumer |
调用近程服务的服务生产方 |
Registry |
服务注册与发现的注册核心 |
Monitor |
统计服务的调用次数和调用工夫的监控核心 |
Container |
服务运行容器 |
调用关系阐明
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册核心注册本人提供的服务。
- 服务消费者在启动时,向注册核心订阅本人所需的服务。
- 注册核心返回服务提供者地址列表给消费者,如果有变更,注册核心将基于长连贯推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载平衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用工夫,定时每分钟发送一次统计数据到监控核心。
对于 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 治理控制台
- 下载治理控制台,GITHUB 地址
-
进入源码目录,进行打包编译
mvn clean package -Dmaven.test.skip=true
构建胜利提醒:
如果构建过程中呈现 nodejs 安装包下载谬误,能够将安装包间接搁置 maven 仓库内(材料中已提供安装包)。
-
启动后盾治理服务
java -jar dubbo-admin-0.2.0-SNAPSHOT.jar
-
治理后盾
地址:http://127.0.0.1:8080/
默认账户名和明码都为 root
进入治理后盾,能够看到所启动的服务端与生产端。