一、开发问题
运行dubbo项目后,为了查看发布的服务信息,需要进入zookeeper终端,用命令操作:
# 连接zookeeper客户端
$ [root@localhost zookeeper]# bin/zkCli.sh -server 127.0.0.1:2181
# 查看所有dubbo服务
$ ls /dubbo
可以看到操作并不方便,服务显示也不直观。
Dubbo官方提供了一个服务运维管理的开源工具:dubbo-admin,用来解决以上的问题。
二、dubbo-admin简介
官方文档:Dubbo Admin 运维指南
dubbo-admin是一套开源的Dubbo服务管理控制台,主要功能有路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等。
老版本的dubbo-admin需要依赖Tomcat作为启动中间件,使用很麻烦。自2017年Dubbo开始重新维护以后,官方重写了dubbo-admin的架构,采用前后端分离(vue+springboot)的方式,可以用maven或前后端分离部署,并且新增了服务治理、服务测试、服务查询功能。
三、安装启动
前后端分离安装部署方便进行功能开发。这里我们只是使用,就以maven的方式安装部署。
(注意:windows下使用git bash 运行以下命令,使用cmd时经常遇到莫名其妙的报错)
1、拉取代码
$ git clone https://github.com/apache/dubbo-admin.git
2、修改配置
dubbo-admin-server/src/main/resources/application.properties
:
修改连接zookeeper的地址
3、构建项目
进入dubbo-admin目录:
# 跳过测试,否则会报错
$ mvn clean package -Dmaven.test.skip=true
4、启动
$ mvn --projects dubbo-admin-server spring-boot:run
5、访问页面
启动成功,访问 http://localhost:8080(用户密码 root/root)
四、使用
1、服务治理
服务治理主要作用是改变运行时服务的行为和选址逻辑,达到限流,权重配置等目的,主要有以下几个功能:
应用级别的服务治理
在 Dubbo 2.6 及更早版本中,所有的服务治理规则都只针对服务粒度,如果要把某条规则作用到应用粒度上,需要为应用下的所有服务配合相同的规则,变更,删除的时候也需要对应的操作,这样的操作很不友好,因此 Dubbo 2.7 版本中增加了应用粒度的服务治理操作,对于条件路由(包括黑白名单),动态配置(包括权重,负载均衡)都可以做应用级别的配置:
上图是条件路由的配置,可以按照应用名,服务名两个维度来填写,也可以按照这两个维度来查询。
标签路由
标签路由是 Dubbo 2.7 引入的新功能,配置以应用作为维度,给不同的服务器打上不同名字的标签,配置如下图所示:
调用的时候,客户端可以通过setAttachment
的方式,来设置不同的标签名称,比如本例中,setAttachment(tag1)
,客户端的选址范围就在如图所示的三台机器中,可以通过这种方式来实现流量隔离,灰度发布等功能。
条件路由
条件路由是 Dubbo 一直以来就有的功能,目前可以配置服务和应用两个维度,条件路由为 yaml 格式。
黑白名单
黑白名单是条件路由的一部分,规则存储和条件路由放在一起,为了方便配置所以单独拿出来,同样可以通过服务和应用两个维度,指定黑名单和白名单:
动态配置
动态配置是和路由规则平行的另一类服务治理治理功能,主要作用是在不重启服务的情况下,动态改变调用行为,从Dubbo2.7版本开始,支持服务和应用两个维度的配置,采用yaml格式,界面如下:
权重调节
权重调节是动态配置的子功能,主要作用是改变服务端的权重,更大的权重会有更大的几率被客户端选中作为服务提供者,从而达到流量分配的目的:
负载均衡
负载均衡也是动态配置的子功能,主要作用是调整客户端的选址逻辑,目前可选的负载均衡策略有随机,轮训和最小活跃。
配置管理
配置管理也是配合Dubbo2.7新增的功能,在Dubbo2.7中,增加了全局和应用维度的配置,分别在全局和应用范围内生效,其中应用配置也可以指定该应用中的服务级别的配置,可以在控制台中查看,修改配置规则,默认展示全局维度的配置。
- 全局配置:
全局配置里可以指定注册中心,元数据中心的地址,服务端和客户端的超时时间等,这些配置在全局内生效。除了配置写入,也可以用来查看。如果使用zookeeper作为注册中心和元数据中心,还可以看到配置文件所在位置的目录结构。
- 应用, 服务配置
应用级别的配置可以为应用或者应用内的服务指定配置,在服务维度上,需要区分提供者和消费者。
dubbo.reference.{serviceName}
表示作为该服务消费者的配置,dubbo.provider.{servcieName}
表示作为该服务提供者的配置。其中注册中心和元数据中心的地址,只能在全局配置中指定,这也是Dubbo2.7中推荐的使用方式。优先级: 服务配置 > 应用配置 > 全局配置
2、文档与测试工具
dubbo提供文档与测试功能,但对代码侵入性太大,完全可以用swagger代替。这里只做简单介绍。
dubbo 接口文档、测试工具,根据注解生成文档,并提供测试功能。
增加一些注解就能生成类似swagger的文档, 不会把非web的dubbo项目变为web项目。
可以在dubbo-admin中查看: