dubbo原理和机制

dubbo原理和机制Dubbo 框架是用来处理分布式系统中 服务发现与注册以及调用问题的 并且管理调用过程 一 工作流程 服务提供者在启动的时候 会通过读取一些配置将服务实例化 Proxy 封装服务调用接口 方便调用者调用 客户端获取 Proxy 时 可以像调用本地服务一样 调用远程服务 Proxy 在封装时 需要调用 Protocol 定义协议格式 例如 DubboProtoco 将 Proxy

  • 服务提供者在启动的时候,会通过读取一些配置将服务实例化。
  • Proxy 封装服务调用接口,方便调用者调用。客户端获取 Proxy 时,可以像调用本地服务一样,调用远程服务。
  • Proxy 在封装时,需要调用 Protocol 定义协议格式,例如:Dubbo Protocol。
  • 将 Proxy 封装成 Invoker,它是真实服务调用的实例。
  • 将 Invoker 转化成 Exporter,Exporter 只是把 Invoker
    包装了一层,是为了在注册中心中暴露自己,方便消费者使用。

  • 将包装好的 Exporter 注册到注册中心。
  • 服务消费者建立好实例,会到服务注册中心订阅服务提供者的元数据。元数据包括服务 IP 和端口以及调用方式(Proxy)。
  • 消费者会通过获取的 Proxy 进行调用。通过服务提供方包装过程可以知道,Proxy 实际包装了 Invoker 实体,因此需要使用
    Invoker 进行调用。

  • 在 Invoker 调用之前,通过 Directory 获取服务提供者的 Invoker
    列表。在分布式的服务中有可能出现同一个服务,分布在不同的节点上。

  • 通过路由规则了解,服务需要从哪些节点获取。
  • Invoker 调用过程中,通过 Cluster 进行容错,如果遇到失败策略进行重试。
  • 调用中,由于多个服务可能会分布到不同的节点,就要通过 LoadBalance 来实现负载均衡。
  • Invoker 调用之前还需要经过 Filter,它是一个过滤链,用来处理上下文,限流和计数的工作。
  • 生成过滤以后的 Invoker。
  • 用 Client 进行数据传输。
  • Codec 会根据 Protocol 定义的协议,进行协议的构造。
  • 构造完成的数据,通过序列化 Serialization 传输给服务提供者。
  • Request 已经到达了服务提供者,它会被分配到线程池(ThreadPool)中进行处理。
  • Server 拿到请求以后查找对应的 Exporter(包含有 Invoker)。
  • 由于 Export 也会被 Filter 层层包裹
  • 通过 Filter 以后获得 Invoker
  • 最后,对服务提供者实体进行调用。

二、各个部分整体机制
1、提供者暴露服务的整体机制:

  • 在服务提供者初始化的时候,会通过 Config 组件中的 ServiceConfig 读取服务的配置信息。这个配置信息有三种形式,分别是 XML 文件,注解(Annoation)和属性文件(Properties 和 yaml)。
  • 在读取配置文件生成服务实体以后,会通过 ProxyFactory 将 Proxy 转换成 Invoker。
  • 此时,Invoker 会被定义 Protocol,之后会被包装成 Exporter。
  • 最后,Exporter 会发送到注册中心,作为服务的注册信息
  • 动态载入服务
  • 动态发现服务
  • 参数动态调整
  • 服务统一配置管理

在这里插入图片描述

  • 提供者(Provider)启动时,会向注册中心写入自己的元数据信息(调用方式)。
  • 消费者(Consumer)启动时,也会在注册中心写入自己的元数据信息,并且订阅服务提供者,路由和配置元数据的信息。
  • 服务治理中心(duubo-admin)启动时,会同时订阅所有消费者,提供者,路由和配置元数据的信息。
  • 当提供者离开或者新提供者加入时,注册中心发现变化会通知消费者和服务治理中心。
Providers 目录下面,存放服务提供者 URL 和元数据。 Consumers 目录下面,存放消费者的 URL 和元数据。 Routers 目录下面,存放消费者的路由策略。 Configurators 目录下面,存放多个用于服务提供者动态配置 URL 元数据信息。 

客户端第一次连接注册中心的时候,会获取全量的服务元数据,包括服务提供者和服务消费者以及路由和配置的信息。

根据 ZooKeeper 客户端的特性,会在对应 ZNode 的目录上注册一个 Watcher,同时让客户端和注册中心保持 TCP 长连接。

如果服务的元数据信息发生变化,客户端会接受到变更通知,然后去注册中心更新元数据信息。变更时根据 ZNode 节点中版本变化进行。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202735.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:25
下一篇 2026年3月19日 下午11:26


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号