基于规则的流量治理
一、 Dubbo流量治理体系概览
Dubbo 提供了丰富的流量管控策略:
• 地址发现与负载均衡,地址发现支持服务实例动态上下线,负载均衡确保流量均匀的分布到每个实例上。
• 基于路由规则的流量管控,路由规则对每次请求进行条件匹配,并将符合条件的请求路由到特定的地址子集。
服务发现保证调用方看到最新的提供方实例地址,服务发现机制依赖注册中心(Zookeeper、Nacos、Istio等)实现。在消费端,Dubbo提供了多种负载均衡策略,如随机负载均衡策略、一致性哈希负载、基于权重的轮询、最小活跃度优先、P2C等。
Dubbo的流量管控规则可以基于应用、服务、方法、参数等粒度精准的控制流量走向,根据请求的目标服务、方法以及请求体中的其他附加参数进行匹配,符合匹配条件的流量会进一步的按照特定规则转发到一个地址子集。流量管控规则有以下几种:
• 条件路由规则
• 标签路由规则
• 脚本路由规则
• 动态配置规则
如果底层用的是基于HTTP的RPC协议(如REST、gRPC、Triple等),则服务和方法等就统一映射为HTTP路径(path),此时Dubbo路由规则相当于是基于HTTP path和headers的流量分发机制。
注:
Dubbo中有应用、服务和方法的概念,一个应用可以发布多个服务,一个服务包含多个可被调用的方法,从抽象的视角来看,一次Dubbo调用就是某个消费方应用发起了对某个提供方应用内的某个服务特定方法的调用,Dubbo的流量管控规则可以基于应用、服务、方法、参数等粒度精准的控制流量走向。
1. 工作原理
以下是Dubbo单个路由器的工作过程,路由器接收一个服务的实例地址集合作为输入,基于请求上下文(Request Context)和(Router Rule)实际的路由规则定义对输入地址进行匹配,所有匹配成功的实例组成一个地址子集,最终地址子集作为输出结果继续交给下一个路由器或者负载均衡组件处理。
通常,在Dubbo中,多个路由器组成一条路由链共同协作,前一个路由器的输出作为另一个路由器的输入,经过层层路由规则筛选后,最终生成有效的地址集合。
• Dubbo中的每个服务都有一条完全独立的路由链,每个服务的路由链组成可能不通,处理的规则各异,各个服务间互不影响。
• 对单条路由链而言,即使每次输入的地址集合相同,根据每次请求上下文的不同,生成的地址子集结果也可能不同。
《Apache Dubbo微服务开发从入门到精通》——基于规则的流量治理—— 一、 Dubbo流量治理体系概览(2): https://developer.aliyun.com/article/1224384