- 这里的 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进行调用。