可扩展性适配

可扩展性适配

从设计上,Dubbo 具有高度的可扩展性。通过这些扩展点,您可以

  • 拦截流量并控制其行为。
  • 微调 Dubbo 的一些默认策略和实现。
  • 将 Dubbo 服务适配到内部微服务集群或其他主流开源组件。

一切皆可扩展

Dubbo 的可扩展性允许将项目方便地划分为各种子模块,实现热插拔。用户可以根据自己的需求替换 Dubbo 的原生实现,以满足特定的业务需求。

Admin Screenshot

  • 协议和编码扩展:通信协议、序列化协议等。
  • 流量控制扩展:集群容错策略、路由规则、负载均衡、限流、回退、熔断等。
  • 服务治理扩展:服务注册中心、配置中心、元数据中心、分布式事务、全链路追踪、监控系统等。
  • 诊断和调优扩展:流量统计、线程池策略、日志记录、QoS 维护命令、健康检查、配置加载等。

基于扩展点的微服务生态系统

众多扩展点和抽象构成了 Dubbo 与各种微服务生态系统组件集成以及实现微服务治理能力的基础。

Dubbo 的各种语言 SDK 采用“微内核 + 插件”的设计模式。几乎每个进程中的所有核心节点都被定义为扩展点。官方发布的组件也以扩展点实现的形式发布,因此 Dubbo 可以平等地对待所有官方和第三方组件扩展。

  • 可扩展性适配是实现 Dubbo 微服务生态系统的关键。生态系统组件,例如全链路追踪和服务注册中心实现,都是基于 Filter、Registry 和 DynamicConfiguration 等扩展点进行适配的。
  • 可扩展性适配为用户提供了最大的灵活性,允许开发人员根据需要与内部组件集成并自定义核心功能。

extensibility-echosystem.png

以上是 Dubbo 中的一些核心扩展点,按架构层级分类

  • 协议通信层
  • 流量控制层
  • 服务治理层

协议通信层

正如通信协议部分所强调的,Dubbo 不绑定任何特定协议。用户可以选择任何 RPC 和序列化协议的组合,例如 Triple、gRPC、Dubbo2、REST、自定义协议等。

Protocol and Coding Principles

协议

Protocol 扩展点定义了相应的 RPC 协议。通过利用此扩展点,Dubbo 可以充当统一的微服务开发和治理框架,允许底层通信协议灵活选择。官方支持最流行的 RPC 通信协议,如果您希望使用公司特定的 RPC 通信协议,请通过 Protocol 提供自定义扩展实现。

序列化

Serialization 扩展点定义了序列化协议扩展。官方上,Dubbo 提供了 Fastjson、Protobuf、Hessian2、Kryo 和 FST 等序列化协议。

流量控制层

Dubbo 在服务调用链中预埋了大量的扩展点,允许用户控制运行时流量的流向,并改变运行时调用的行为。

Protocol and Coding Principles

过滤器

过滤器是 Dubbo 中的流量拦截器,基于 AOP 设计模式。它们对每个服务调用进行预处理和后处理,处理诸如访问日志、加密/解密、流量统计、参数验证等任务。

路由

路由是 Dubbo 中流量控制的关键组件。它将满足特定条件的流量定向到特定地址子集组,从而实现各种流量控制模式。

负载均衡

在 Dubbo 中,负载均衡在路由之后工作。它确保在一段时间内,调用均匀地分布到地址子集中的所有机器上。

服务治理层

经典的 Dubbo 部署架构包括注册中心(服务发现)、配置中心和元数据中心。

Service Governance Architecture

本节主要从架构和实现的角度讨论 Dubbo 的服务治理。

注册中心

注册中心是 Dubbo 服务发现能力的基础,官方支持 Zookeeper、Nacos、Etcd、Consul 和 Eureka 等注册中心。

配置中心

配置中心是动态控制 Dubbo 行为的关键组件。在 流量管理 中分发的所有规则首先保存在配置中心。

元数据中心

与配置中心相比,从用户的角度来看,元数据中心是只读的。

自定义扩展示例

以下示例演示了如何扩展 Dubbo 来解决实际问题。

更多扩展点

本文列出了 Dubbo 中一些常用的扩展点。但是,还有许多其他扩展点可用于灵活的自定义。每个语言的 SDK 在扩展定义和配置方法方面可能有所不同。


上次修改时间:2023 年 10 月 16 日:将部分特性概述文档翻译成英文 (#2831) (0c0180f8128)