https://blog.csdn.net/xishilife/article/details/119984710

Dubbo架构

Apache Dubbo是一款高性能、轻量级的开源微服务框架。Apache Dubbo 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
image.png

虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。

  • Provider: 暴露服务的服务提供者。编写持久层和事务代码。
  • Container:服务运行容器(Spring容器),Dubbo完全基于Spring实现的。
  • Registry:服务注册与发现的注册中心。放置所有Provider对外提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。
  • Consumer:调用远程服务的服务消费者(RPC调用者,SOA调用服务的项目),编写service和controller(还可以报页面等)。调用XXXXServiceImpl中的方法。
  • Monitor:统计服务的调用次数和调用时间的监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。

执行流程

  1. start:启动Spring容器时会把Provider启动。
  2. register:把Provider相关信息注册到Registry里
  3. subscribe:Consumer从Registry中订阅Provider的信息
  4. notify:通知给Consumer
  5. invoke:Consumer根据Registry通知的信息进行调用Provider中方法。
  6. count: Consumer和Provider把调用次数信息异步发送给Monitor进行统计


Dubbo 的架构,其实很像生产者-消费者模型。只是在这种模型上,加上了注册中心和监控中心,用于管理提供方提供的url,以及管理整个过程。
那么,整个发布-订阅的过程就非常的简单了。

  • 启动容器,加载,运行服务提供者。
  • 服务提供者在启动时,在注册中心发布注册自己提供的服务。
  • 服务消费者在启动时,在注册中心订阅自己所需的服务。

如果考虑失败或变更的情况,就需要考虑下面的过程。

  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo支持的协议

  1. Dubbo协议(官方推荐协议)
  • 优点:采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)
  • 缺点:大文件上传时,可能出现问题(不使用Dubbo文件上传)
  1. RMI(Remote Method Invocation)协议
  • 优点: JDK自带的能力。
  • 缺点: 偶尔连接失败.
  1. Hessian协议
  • 优点:可与原生Hessian互操作,基于HTTP协议
  • 缺点: 需hessian.jar支持,http短连接的开销大