设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

知道了这些内容,闭着眼面试Dubbo!(3)

发布时间:2019-12-06 01:46 所属栏目:117 来源:站长网
导读:Cluster,Directory,Router,LoadBalance 核心接口 分布式服务多以集群形式出现,Dubbo 也不例外。在消费服务发起调用的时候,会涉及到 Cluster,Directory,Router,LoadBalance 几个核心组件。 Cluster,Directo

知道了这些内容,闭着眼面试Dubbo!

Cluster,Directory,Router,LoadBalance 核心接口

分布式服务多以集群形式出现,Dubbo 也不例外。在消费服务发起调用的时候,会涉及到 Cluster,Directory,Router,LoadBalance 几个核心组件。

知道了这些内容,闭着眼面试Dubbo!

Cluster,Directory,Router,LoadBalance 调用流程

先看看他们是如何工作的:

①生成 Invoker 对象。根据 Cluster 实现的不同,生成不同类型的 ClusterInvoker 对象。通过 ClusertInvoker 中的 Invoker 方法启动调用流程。

②获取可调用的服务列表,可以通过 Directory 的 List 方法获取。这里有两类服务列表的获取方式。

分别是 RegistryDirectory 和 StaticDirectory:

RegistryDirectory:属于动态 Directory 实现,会自动从注册中心更新 Invoker 列表,配置信息,路由列表。

StaticDirectory:它是 Directory 的静态列表实现,将传入的 Invoker 列表封装成静态的 Directory 对象。

在 Directory 获取所有 Invoker 列表之后,会调用路由接口(Router)。其会根据用户配置的不同策略对 Invoker 列表进行过滤,只返回符合规则的 Invoker。

假设用户配置接口 A 的调用,都使用了 IP 为 192.168.1.1 的节点,则 Router 会自动过滤掉其他的 Invoker,只返回 192.168.1.1 的 Invoker。

这里介绍一下 RegistryDirectory 的实现,它通过 Subscribe 和 Notify 方法,订阅和监听注册中心的元数据。

Subscribe,订阅某个 URL 的更新信息。Notify,根据订阅的信息进行监听。包括三类信息,配置 Configurators,路由 Router,以及 Invoker 列表。

管理员会通过 dubbo-admin 修改 Configurators 的内容,Notify 监听到该信息,就更新本地服务的 Configurators 信息。

同理,路由信息更新了,也会更新服务本地路由信息。如果 Invoker 的调用信息变更了(服务提供者调用信息),会根据具体情况更新本地的 Invoker 信息。

知道了这些内容,闭着眼面试Dubbo!

Notify 监听三类信息

通过前面三步生成的 Invoker 需要调用最终的服务,但是服务有可能分布在不同的节点上面。所以,需要经过 LoadBalance。

Dubbo 的负载均衡策略有四种:

Random LoadBalance,随机,按照权重设置随机概率做负载均衡。

RoundRobinLoadBalance,轮询,按照公约后的权重设置轮询比例。

LeastActiveLoadBalance,按照活跃数调用,活跃度差的被调用的次数多。活跃度相同的 Invoker 进行随机调用。

ConsistentHashLoadBalance,一致性 Hash,相同参数的请求总是发到同一个提供者。

最后进行 RPC 调用。如果调用出现异常,针对不同的异常提供不同的容错策略。Cluster 接口定义了 9 种容错策略,这些策略对用户是完全透明的。

用户可以在,,, 标签上通过 Cluster 属性设置:

Failover,出现失败,立即重试其他服务器。可以设置重试次数。

Failfast,请求失败以后,返回异常结果,不进行重试。

Failsafe,出现异常,直接忽略。

Failback,请求失败后,将失败记录放到失败队列中,通过定时线程扫描该队列,并定时重试。

Forking,尝试调用多个相同的服务,其中任意一个服务返回,就立即返回结果。

Broadcast,广播调用所有可以连接的服务,任意一个服务返回错误,就任务调用失败。

Mock,响应失败时返回伪造的响应结果。

Available,通过遍历的方式查找所有服务列表,找到第一个可以返回结果的节点,并且返回结果。

Mergable,将多个节点请求合并进行返回。

Dubbo 远程调用

服务消费者经过容错,Invoker 列表,路由和负载均衡以后,会对 Invoker 进行过滤,之后通过 Client 编码,序列化发给服务提供者。

知道了这些内容,闭着眼面试Dubbo!

过滤,发送请求,编码,序列化发送给服务提供者

从上图可以看出在服务消费者调用服务提供者的前后,都会调用 Filter(过滤器)。

可以针对消费者和提供者配置对应的过滤器,由于过滤器在 RPC 执行过程中都会被调用,所以为了提高性能需要根据具体情况配置。

Dubbo 系统有自带的系统过滤器,服务提供者有 11 个,服务消费者有 5 个。过滤器的使用可以通过 @Activate 的注释,或者配置文件实现。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读