暑期Dubbo开源复盘


#Dubbo 3.0 服务自省模式

术语约定

  • Service:SOA 或微服务中的“服务”,或称之为“应用”,具有全局唯一的名称
  • Service Name: 服务名称,或应用名称
  • Servce Instance:服务实例,或称为应用实例(Application Instance),表示单个 Dubbo 应用进程
  • Registry:注册中心
  • Dubbo 服务:又称之为“Dubbo 业务服务”,包含 Java 接口、通讯协议,版本(version)和分组(group)等元信息
  • Dubbo 服务 ID:唯一鉴定 Dubbo 服务的元数据,用于 Dubbo 服务暴露(发布)和订阅
  • Provider:Dubbo 服务提供方
  • Consumer:Dubbo 服务消费方
  • Dubbo 服务暴露:也称之为 Dubbo 服务发布,或英文中的“export”、”exported”
  • Dubbo 应用服务:也称之为 Dubbo 业务服务,或业务 Dubbo 服务

传统架构

Apache Dubbo 是一款面向接口代理的高性能 RPC 框架,提供服务注册与发现的特性,其基础架构如下图所示:

image.png

(图 1)

  • Provider 为服务提供方,提供 Java 服务接口的实现,并将其元信息注册到 Dubbo 注册中心(过程 1.register 所示)
  • Consumer 为服务消费端,从 Dubbo 注册中心检索订阅的 Java 服务接口的元信息(过程 2.subscribe 所示),通过框架处理后,生成代理程序执行远程方法调用(过程 4.invoke 所示)
  • Registry 为注册中心,属于注册元信息中心化基础设施(如 Apache Zookeeper 或 Alibaba Nacos),为 Provider 提供注册通道,为 Cosumer 提供订阅渠道。同时,注册中心支持注册元信息变更通知,通知 Consumer 上游 Provider 节点的变化(如扩容或缩容)。而注册元信息均以 Dubbo URL 的形式存储
  • Monitor 为服务治理平台,提供开发和运维人员服务查询、路由规则、服务 Mock 和测试等治理能力

综上所述,Dubbo 注册与发现的对象是 Dubbo 服务(Java 接口),而其载体为注册元信息,即 Dubbo URL,如:dubbo://192.168.1.2:20880/com.foo.BarService?version=1.0.0&group=default,通常包含必须信息,如服务提供方 IP 和端口、 Java 接口,可选包含版本(version)和分组(group)等。服务 URL 所包含的信息能够唯一界别服务提供方的进程。

从 Provider 和 Consumer 向注册中心注册的实体不再是 Dubbo URL,而是服务实例(Service Instance),一个服务实例代表一个 Provider 或 Consumer Dubbo 应用进程。服务实例属性包括:

  • 服务名(ServiceName):该名称必须注册中心全局唯一
  • 主机地址(Host)
  • 服务端口(Port)
  • 元数据(Metadata):服务实例的附加信息,用于存储 Dubbo 元数据信息
  • 激活状态

注册中心

注册中心得具备一下能力:

  • 服务实例变化通知(Notify):当 Consumer 订阅的 Provider 服务实例发生变化时,注册中心能够实时通知 Consumer
  • 心跳检测(Heartbeats):注册中心能够检测失效的实例