流量治理规则
流量管理
流量管理的本质是将请求根据制定好的路由规则分发到应用服务上,如下图所示:
其中:
- 路由规则可以有多个,不同的路由规则之间存在优先级。如:Router(1) -> Router(2) -> …… -> Router(n)
- 一个路由规则可以路由到多个不同的应用服务。如:Router(2) 既可以路由到 Service(1) 也可以路由到 Service(2)
- 多个不同的路由规则可以路由到同一个应用服务。如:Router(1) 和 Router(2) 都可以路由到 Service(2)
- 路由规则也可以不路由到任何应用服务。如:Router(m) 没有路由到任何一个 Service 上,所有命中 Router(m) 的请求都会因为没有对应的应用服务处理而导致报错
- 应用服务可以是单个的实例,也可以是一个应用集群。
Dubbo Mesh 格式流量管理介绍
Dubbo 提供了支持 mesh 方式的流量管理策略,可以很容易实现 A/B测试、金丝雀发布、蓝绿发布 等能力。
Dubbo 将整个流量管理分成 VirtualService 和 DestinationRule 两部分。当 Consumer 接收到一个请求时,会根据 VirtualService 中定义的 DubboRoute 和 DubboRouteDetail 匹配到对应的 DubboDestination 中的 subnet,最后根据 DestinationRule 中配置的 subnet 信息中的 labels 找到对应需要具体路由的 Provider 集群。其中:
- VirtualService 主要处理入站流量分流的规则,支持服务级别和方法级别的分流。
- DubboRoute 主要解决服务级别的分流问题。同时,还提供的重试机制、超时、故障注入、镜像流量等能力。
- DubboRouteDetail 主要解决某个服务中方法级别的分流问题。支持方法名、方法参数、参数个数、参数类型、header 等各种维度的分流能力。同时也支持方法级的重试机制、超时、故障注入、镜像流量等能力。
- DubboDestination 用来描述路由流量的目标地址,支持 host、port、subnet 等方式。
- DestinationRule 主要处理目标地址规则,可以通过 hosts、subnet 等方式关联到 Provider 集群。同时可以通过 trafficPolicy 来实现负载均衡。
这种设计理念很好的解决流量分流和目标地址之间的耦合问题。不仅将配置规则进行了简化有效避免配置冗余的问题,还支持 VirtualService 和 DestinationRule 的任意组合,可以非常灵活的支持各种业务使用场景。
流量治理
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 January 28, 2023: Update _index.md (#1965) (fa1c249696)