Dubbo分布式架构

Dubbo是阿里巴巴开源项目的一个分布式服务框架。可以提供高性能和透明化的RPC远程调用方案

 

Dubbo核心功能

1.远程通讯:Remoting

2.服务框架:Cluster 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3.服务注册中心:Registry 基于注册中心目录服务,使服务消费者能动态查找服务提供者,使地址透明,服务提供者可以平滑增加或者减少机器。

 

Dubbo的组件角色

Dubbo分布式架构

 

 

组件角色                               说明

Provider                              暴露服务的服务提供者

Consumer                           调用远程服务的服务消费者

Registry                              服务注册与发现的注册中心

Monitor                               统计服务调用次数和调用时间的监控中心

Container                            服务运行容器

调用关系说明:

1.服务容器Container负责启动、加载、运行服务提供者。

2.服务提供者Provider在启动时,向注册中心注册自己提供的服务。

3.服务消费者Consumer在启动时,向注册中心订阅自己所需的服务。

4.注册中心Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

5.服务消费者Consumer,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

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

 

Dubbo总体架构

Dubbo最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合。

1.服务接口层:与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。

2.配置层:对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过Spring解析配置生成配置类。

3.服务代理层

4.服务注册层:封装服务地址的注册与发现,以服务URL为中心。可能没有服务注册中心,此时服务提供方直接暴露服务。

5.集群层:封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。

6.监控层:RPC调用次数和调用时间监控。

7.远程调用层:封装RPC调用。

8.信息交换层

9.网络传输层

10.数据序列化层

 

服务提供方可以注册服务也可以注销服务,服务消费方可以订阅服务也可以取消服务。

 

监控

获取源码:git clone --branch dubbo-2.6.0 https://github.com/alibaba/dubbo.git

 

下载完成后使用 IDE 工具引入其子项目 dubbo-sample\dubbo-monitor-sample 进行编译和打包。打包后会在项目的 target 目录下生成 dubbo-monitor-simple-2.6.0-assembly.tar.gz 压缩文件。

修改配置:1) 解压 dubbo-monitor-simple-2.6.0-assembly.tar.gz 压缩包,修改 dubbo-monitor-simple-2.6.0\conf\dubbo.properties:

dubbo.registry.address=zookeeper://127.0.01:2181

2) 在服务提供者的配置文件中添加:

<!-- 注册中心自动查找监控服务 -->

<dubbo:monitor protocol="registry"/>

 

最后启动 dubbo-monitor-simple-2.6.0\bin\start.bat。打开浏览器访问http://localhost:8080/,效果图如下:

Dubbo分布式架构

 

 

管理控制台

Dubbo 提供了一套在线管理服务的管理控制台,该管理控制台为阿里巴巴内部裁减版本,开源部分主要包含:路由规则、动态配置、服务降级、访问控制、权重调整和负载均衡。

在项目源码中,通过 IDE 工具引入其子项目 dubbo-admin 进行编译和打包。打包后会在项目的 target 目录下生成 dubbo-admin-2.6.0.war 压缩文件。

将 dubbo-admin-2.6.0.war 里边的文件和文件夹复制粘贴到 tomcat 的 ROOT 目录中并修改 webapps\ROOT\WEB-INF\dubbo.properties 文件内容:

dubbo.registry.address=zookeeper://127.0.0.1:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

其中,配置中设置 2 个用户:root 和 guest。

最后启动 tomcat 容器,打开浏览器访问http://localhost:8080/,页面要求输入账号和密码,登录后效果图如下:

Dubbo分布式架构