Dubbo基本结构及执行流程

Dubbo组成结构:

  1. Provider暴漏服务的服务提供方 Protocol 负责提供者和消费者之间协议交互数据 Service真实的业务服务信息,接口和实现类 Container Dubbo的运行环境
  2. Consumer:调用远程服务的服务消费方 Protocol 负责提供者和消费者之间协议交互数据 Cluster 感知提供者的列表信息 Proxy 提供者服务的调用代理类,由它接管Consumer中的接口调用逻辑
  3. Register 注册中心,用于服务发现和路由配置等工作,提供者和消费者都会在这里进行注册
  4. Monitor 用于提供和消费者的统计

Dubbo的启动和执行流程

  1. 提供者端启动,容器负责把Service信息加载,并通过Protocol注册到注册中心
  2. 消费者端启动,通过监听提供者列表感知提供者信息,并在提供者发生改变是,通过注册中心及时通知消费端
  3. 消费方通过Proxy模块发起请求
  4. 利用Cluster模块来选择真实的要发送给提供者的信息
  5. 交由Consumer中的Protocol把信息发送给提供者
  6. 提供者同样需要通过Protocol模块来处理消费者信息
  7. 最后由真正的服务提供者Service进行处理

Dubbo整体链路调用流程

  1. 消费者通过Interface进行方法调用,统一交由消费者端的Proxy,通过ProxyFactory进行代理对象的创建,使用jdk、javassist技术
  2. 交给Filter这个模块,做统一的过滤请求,在SPI案例中设计过
  3. 进入最主要的Invoker调用逻辑 通过Directory去配置中读取信息,最终通过list方法获取所有的Invoker 通过Cluster模块,根据选择的具体路由规则,来选取Invoker列表 通过loadBalance模块,根据负载均衡策略,选择一个具体的Invoker来处理我们的请求 如果执行中出现错误,并且Consumer阶段配置了重试机制,则会重新尝试执行
  4. 继续经过Filter进行执行功能的前后封装,Invoker选择具体的执行协议
  5. 客户端进行编码和序列化,然后发送数据
  6. 到达Consumer中的Server,在这里进行反编码和反序列化来接收数据
  7. 使用Exported选择执行器
  8. 交给Filter进行一个提供者端的过滤,达到Invoker执行器
  9. 通过Invoker调用接口的具体实现,然后返回
经验分享 程序员 微信小程序 职场和发展