Dubbo 路由规则和权重的生效时机

晴天哥 2020-01-08

云栖社区 算法 集群 负载均衡 Consumer list service

集群容错

  • 这里的 Invoker 是 Provider 的一个可调用 Service 的抽象,Invoker 封装了 Provider 地址及 Service 接口信息
  • Directory 代表多个 Invoker,可以把它看成 List ,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更
  • Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个
  • Router 负责从多个 Invoker 中按路由规则选出子集,比如读写分离,应用隔离等
  • LoadBalance 负责从多个 Invoker 中选出具体的一个用于本次调用,选的过程包含了负载均衡算法,调用失败后,需要重选

生效时机

  • 路由规则(包括条件路由和标签路由)生效的时机在于生成invoker的过程,如上图中的Router过程,路由规则会影响invoker对象的生成,例如某个service有providerA和providerB,但是路由规则规定consumer侧只能访问providerB,那么在这种情况下只会生成providerB对应的invoker对象。
  • 如果遇到No provider available for the service的错误,建议按照下面的步骤去排查,先确认service对应的provider是否存在,再排查provider和consumer的version和group是否一致,最后排查是否有条件路由影响。
  • 权重调整的生效时机其实是在负载均衡的选择invokder的过程中,如上图中的LoadBalance过程,如果权重为0且provider不唯一,那么权重为0的provider不会被调用,如果provider唯一那么任何的负责均衡策略都不生效,直接返回唯一的provider进行调用。
登录 后评论
下一篇
云栖号
7814人浏览
2020-03-04
相关推荐
Dubbo 路由功能介绍
335人浏览
2019-11-02 13:26:24
0
0
0
441