3.x 核心能力

当前 Dubbo Go 3.x 核心能力

相关示例:

Dubbo Go 3.x 的核心能力已经围绕 Triple 协议、应用级服务发现、metadata 驱动的服务自省,以及 SDK 侧治理能力展开。这些内容不再只是 3.0 版本的新特性,而是当前 Dubbo Go 应用的常规开发模型。

Triple 协议

Triple 是 Dubbo Go 3.x 推荐使用的 RPC 协议,主要实现位于:

  • protocol/triple
  • protocol/triple/triple_protocol
  • tools/protoc-gen-go-triple

Triple 基于 HTTP/1.1 和 HTTP/2 语义,并在线路协议上兼容 gRPC。对于 protobuf 服务,用户先定义 .proto 文件,再通过 protoc-gen-goprotoc-gen-go-triple 生成 Go 代码,最后将生成的 handler 注册到 Dubbo Go server。

运行时链路遵循 Dubbo 通用协议抽象:

  • provider 侧:server.Register(...) 构造 service options 和 invoker,再通过协议 Export 暴露服务;
  • consumer 侧:生成的 client 调用 client.Connection,由它构造 invocation 并委托给协议 Refer 返回的 invoker;
  • request header、response header、trailer 等 metadata 通过 Triple metadata API 暴露。

应用级服务发现

应用级服务发现是当前 Dubbo Go 默认的服务发现模型。provider 注册应用实例和 metadata;consumer 解析 service 到 application 的映射,再通过 metadata 还原可调用的服务 URL。

重要代码入口包括:

  • registry/options.goWithRegisterServiceWithRegisterInterfaceWithRegisterServiceAndInterface 等 registry type 选项;
  • registry/servicediscovery:应用级注册和订阅;
  • metadata/reportmetadata/mapping:metadata 上报和 service-name mapping;
  • options.goWithRemoteMetadataWithMetadataServiceProtocol 等实例级 metadata 选项。

注册模式有三种:

模式API含义
serviceregistry.WithRegisterService()注册应用级实例,推荐作为默认模式。
interfaceregistry.WithRegisterInterface()注册接口级 provider URL。
allregistry.WithRegisterServiceAndInterface()迁移阶段同时注册两种模型。

详细行为和默认值见 应用级服务发现

Metadata 模式

应用级服务发现需要 provider metadata。Dubbo Go 支持:

  • local metadata:provider 通过 metadata service 暴露 metadata;
  • remote metadata:provider 将 metadata 上报到 metadata center,consumer 从 metadata center 读取。

默认 metadata type 是 localmetadata-service-protocol 默认是 dubbo,也可以通过 dubbo.WithMetadataServiceProtocol(...) 显式设置。

治理与 Mesh 集成

Dubbo Go 将许多治理能力放在 SDK 侧扩展点上:

  • filter:承载 metrics、tracing、token、泛化调用、优雅停机等横切逻辑;
  • router:支持 condition、tag、script、mesh 风格路由;
  • load balance 和 cluster:负责调用选择和容错策略。

常用内置实现由 imports 包统一导入,这些包的 init 函数会将扩展注册到 common/extension