Dubbo核心概念

一次RPC调用过程

image.png

架构

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题。

  • 服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件,而是_对 Dubbo 治理体系的抽象表达_。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面。
  • Dubbo 数据面。数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作。
    • 服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程
    • 服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程

源码模块分层

  • 第一层:service 层,接口层,给服务提供者和消费者来实现的
  • 第二层:config 层,配置层,主要是对 dubbo 进行各种配置的
  • 第三层:proxy 层,服务代理层,无论是 consumer 还是 provider,dubbo 都会给你生成代理,代理之间进行网络通信
  • 第四层:registry 层,服务注册层,负责服务的注册与发现
  • 第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务
  • 第六层:monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控
  • 第七层:protocal 层,远程调用层,封装 rpc 调用
  • 第八层:exchange 层,信息交换层,封装请求响应模式,同步转异步
  • 第九层:transport 层,网络传输层,抽象 mina 和 netty 为统一接口
  • 第十层:serialize 层,数据序列化层

主要节点角色【重要】

Dubbo的主要节点角色有五个:

  1. Container:服务运行容器,为服务的稳定运行提供运行环境首先,提供方、消费方的正常运行,离不开一个大的前提也就是运行环境,我们需要一个容器来承载应用的运行,可以是Tomcat,也可以是Jetty容器,还可以是Undertow容器等,只要能负责启动、加载,并运行服务提供者来提供服务就可以了。
  2. Provider:服务提供方,暴露接口提供服务对外提供后台服务,将自己的服务信息,注册到注册中心
  3. Consumer:服务消费方,调用已暴露的接口从注册中心获取远程服务的注册信息,然后进行远程过程调用
  4. Registry:注册中心,管理注册的服务和接口用于服务端注册远程服务以及客户端发现服务。目前主要的注册中心可以借由zookeeper、eureka、consul、etcd等开源框架实现。比如阿里的Dubbo就是采用zookeeper实现注册中心。Dubbo强依赖注册中心
  5. Monitor:监控中心,统计服务调用次数和调用时间为了更好的的调试,发现问题,需要监控,因此Dubbo引入了监控中心,可以对消费者和提供者进行管理。非强制依赖的管理工具

核心链路

image.png

Dubbo 数据面

从数据面视角,Dubbo 帮助解决了微服务实践中的以下问题:

  • Dubbo 作为 服务开发框架 约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式
  • Dubbo 作为 RPC 通信协议实现 解决服务间数据传输的编解码问题

服务开发框架


Dubbo 作为服务开发框架包含的具体内容如下:

  • RPC 服务定义、开发范式。比如 Dubbo 支持通过 IDL 定义服务,也支持编程语言特有的服务开发定义方式,如通过 Java Interface 定义服务。
  • RPC 服务发布与调用 API。Dubbo 支持同步、异步、Reactive Streaming 等服务调用编程模式,还支持请求上下文 API、设置超时时间等。
  • 服务治理策略、流程与适配方式等。作为服务框架数据面,Dubbo 定义了服务地址发现、负载均衡策略、基于规则的流量路由、Metrics 指标采集等服务治理抽象,并适配到特定的产品实现。

通信协议

Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。

Dubbo 服务治理

Dubbo 与 Spring 家族

Dubbo 与 gRPC

Dubbo 与 gRPC 最大的差异在于两者的定位上:

  • gRPC 定位为一款 RPC 框架,Google 推出它的核心目标是定义云原生时代的 rpc 通信规范与标准实现;
  • Dubbo 定位是一款微服务开发框架,它侧重解决微服务实践从服务定义、开发、通信到治理的问题,因此 Dubbo 同时提供了 RPC 通信、与应用开发框架的适配、服务治理等能力。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!