1. 背景介绍
1.1. 业务背景
服务网格(Service Mesh)是微服务架构中的一种重要技术,它主要处理服务之间的通信,为服务间的信息交换提供更安全、更快速且更可靠的基础设施层。服务网格将服务治理从业务逻辑中剥离出来,拆解为独立的进程,实现异构系统的统一治理和增强网络安全。
一个典型的服务网格部署示意图如下:
其中绿色方块为应用服务,蓝色方块为代理。应用服务之间通过代理进行通信,整个服务通信形成图中的蓝色网络连线,图中所有蓝色部分就形成了服务网格。
服务网格的主要特点包括:
- 无侵入性:服务网格的设计理念是将通信和管理逻辑与业务逻辑解耦,使得业务逻辑无需关注通信细节,从而实现了对业务代码的无侵入性。
- 统一治理:通过服务网格,可以实现对微服务架构中所有服务的统一治理,包括服务发现、负载均衡、安全认证、监控和跟踪等功能。
- 可扩展性:服务网格支持多种微服务框架和服务治理能力,能够轻松扩展以支持更多的服务和场景。
服务网格的架构通常包括控制平面和数据平面,其中控制平面用于配置、管理和监控数据平面中的Sidecar代理,提供服务发现、负载均衡、安全认证等功能。
数据平面主要由边车Sidecar组成,它以轻量级的网络代理形式存在,与每个微服务实例部署在同一个主机或容器中,作为服务的附属组件运行。边车的主要职责是拦截和处理服务之间的通信流量,并与控制平面进行交互,实现服务发现、负载均衡、安全认证、监控和跟踪等功能。
边车的工作流程通常包括以下几个步骤:
- 拦截通信流量:边车代理拦截服务之间的所有入站和出站请求和响应。
- 服务发现:边车代理向服务注册中心注册服务实例,并根据需要动态地发现和管理服务实例。
- 负载均衡:边车代理根据配置的负载均衡算法,将请求分发到多个服务实例中,以提高服务的可用性和性能。
- 安全认证:边车代理可以实施安全认证策略,确保服务之间的通信是安全的。
- 监控和跟踪:边车代理收集和传输服务间的通信流量数据,以实现监控、日志记录、错误追踪和性能调优等功能。
综上所述,服务网格是微服务架构中的重要组成部分,它们共同为服务间的通信提供了安全、快速且可靠的基础设施层,并实现了对业务代码的无侵入性服务治理。
1.2. 问题与挑战
在微服务架构中引入服务网格确实可以带来诸多好处,如简化服务治理、提高安全性和可观察性等,但同时也伴随着一系列问题和挑战。以下是几个主要方面:
- 边车带来的资源开销:每个微服务应用都都需要运行一个边车代理,实际部署是每个POD部署一个边车容器。边车容器需要额外的计算资源来处理服务间的通信,默认情况下每个边车容器占用0.2个CPU核。假设一台服务器运行了60个POD,那么边车容器将额外占用12个CPU核。
- 业务转发时延增加:应用程序的每个数据包都必须通过边车容器,数据包在应用程序和内核之间往返多次,如下对比是单个pod进或出增加的时延。
如图所示,右侧的是引入服务网格的方案,Pod内多了边车容器,相比左侧未引入服务网格的方案,数据包增加了内核往返次数,增加了时延。
通过上述分析可以看出,在微服务架构中引入服务网格确实带来了资源开销和转发时延的问题。
2. 方案介绍
2.1. 整体方案架构
服务网格DPU卸载解决方案将服务网格的sidecar边车容器集中卸载到DPU卡上执行,可以显著降低服务器CPU的算力消耗。同时,DPU卡高性能转发引擎实现了网络转发功能的加速,从而能够有效降低业务时延。该方案支持和原生Istio的无缝对接,对用户业务无侵入,可以实现业务的平滑迁移。
如图所示,红色系为本方案涉及本方案涉及部分,包括DPU卡及其提供给到主机侧的SRIOV vf口、主机侧CNI(istio-dpu-cni)。
业务容器的流量治理功能由DPU卡上的共享服务代理dpu-proxy提供,它由原生的边车容器从POD中抽离出来卸载到DPU卡上。它的配置由istio-dpu-cni通过对接istio获取并转换为集中式配置并下发下来。流量通过DPU提供的vf口到达DPU侧的dpu-proxy进行流量治理。
此架构的控制面仍为原生的istio,下发xDs配置给转发面;服务网格CNI(istio-dpu-cni)做为DPU卡在k8s集群的接口,无缝对接istio/收集集群信息,相当于DPU管理面给DPU组件下发配置及规则,使DPU卡可以实现原生的透明流量劫持以及流量治理的功能;DPU卡上的dpu-proxy做为服务网格的转发面,接收配置并根据配置对流量进行流量治理。
集群内的主机上插入DPU卡(红色),在主机侧集群内部署安装服务网格CNI(istio-dpu-cni组件)后,istio-dpu-cni组件可无缝对接控制平面K8s及Istio获取服务网格及网络配置、使能DPU卡上的共享服务代理dpu-proxy及转发引擎dataplane、下发相关的启动配置,主机即具有服务治理功能。之后在部署业务POD时,业务添加高速网口vf后,提供用户接口,使业务流量通过vf到达DPU侧dpu-proxy进行流量治理与转发。
2.2. 方案描述
2.2.1. 主机侧组件服务网格CNI实现管理平面
服务网格CNI(istio-dpu-cni组件)在主机侧k8s集群部署,无缝对接控制平面K8s及Istio获取配置等信息,转换为共享式代理配置下发到DPU侧的共享代理;基于DPU板卡的sriov功能,可给业务POD添加低时延高速网口vf及分配置IP地址;同时使能DPU侧转发引擎dataplane,给dataplane下发引流转发配置。
如图所示,服务网格CNI包括istio-dpu-controller、istio-dpu-adapter和istio-dpu-cni三个组件:
① istio-dpu-controller 使用daemonset方式部署在集群master上
主要是用于生成dpu级别的集中式服务网格配置,收集集群信息如pod变化、nodename等,转换为istio的inbound和internal 配置,并下发给对应节点的istio-dpu-adapter。
② istio-dpu-adapter 使用daemonset部署在每个主机节点上
主要是用于无缝对接原生控制平面istio,可自动获取配置,转换集群内信息把原生配置聚合为共享式服务网格配置下发给代理dpu-proxy。
③ istio-dpu-cni 使用daemonset部署在每个主机节点上
可配置网络模式是underlay或者overlay,针对性下发不同的网络规则;收集集群内信息(node, ns, service, pod等),提供用户接口可对dpu侧的转发引擎dataplane下发转发及引流规则,使dataplane能进行透明劫持低时延业务流量到dpu-proxy做流量治理。
除自研的CNI外,引入的开源组件为multus、sriov、spiderpool(不涉及开源组件的改动),通过二进制或pod的形式部署在需要的节点上。
2.2.2. DPU侧组件转发引擎及代理实现转发平面
如图所示,DPU侧组件包括转发引擎dataplane和共享服务代理dpu-proxy两个组件。在DPU卡的soc上,部署两个容器组件实现服务网格转发面功能,流量透明劫持及流量治理。
① 共享服务代理dpu-proxy采用容器方式部署在DPU卡的SOC上
扩展封装原生边车代理istio-proxy为DPU共享服务代理dpu-proxy。它解析istio-dpu-adapter下发的动态共享式服务网格配置,对进出本机的低时延业务流量进行治理与转发。支持原生的四层TCP流量及七层HTTP流量治理;支持generic-proxy框架对其他七层流量进行流量治理。
② 转发引擎dataplane采用容器方式部署在DPU卡的SOC上
dataplane接入协议栈(内核/用户态),并可通过vcl共享内存方式与共享服务代理dpu-proxy交互;接收istio-dpu-cni下发的转发及引流规则,根据规则把流量劫持到dpu-proxy;治理过的流量按转发规则进行网络封装及转发;dataplane加载vf-representer,通过NP(网络转发引擎)从vf-representer口收发对应pod内vf口的流量。
2.2.3. DPU共享服务代理流量转发模型
同主机内的业务互访如图(红色),client端业务流量经高速口vf到达DPU共享服务代理进行服务治理后,再经转发引擎dataplane转发到本主机的server端Pod。
跨主机业务互访如图(蓝色),client端业务流量经高速口vf到达DPU共享服务代理进行服务治理。治理后流量到达转发引擎dataplane,根据转发规则转到目标主机的DPU上共享服务代理做inbound入口流量治理。治理后流量再经转发引擎dataplane转到目标主机的server端Pod。
3. 方案优势
3.1. 方案优势
本方案创新性的将服务网格边车代理集中卸载到DPU上,可以带来一系列显著的优势,包括以下几个方面:
①显著降低服务器开销:
- 资源消耗减少:传统的边车模式需要在每个服务容器旁边部署一个边车代理,这会导致大量的资源消耗(如CPU、内存)。通过将代理集中部署在DPU上,可以消除这些额外的资源消耗,使主机侧的资源更加专注于业务逻辑处理。
- 优化资源利用率:DPU作为专门的硬件加速单元,能够更高效地处理网络流量和加密解密等任务,从而释放主机CPU资源,提高整体系统的资源利用率。
②极致的低时延:
- 用户态协议栈Bypass内核:通过将网络处理移至DPU的用户态协议栈,绕过传统的内核态处理,可以显著减少数据包在内核与用户空间之间切换的开销,从而大幅降低网络延迟。
- 服务网格快路径:自研的服务网格快路径技术可以进一步优化网络路径,减少不必要的处理步骤,确保数据包能够以最短的路径和最快的速度在网络中传输。
③即插即用:
- 无侵入式服务治理:集中式代理模式允许在不修改现有应用代码的情况下实现服务治理功能,如流量管理、安全控制等。这使得新服务的部署和现有服务的升级变得更加简单快捷。
- 灵活部署:DPU作为独立的硬件组件,可以轻松地集成到现有的服务器架构中,实现即插即用。这种灵活性使得企业可以根据实际需求快速调整网络架构和服务部署策略。
④增强的安全性和隔离性:
- 服务隔离:通过DPU上的集中式代理,可以减少不同服务和边车容器之间的干扰,防止潜在的安全风险。
综上所述,将边车代理集中卸载到DPU上是一种高效、灵活且安全的网络架构优化方案,能够显著降低开销、提升系统的性能并增强安全性和隔离性。
3.2. 未来与展望
服务网格DPU卸载解决方案,作为云原生时代的一项创新技术,其核心价值在于显著优化了边车代理模式所带来的资源消耗问题,并大幅降低了业务请求在微服务间的转发时延。
随着云原生技术和微服务架构在各行各业的深入渗透,特别是在云计算、金融科技、物联网、边缘计算等领域,对于高效、可靠、可扩展的系统架构需求日益迫切。服务网格DPU卸载解决方案正是顺应这一趋势,凭借其卓越的性能提升和资源优化能力,展现出了极为广阔的应用前景和市场空间。
更为重要的是,该方案和技术正处于快速发展和不断完善的阶段。随着DPU技术的不断创新和服务网格框架的持续演进,未来将有更多高级功能被集成到DPU中,如更精细的流量管理、增强的安全策略执行、智能的数据处理加速等。服务网格DPU卸载方案将吸引更多行业巨头、初创企业以及技术开发者加入DPU生态,共同探索和实践DPU技术的潜力,推动其标准化、生态化的发展进程。
总之,服务网格DPU卸载解决方案作为云原生和微服务架构下的技术探索,展现出了巨大的潜力,有望成为推动云原生技术普及和深化的关键力量,为数字化转型注入新的活力和动力。
本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。