写点什么

服务网格数据面性能深度调优

汪翰林 、陈启钧

  • 2022-03-14
  • 本文字数:2411 字

    阅读完需:约 8 分钟

服务网格数据面性能深度调优

来源 | 经授权转载自 网易杭州研究院 公众号


服务网格作为云原生的重要技术,提升了微服务的流控、熔断、升级等服务治理能力,但同时 sidecar 的引入也导致了时延的增加。网易数帆通过对时延引入的具体分析,尝试利用 eBPF 和用户态协议栈技术,来对时延进行优化,并最大限度地考虑兼容性,做到对容器网络、sidecar 应用的无侵入加速。

时延分析



服务网格中 sidecar 的引入在整个网络路径上增加了两个网络处理单元,从而不可避免地会引入时延。针对 sidecar 本身逻辑的优化来优化时延是社区的一个方向,比如 envoy 社区针对 mixer 的优化。另外一个方向是针对链路底层做优化。



如果打开整个链路来看,sidecar 会多引入 Service 到 sidecar 的链路以及 sidecar 到 sidecar 的链路,客户端和服务端总共多经过了四次内核态协议栈。我们通过了火焰图分析了 sidecar 应用 envoy 的 CPU 占用,发现内核态协议栈的 CPU 占比近 50%,所以针对内核态协议栈的优化效果理论上应该非常可观。


另外也可以针对容器网络做优化,比如使用 SRIOV 容器网络方案,不过会涉及对已有的容器网络方案的改造,有侵入性。

eBPF Sockops 优化 Service 和 sidecar 通信



Service 和 sidecar 之间属于同一个节点的两个容器间的通信,可以采用 Sockops 组件进行加速。


Sockops 原本是开源 Cillium 中的一个组件,利用 sockmap 和 sk redirect 技术直接绕过 TCP/IP 协议栈将报文直接发给对端 socket,从而来加速同节点 socket 之间的通信。我们借用相关实现并作了增强开发,来适配 sidecar 的场景。


Sockops 加速在《eBPF 在网易轻舟云原生的应用实践》中有详细说明。


从最终测试结果来看,使用 Sockops 加速 Service 和 sidecar 的通信,可以降低时延 10% 左右。

用户态协议栈优化 sidecar 和 sidecar 通信



sidecar 和 sidecar 之间的通信会涉及跨节点,无法使用 Sockops 进行加速,这里我们使用用户态协议栈替换内核态协议栈实现。用户态协议栈相较内核态协议栈可以在两个方面带来性能的提升:


  • 消除内核态和用户态切换的开销;

  • 将协议栈的实现代码放到独立的用户态进程中实现,去除 sidecar 中协议栈实现的 CPU 开销;


下面来具体说明相关实现。

VPP+VCL 分离式部署节省 CPU 资源


为了兼顾到性能和资源占用,我们选择 VPP 作为用户态协议栈。VPP 作为独立进程实现用户态协议栈,并提供轻量级的 VCL 动态库供 sidecar 集成以实现 socket 接口的劫持,VPP 和 VCL 之间通过共享内存进行通信。



其中:


VCL - 实现 Socket 类接口劫持并和后端 VPP 完成交互


FIFO - 是基于共享内存封装的消息队列,用于 VCL 和 VPP 之间通信


Session - 维持传输层和上层应用会话之间的对应


TCP/IP - 对应内核的 TCP/IP 协议栈实现


AF_XDP - 实现将网卡的报文收发卸载到用户态


可见,VPP+VCL 分离式的部署模式将协议栈从应用端剥离,VPP 作为实现协议栈的独立进程可以服务于节点上的所有 sidecar,从而将 sidecar 和协议栈的 1:1 绑定部署关系,变为 N:1 的独立部署关系,节省了总体的 CPU 资源占用。同时,sidecar 也将更多的 CPU 资源用于自身业务逻辑的处理,提高了 CPU 资源的利用率,从而降低了 sidecar 节点的处理时延。

无侵入设计提升易用性


无侵入设计体现在南北两个方向,南向对接容器网络,而北向对接 sidecar。


北向对接 sidecar 时,会通过 VCL 动态库供 sidecar 集成。VCL 动态库中会自动劫持 socket 接口,这样就无需 sidecar 修改代码。而且 VCL 动态库支持 LD_PRELOAD 加载方式,仅需要 sidecar 应用启动时指定此环境变量来配置 VCL 动态库的路径即可。


南向对接容器网络会麻烦一些。容器网络种类繁多,但是最终都会插入一个网口给 POD 使用,此网口以 veth 口居多,也有可能是 VF 口。由于并不是所有的流量都需要走 sidecar,比如 Service 和宿主机通信就只需要走内核态,那么如何在保留现有内核通信通道的情况下进行用户态协议栈的加速呢?



我们借助 AF_XDP 来做流量的分流。即先使用 XDP 针对于特定报文进行过滤,满足条件则送入 VPP,否则继续走内核。


报文分流到 VPP,再上送 sidecar 后,sidecar 还需要将报文发送给 Service,这条路径只能走内核,可以通过 Sockops 进行加速。

双栈支持


双栈支持其实包括两个方面。


一个是基于 eth0 口基于 AF_XDP 的双栈分流,这个在上节中已经做了说明。


另一个是 sidecar 的双栈支持,因为 sidecar 也需要通过内核态和 Service 进行通信。


sidecar 的双栈支持需要 VCL 中针对报文做区分,需要走内核态的报文则重新调用原生的 socket 接口让报文走内核态协议栈。

优化效果



针对不同的 RPS 测试 Both Sidecar 时延的情况,ua 表示启用了用户态协议栈优化。可以看出,用户态协议栈时延降低 30% 左右,Sockops 时延降低 10% 左右,两者结合后时延降低 35% 左右。

写在最后


AF_XDP+ 用户态协议栈 +Sockops 针对服务网格 sidecar 场景,优化了内核协议栈的 CPU 资源占用,降低了 sidecar 所引入的端到端时延,且对当前的容器网络以及 sidecar 应用无修改,做到无侵入加速。用户态协议栈和 Sockops 的管控基于 Kubernetes Operator 进行开发,部署和运维也非常简单,根据需要可以单独进行部署,也可以合并使用。后续我们也会考虑将针对服务网格的这些加速套件进行开源。


另外,通过加速组件的灵活组合,除了 sidecar 加速,我们也上线了针对 API 网关的加速,单独的用户态协议栈加速组件我们也在拓展到 Redis、Nginx 等加速场景。


作者简介:


汪翰林,网易数帆系统开发专家,17 年软件开发老兵。曾就职于华三和华为,从事安全、视频监控、大数据和网络虚拟化等技术产品研发,目前在网易数帆轻舟云原生团队负责高性能网络技术预研和产品落地工作。


陈启钧,网易数帆资深工程师,十年以上开发经验,曾就职于华为,主要从事存储网络管理、容器以及网络虚拟化相关工作,专注于发现并解决问题。目前在网易数帆主要负责 VPC 网络、轻舟容器网络、轻舟服务网格等方面的性能调优工作,主要关注 Kubernetes、eBPF/XDP、用户态协议栈相关技术。

2022-03-14 15:094738

评论

发布
暂无评论
发现更多内容

Web3 软件系统的开发框架

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

对话|Data Agent:企业首位AI数据专家如何颠覆传统分析?

火山引擎开发者社区

AI

大庆等保测评周期与复测要求解析

等保测评

就在今天,来开源生态大会和 KWDB 一起「玩转开源」!

KaiwuDB

GreatSQL函数索引失效分析:排序规则匹配机制

GreatSQL

回收站的照片被删除了怎么找回?回收站被清空了还能恢复文件吗?

阿拉灯神丁

EasyRecovery 文件恢复 照片恢复 数据恢复软件 备份 & 恢复

轻松上手|用 TRAE + Context7 MCP Server 创建代码助手智能体

火山引擎开发者社区

Trae

iPad需要备份数据吗?苹果手机第三方备份软件哪个好?

阿拉灯神丁

imazing iTunes 苹果手机备份 icloud

Ubuntu 22.04系统KWDB数据库安装部署使用教程_案例传感器

KaiwuDB

炸了!AWS 推出 S3 Vectors

AI数据云Relyt

AI AWS 向量数据库 LLM

【超实用】苹果电脑无法往U盘里存东西怎么办?Mac文件无法拷贝进U盘怎么解决?

阿拉灯神丁

NTFS 磁盘管理器 Tuxera NTFS2024 Mac磁盘管理 磁盘格式读写软件

中烟创新数字档案:开启烟草行业“智”理新动能

中烟创新

微软2011年5月安全公告:漏洞可利用性指数改进与预先通知服务

qife122

漏洞利用性指数 微软安全响应中心

大数据-49 Redis 缓存异常全攻略:穿透、击穿、雪崩、热Key、大Key通杀指南

武子康

Java redis 大数据 缓存 分布式

WAIC 送票丨最关心语音 AI 的一群人都来世界人工智能大会了

声网

TCL电子(01070.HK)发布中期业绩盈喜预告 预期2025年上半年经调整归母净利润同比增幅约为45%至65%

财见

等保测评的行业适用性与案例分析

等保测评

Perplexity CEO专访:AI浏览器大战、挑战谷歌以及广告模式的终结

AI数据云Relyt

openai ChatGPT LLM AIAgent AI浏览器

TRAE 新增自定义模型服务商、进程资源管理器,国际版支持银联支付!

火山引擎开发者社区

Trae

javax.security.auth.login.LoginException: Message stream modified (41)

刘大猫

人工智能 数据挖掘 算法 数据分析 大模型

京东图片搜索商品API指南

tbapi

京东API 京东图片搜索接口 京东拍立淘接口 京东以图搜索接口 京东图搜API

数据分析与AI丨如何选择合适的知识图谱软件,CTO/CIO 必问10个关键点

Altair RapidMiner

人工智能 AI 数据分析 汽车 数字孪生

安卓应用如何快速移植到鸿蒙系统?这个D2C技巧,开发必备!

职场工具箱

android 开发 HarmonyOS D2C 设计稿转代码

KWDB 2.2.2 版本发布,修复产品典型问题,优化系统性能和稳定性

KaiwuDB

远程踏勘系统(源码+文档+讲解+演示)

深圳亥时科技

黑龙江等保测评的核心流程

等保测评

webgl开发框架及特点

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

基于YOLOv8的高压电线(绝缘子、电缆)有无故障检测识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolo

京东商品评论API指南

tbapi

京东API 京东商品评论API 京东评论API 京东商品评论数据采集 京东评论数据采集

智能查重防串标:筑牢烟草行业招投标诚信“防火墙”

中烟创新

从谨慎检查到一键接受,TRAE 如何成为我的主力 IDE?

火山引擎开发者社区

Trae

服务网格数据面性能深度调优_语言 & 开发_InfoQ精选文章