Dubbo Mesh
从设计理念上,Dubbo Mesh 强调控制平面的统一管控、标准化和治理能力,同时在数据平面给予更多选择,包括 Sidecar Mesh 和 Proxyless Mesh 等部署模式。多种部署模式为企业提供更多选择。通过混合部署模式,在实现服务治理控制平面共享的同时,可以更好地响应不同场景(性能、部署复杂度等)的部署需求,适应复杂的基础设施环境,提升架构整体的可用性。
背景
在云原生背景下,如果我们将 Service Mesh 理解为底层基础设施,在 Mesh 架构下,一些原来耦合在业务流程中的微服务治理能力正在被 Mesh 接管。传统的微服务框架更关注 RPC 协议和编程模型。以下是流行的 Mesh 产品 Istio 的架构图
在 Mesh 架构下
- 统一的控制平面提供证书管理、可观测性、流量治理等能力
- Sidecar 使得 SDK 更轻量级,侵入性更低,更好地实现透明升级、流量拦截等
Dubbo Mesh 整体架构
- 数据平面基于 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 代理,拦截所有进出流量,完成路由寻址等服务治理任务。
社区推荐 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 概念中比较先进的部分。
通过不同语言版本的 Dubbo3 SDK,可以直接实现 xDS 协议解析,Dubbo 进程可以直接与控制平面(Control Plane)通信,从而实现控制平面对流量控制、服务治理、可观测性、安全等方面的统一管控,避免 Sidecar 模式带来的性能损耗和部署架构的复杂性。
Proxyless 模式支持 Dubbo2 和 Triple 协议,但只支持应用级服务发现的地址模型。
在 Dubbo3 Proxyless 架构模式下,Dubbo 进程会直接与控制平面通信,Dubbo 进程会继续保持直接通信模式。我们可以看到 Proxyless 架构的优势
- 没有额外的代理损耗,因此更适合对性能敏感的应用
- 更有利于遗留系统的平滑迁移
- 架构简单,易于运维部署
- 适用于几乎所有部署环境
详细的方案设计和示例,请参考
Dubbo 控制平面治理规则
待定
Dubbo SDK 提供了非常灵活的配置来控制服务治理行为,例如接口粒度的服务地址发现能力、接口粒度的配置同步等。这些能力使应用程序开发和部署更加灵活。但是,在一般的 Mesh 部署方案或产品下,一些高级功能可能会受到限制,这通常会影响易用性和灵活性。为此,Dubbo 计划提供自研的控制面产品,以最大限度地发挥 Dubbo3 在 Mesh 系统中的能力。