Dubbo的调用过程及工作原理
一、图解
节点角色说明:
1️⃣Container:服务运行容器。
2️⃣Provider:暴露服务的服务提供方。
3️⃣Consumer:调用远程服务的服务消费方。
4️⃣Registry:服务注册与发现的注册中心。
服务提供者先启动 start,然后注册 register 服务。消费订阅 subscribe 服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过 notify 到消费者。
5️⃣Monitor:统计服务的调用次数和调用时间的监控中心。
这是一个监控,图中虚线表明 Consumer 和 Provider 通过异步的方式发送消息至 Monitor,Consumer 和 Provider 会将信息存放在本地磁盘,平均一分钟发送一次信息。Monitor 在整个架构中是可选的(图中的虚线并不是可选的意思),Monitor 功能需要单独配置,不配置或者配置以后,Monitor 挂掉并不会影响服务的调用。
二、调用关系说明
①服务容器 Container 负责启动加载运行服务提供者 Provider。根据 Provider 配置的文件根据协议发布服务,完成服务的初始化。
②Provider 在启动时,根据配置中的 Registry 地址连接 Registry,将 Provider 的服务信息发布到 Registry,在 Registry 注册自己提供的服务。
③Consumer 在启动时,根据消费者 XML 配置文件中的服务引用信息,连接到 Registry,向 Registry 订阅自己所需的服务。
④Registry 根据服务订阅关系,返回 Provider 地址列表给 Consumer。如果有变更,Registry 会基于长连接推送最新的服务地址信息给 Consumer。
⑤Consumer 调用远程服务时,基于软负载均衡算法,先从缓存的 Provider 地址列表中选择一台进行跨进程调用服务,假如调用失败,再重新选另一台调用。
⑥服务 Provider 和 Consumer,会在内存中记录调用次数和调用时间,每分钟发送一次统计数据到 Monitor。