作者: 江河清

Dubbo Mesh 作为 Dubbo 全面拥抱云原生的又一个里程碑项目,将为 Dubbo 用户供给滑润晋级到 Service Mesh 架构的解决计划,同时持续依据 Dubbo 强大可扩展性底座供给生产级服务办理、服务管控等才能。

本文将对 Dubbo Mesh 全体规划原则、布置架构与插件管控机制的规划做全体阐明。

规划原则

Dubbo Mesh 以插件化的方法接入各生态,除了部分保持根底运转的架构外绝大部分的组件支撑热插拔,支撑依据不同布置场景动态选择布置方法。

插件化才能的规划延续了 Dubbo 一向的高可扩展性的特征,依据这样的一个根底才能,开发者能够依据自己所需的实在布置场景进行定制,如接入内部的自建 DevOps 渠道等。经过插件化的才能,也使得 Dubbo Mesh 在未来能更容易适配新的根底组件;经过热插拔的规划,绝大部分的新功用将能在生产环境滑润落地,很大程度上阻隔因为中间件改变给事务带来的改变协作影响。

Dubbo Mesh 总体技术架构方案

布置架构

从架构与布置形状上来说 Dubbo Mesh 明确的区分为控制面与数据面。

其间控制面作为服务办理核心,具有抽象的、统一的模型,负责与底层根底设施的对接,供给从发动配置、服务发现、流量办理到认证鉴权等的统一办理入口。

数据面则专心在事务编程模型与通讯才能上,依据多种布置形状(SDK、Sidecar、Agent)接入服务办理才能,依据动态布置才能从事务代码中解耦出来。

从全体组件角色来说,Dubbo Mesh 中有两种角色的组件:根底组件、扩展性组件。

根底组件由 Dubbo 原生供给,用于构建整个系统,如上图中的 Admin 用户管控组件、Dynamic Binary Push 动态分发组件(下文中会打开阐明)、Proxy 数据署理组件等。

扩展性组件由 Dubbo 和其他生态共建供给,用于供给特定化才能,如上图中功用的 Test 服务测验组件、Config 配置动态修正组件、Skywalking 全链路追寻组件等。各扩展性组件均规划为可热插,能够可选的动态开关部分才能。

数据流

上图中除了布置架构的描述之外,还标识了在 Dubbo Mesh 这样一个布置架构下的数据流向。

Dubbo Mesh 供给了两种通讯形式,分别是 Proxy 形式与直连形式。在根底组件中的 Proxy 供给到达数据面的通路,一个 Any 数据流,不绑定任何上层语义。扩展性组件可选经过 Proxy 进行互通,或许直接和数据面进行互通。

Proxy 形式不需要组件感知集群的连接形式,适用于一些比较简单、无独立服务端的组件完成,依据 Dubbo 的才能能直接完成与数据面的通讯,下降办理连接的难度。直连形式用于集成一些杂乱、有独立服务端的组件,如全链路追寻组件一般都需要独立布置中心化的收集服务端,假如流量经过 Dubbo Proxy 进行转发在必定程度上会导致布置成本的提高。

数据面架构

Dubbo Mesh 的数据面规划分红 Java Proxyless 和 Sidecar 两种形式。Java Proxyless 形式供给依据 Java ClassLoader 动态加载才能下的高性能布置计划;Sidecar 形式供给依据外置进程替换的跨语言、跨架构的通用布置计划。

Java Proxyless

Dubbo Mesh 总体技术架构方案

Java Proxyless 形式是从惯例 Dubbo Java 布置形式晋级而来的,经过将 Dubbo 内核与完成别离的方法,依据 Java ClassLoader 的动态加载机制避免详细完成才能与事务代码进行耦合,供给中间件热晋级才能。

如上图所示,Dubbo SDK 界说 Dubbo 扩展点,如 Router、Registry、LoadBalance 等,扩展点尽可能复用 Dubbo 已有的 SPI 机制。此外,Dubbo SDK 中集成一个统一的 DubboInitializer,运转时从控制面拉取所需运转时代码,拼装成为一个完好的 Dubbo SDK。

Sidecar

Dubbo Mesh 总体技术架构方案

Sidecar 形式下 Dubbo 作为一个独立进程运转,经过 UDS / TCP 等本地通讯方法或许请求阻拦的方法管控流量。经过在 Sidecar 进程中进行数据加工、流量定制化路由等方法达到流量办理的方针。

Sidecar 形式也类似 Proxyless 形式供给扩展点,支撑不同场景下自界说拼装完成、动态替换晋级的才能。因为 Sidecar 是从流量层面直接进行办理,和事务代码本身不耦合,能够供给跨语言、跨架构的通用办理才能。

插件推送形式

在前面的两种数据面架构中都触及到了扩展完成的动态下发的才能,本节中将对这部分才能做详细阐述阐明。

Java Proxyless

Dubbo Mesh 总体技术架构方案

Java Proxyless 形式下的扩展是经过 Java ClassLoader 进行动态类加载的,因此只需要拿到对应扩展的完成类既可完成加载。在 Dubbo Mesh 中经过统一的 Dynamic Binary Push 动态分发组件能够完成将每个插件中自带的对应类完成下发到数据面中进行加载。

Sidecar(Preview)

Dubbo Mesh 总体技术架构方案

Sidecar 形式下,有多种方法能完成热收效。这里以替换进程的方法为例,在控制面中动态拼装 Sidecar 的代码并编译,经过Dynamic Binary Push 动态分发组件动态下发 Sidecar 的二进制包到数据面中的 Dubbo Agent,由 Dubbo Agent 负责拉起新的进程并切换流量到新的进程上。

更多关于 Dubbo Mesh 的动态能够重视 Apache Dubbo 社区官方大众号(ApacheDubbo),及时获取最新的消息。

微信大众号 | ApacheDubbo

钉钉群号 |21976540

官网 |dubbo.apache.org

点击“此处”,直达 Dubbo 官网!