Dubbo高级应用-服务治理

目录

1、dubbo-admin-2.7.x版本安装部署

1.1 下载源码

1.2 部署访问

2、路由规则

2.1 Dubbo API配置

2.2 管理控制台配置

3、规则动态配置

3.1 应用粒度

3.2 服务粒度

4、服务降级

5、集群容错

5.1 集群容错模式

5.2 集群模式配置

6、黑白名单

6.1 应用粒度

6.2 服务粒度

7、权重调整

7.1 应用粒度

7.2 服务粒度

8、负载均衡

8.1 官方提供

8.2 自定义策略

9、优雅停机

9.1 优雅停机原理

9.2 设置方式

10、在线运维Qos

11、简化注册中心URL

11.1 为什么要简化

11.2 简化配置


1、dubbo-admin-2.7.x版本安装部署

1.1 下载源码

dubbo-admin-2.5.x版本是现阶段官方推荐应用到生产的,但是缺陷太多,特别是对于服务治理这一块,2.7.x版本完善了很多,但是官方并没有推荐生产使用,不过我觉得能不能用于生产,根据自己的情况来,够用就行(bug很多,但是留有对应的后门API)

先下载dubbo-admin-2.7.x源码:https://github.com/apache/dubbo-admin

官网地址:http://dubbo.apache.org/zh-cn/docs/2.7/user/quick-start/

2.7版本作者基于springboot开发的,而且做了前后端分离!

1.2 部署访问

修改zookeeper地址配置,找到\dubbo-admin-develop\dubbo-admin-server\src\main\resources\application.properties:

admin.registry.address=zookeeper://192.168.223.128:2181
admin.config-center=zookeeper://192.168.223.128:2181
admin.metadata-report.address=zookeeper://192.168.223.128:2181
​
admin.root.user.name=root
admin.root.user.password=root

在主目录dubbo-admin-develop目录下,执行mvn clean package -Dmaven.test.skip=true,第一次会比较慢,因为前端使用了vue.js和node.js,所以你本地没有安装npm的会自定下载安装,慢慢等:

因为使用了springboot,所以不再依赖tomcat容器,有两种方式启动

一种方法启动 :

mvn --projects dubbo-admin-server spring-boot:run 

二种方法启动:

cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.1.jar

访问测试:http://localhost:8080

2、路由规则

2.1 Dubbo API配置

需求背景:

  我们现在有一个服务A, 需要暴露在同一个zookeeper上面, 但是注册到zookeeper的地址需要有公网和内网两种, 但是我又不想在代码中做修改.

需求说明:

  同一个服务需要提供内网和公网地址的原因是: 我们有服务B所在的机器只能通过外网去访问服务A, 但是外网访问会受到带宽的限制. 但是服务A的请求量又很大, 因此, 我就希望除了服务B以外的机器都通过内网去访问服务A, 这样就解决了带宽上面的限制.

  但是, 服务A的集群是在同一个zookeeper下面的. 所以, 我就必须指定服务B去访问服务A的外网地址的dubbo服务.

  这里有一个方案: 就是我使用两个不同的zookeeper, 外网地址的服务A注册到zookeeper-1上面, 内网地址的注册到zookeeper-2上面. 这样也是可以解决上面指定服务B访问服务A的问题.

  但是, 我们上了监控, 监控是监控一个zookeeper地址的服务, 所以, 我就不能有多个zookeeper, 这样会加大复杂度. 这个时候, 路由规则是一个好东西

路由规则在发起一次RPC调用前起到过滤目标服务器地址的作用,过滤后的地址列表,将作为消费端最终发起RPC调用的备选地址。

  • 条件路由。支持以服务或Consumer应用为粒度配置路由规则。

  • 标签路由。以Provider应用为粒度配置路由规则。

@Test
public void test() throws UnknownHostException {
    RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
    Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://192.168.223.128:2181"));
    registry.register(URL.valueOf("condition://0.0.0.0/com.ydt.dubbo.service.LoadBalanceService?category=routers&dynamic=false&rule="
            + URL.encode("host = 192.168.223.* => host = 192.168.224.*")));
}

其中:

  • route:// 表示路由规则的类型,支持条件路由规则和脚本路由规则,可扩展,必填

  • 0.0.0.0 表示对所有 IP 地址生效,如果只想对某个 IP 的生效,请填入具体 IP,必填

  • com.ydt.dubbo.service.LoadBalanceService 表示只对指定服务生效,必填

  • group=loadbalance 对指定服务的指定group生效,不填表示对未配置group的指定服务生效

  • version=1.0对指定服务的指定version生效,不填表示对未配置version的指定服务生效

  • category=routers 表示该数据为动态配置类型,必填

  • dynamic=false 表示该数据为持久数据,当注册方退出时,数据依然保存在注册中心,必填

  • enabled=true 覆盖规则是否生效,可不填,缺省生效。

  • force=false 当路由结果为空时,是否强制执行,如果不强制执行,路由结果为空的路由规则将自动失效,可不填,缺省为 false

  • runtime=false 是否在每次调用时执行路由规则,否则只在提供者地址列表变更时预先执行并缓存结果,调用时直接从缓存中获取路由结果。如果用了参数路由,必须设为 true,需要注意设置会影响调用的性能,可不填,缺省为 false

  • priority=1 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为 0

  • rule=URL.encode("host = 192.168.223.* => host = 192.168.224.*") 表示路由规则的内容,必填

条件路由规则

基于条件表达式的路由规则,如:host = 192.168.223.* => host = 192.168.224.*

规则:

  • => 之前的为消费者匹配条件,所有参数和消费者的 URL 进行对比,当消费者满足匹配条件时,对该消费者执行后面的过滤规则。

  • => 之后为提供者地址列表的过滤条件,所有参数和提供者的 URL 进行对比,消费者最终只拿到过滤后的地址列表。

  • 如果匹配条件为空,表示对所有消费方应用,如:=> host = 192.168.224.*

  • 如果过滤条件为空,表示禁止访问,如:host = 192.168.223.* =>

2.2 管理控制台配置

使用API进行配置非常不好理解,而且也做不到动态的修改,所以实际生产中大多时候还是通过管理控制台进行动态配置,特别是对于运维人员来说

2.2.1 条件路由

在Dubbo2.6及更早版本中,所有的服务治理规则都只针对服务粒度,如果要把某条规则作用到应用粒度上,需要为应用下的所有服务配合相同的规则,变更,删除的时候也需要对应的操作,这样的操作很不友好,因此Dubbo2.7版本中增加了应用粒度的服务治理操作,对于条件路由(包括黑白名单),动态配置(包括权重,负载均衡)都

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值