Dubbo Mesh

从设计理念上,Dubbo Mesh 强调控制平面的统一管控、标准化和治理能力,同时在数据平面给予更多选择,包括 Sidecar Mesh 和 Proxyless Mesh 等部署模式。多种部署模式为企业提供更多选择。通过混合部署模式,在实现服务治理控制平面共享的同时,可以更好地响应不同场景(性能、部署复杂度等)的部署需求,适应复杂的基础设施环境,提升架构整体的可用性。

背景

在云原生背景下,如果我们将 Service Mesh 理解为底层基础设施,在 Mesh 架构下,一些原来耦合在业务流程中的微服务治理能力正在被 Mesh 接管。传统的微服务框架更关注 RPC 协议和编程模型。以下是流行的 Mesh 产品 Istio 的架构图

istio

在 Mesh 架构下

  • 统一的控制平面提供证书管理、可观测性、流量治理等能力
  • Sidecar 使得 SDK 更轻量级,侵入性更低,更好地实现透明升级、流量拦截等

Dubbo Mesh 整体架构

istio

  • 数据平面基于 Triple 协议进行 RPC 通信;
  • 地址发现模型采用应用级服务发现,支持超大规模实例集群,同时提供更丰富的服务治理能力;
  • Dubbo Mesh 控制平面基于业界主流的 Istio 扩展,支持 Dubbo 服务发现定制化方案,提供更丰富的流量控制能力;
  • 数据平面支持两种模式:ThinSDK + Sidecar(如 Envoy)和 Proxyless;

对于老的 Dubbo2 用户,或者已经升级 Dubbo3 但还没有迁移新特性的用户,可以考虑参考其他 Mesh 开源社区提供的 Dubbo 方案(如 Aeraki)。但部分功能可能受限,会存在一定的性能和容量瓶颈。

Dubbo Sidecar Mesh

Dubbo 提供 ThinSDK 部署模式,在这种模式下,Dubbo ThinSDK 只会提供面向业务应用的编程 API 和 RPC 传输通信能力,而其余的服务管理,包括地址发现、负载均衡、路由寻址等,全部下沉到 Sidecar,由 Sidecar 负责直接与控制平面通信,接收各种流量控制规则。以下是基本的部署架构图。Dubbo ThinSDK 和 Sidecar 部署在同一个 pod 或容器中。通过在周边部署独立的控制平面,实现流量和治理的统一管控。控制平面和 Sicecar 通过图中虚线所示的 xDS 协议进行配置和分发,Dubbo 进程之间的通信不再是直接连接模式,而是改为通过 Sidecar 代理,拦截所有进出流量,完成路由寻址等服务治理任务。

dubbo-sidecar

社区推荐 Envoy 作为 sidecar,通信协议使用 Triple,可以获得更好的网关穿透和性能体验。对于暂时无法升级 Triple 的仍然使用 Dubbo2 协议的用户,可以参考 Envoy 和 Aeraki Mesh 提供的 Dubbo2 协议支持方案。

ThinSDK + Sidecar 模式下的 Mesh 架构有很多优点,比如平滑升级、多语言、业务侵入小,但也带来了一些额外的问题,比如

  • Sidecar 通信带来额外的性能损耗,在网络调用拓扑复杂的场景下会尤其明显。
  • Sidecar 的存在使得应用的生命周期管理变得更加复杂。
  • 部署环境受限,并非所有环境都能满足 Sidecar 部署和请求拦截的要求。

详细的方案设计和示例,请参考

Dubbo Proxyless Mesh

作为 ThinSDK + Sidecar 模式的补充,Dubbo 社区很早就构思和思考过 Dubbo 直接连接控制平面的方案,目前称为 Proxyless Mesh 模式。Proxyless 模式将微服务回归到 2.x 时代的部署架构。如下图所示,它与我们上面看到的 Dubbo 经典服务治理模型非常相似,所以这种模式并不新鲜。Dubbo 从一开始就是这样的设计模型。但是,与 Mesh 架构相比,Dubbo2 没有强调控制平面的统一管理和控制,而这正是 Service Mesh 所强调的。它强调流量、可观测性、证书等的标准化管理、控制和治理,这也是 Mesh 概念中比较先进的部分。

dubbo-proxyless

通过不同语言版本的 Dubbo3 SDK,可以直接实现 xDS 协议解析,Dubbo 进程可以直接与控制平面(Control Plane)通信,从而实现控制平面对流量控制、服务治理、可观测性、安全等方面的统一管控,避免 Sidecar 模式带来的性能损耗和部署架构的复杂性。

Proxyless 模式支持 Dubbo2 和 Triple 协议,但只支持应用级服务发现的地址模型。

在 Dubbo3 Proxyless 架构模式下,Dubbo 进程会直接与控制平面通信,Dubbo 进程会继续保持直接通信模式。我们可以看到 Proxyless 架构的优势

  • 没有额外的代理损耗,因此更适合对性能敏感的应用
  • 更有利于遗留系统的平滑迁移
  • 架构简单,易于运维部署
  • 适用于几乎所有部署环境

详细的方案设计和示例,请参考

Dubbo 控制平面治理规则

待定

Dubbo SDK 提供了非常灵活的配置来控制服务治理行为,例如接口粒度的服务地址发现能力、接口粒度的配置同步等。这些能力使应用程序开发和部署更加灵活。但是,在一般的 Mesh 部署方案或产品下,一些高级功能可能会受到限制,这通常会影响易用性和灵活性。为此,Dubbo 计划提供自研的控制面产品,以最大限度地发挥 Dubbo3 在 Mesh 系统中的能力。


上次修改时间:2023 年 2 月 22 日:合并重构网站 (#2293) (4517e8c1c9c)