可扩展性适配
从设计上,Dubbo 具有高度的可扩展性。通过这些扩展点,您可以
- 拦截流量并控制其行为。
- 微调 Dubbo 的一些默认策略和实现。
- 将 Dubbo 服务适配到内部微服务集群或其他主流开源组件。
一切皆可扩展
Dubbo 的可扩展性允许将项目方便地划分为各种子模块,实现热插拔。用户可以根据自己的需求替换 Dubbo 的原生实现,以满足特定的业务需求。
- 协议和编码扩展:通信协议、序列化协议等。
- 流量控制扩展:集群容错策略、路由规则、负载均衡、限流、回退、熔断等。
- 服务治理扩展:服务注册中心、配置中心、元数据中心、分布式事务、全链路追踪、监控系统等。
- 诊断和调优扩展:流量统计、线程池策略、日志记录、QoS 维护命令、健康检查、配置加载等。
基于扩展点的微服务生态系统
众多扩展点和抽象构成了 Dubbo 与各种微服务生态系统组件集成以及实现微服务治理能力的基础。
Dubbo 的各种语言 SDK 采用“微内核 + 插件”的设计模式。几乎每个进程中的所有核心节点都被定义为扩展点。官方发布的组件也以扩展点实现的形式发布,因此 Dubbo 可以平等地对待所有官方和第三方组件扩展。
- 可扩展性适配是实现 Dubbo 微服务生态系统的关键。生态系统组件,例如全链路追踪和服务注册中心实现,都是基于 Filter、Registry 和 DynamicConfiguration 等扩展点进行适配的。
- 可扩展性适配为用户提供了最大的灵活性,允许开发人员根据需要与内部组件集成并自定义核心功能。
以上是 Dubbo 中的一些核心扩展点,按架构层级分类
- 协议通信层
- 流量控制层
- 服务治理层
协议通信层
正如通信协议部分所强调的,Dubbo 不绑定任何特定协议。用户可以选择任何 RPC 和序列化协议的组合,例如 Triple、gRPC、Dubbo2、REST、自定义协议等。
协议
Protocol 扩展点定义了相应的 RPC 协议。通过利用此扩展点,Dubbo 可以充当统一的微服务开发和治理框架,允许底层通信协议灵活选择。官方支持最流行的 RPC 通信协议,如果您希望使用公司特定的 RPC 通信协议,请通过 Protocol 提供自定义扩展实现。
序列化
Serialization 扩展点定义了序列化协议扩展。官方上,Dubbo 提供了 Fastjson、Protobuf、Hessian2、Kryo 和 FST 等序列化协议。
流量控制层
Dubbo 在服务调用链中预埋了大量的扩展点,允许用户控制运行时流量的流向,并改变运行时调用的行为。
过滤器
过滤器是 Dubbo 中的流量拦截器,基于 AOP 设计模式。它们对每个服务调用进行预处理和后处理,处理诸如访问日志、加密/解密、流量统计、参数验证等任务。
路由
路由是 Dubbo 中流量控制的关键组件。它将满足特定条件的流量定向到特定地址子集组,从而实现各种流量控制模式。
负载均衡
在 Dubbo 中,负载均衡在路由之后工作。它确保在一段时间内,调用均匀地分布到地址子集中的所有机器上。
服务治理层
经典的 Dubbo 部署架构包括注册中心(服务发现)、配置中心和元数据中心。
本节主要从架构和实现的角度讨论 Dubbo 的服务治理。
注册中心
注册中心是 Dubbo 服务发现能力的基础,官方支持 Zookeeper、Nacos、Etcd、Consul 和 Eureka 等注册中心。
配置中心
配置中心是动态控制 Dubbo 行为的关键组件。在 流量管理 中分发的所有规则首先保存在配置中心。
元数据中心
与配置中心相比,从用户的角度来看,元数据中心是只读的。
自定义扩展示例
以下示例演示了如何扩展 Dubbo 来解决实际问题。
更多扩展点
本文列出了 Dubbo 中一些常用的扩展点。但是,还有许多其他扩展点可用于灵活的自定义。每个语言的 SDK 在扩展定义和配置方法方面可能有所不同。