InfoQ|eBPF 在网易轻舟云原生的应用实践( 四 )


InfoQ|eBPF 在网易轻舟云原生的应用实践
本文插图
Sockops 组件完整的架构设计如下图所示:
InfoQ|eBPF 在网易轻舟云原生的应用实践
本文插图
主要分为用户态 DaemonSet 程序和运行在内核中的 eBPF 程序两部分组成:

  1. 用户态 DaemonSet 程序 , 主要负责一些管控面的操作 , 包括监控 K8S、docker 的一些信息或者事件 , 然后动态更新 eBPF 程序的配置(用来支持细粒度开启关闭 sockops 功能) , 还包括编译加载 eBPF 程序、提供整个 sockops 组件的升级、对接 prometheus 提供自身的一些监控信息等功能;
  2. 内核态 eBPF 程序 , 则主要负责上面讲到的全部数据面的加速功能 , 并根据用户态 DaemonSet 程序同步的配置 , 具体实现一个细粒度的 scokops 功能的开启关闭;
Sockops 组件加速调优结果:最终 , 我们通过 sockops 组件加速 , envoy 单 worker 情况下:
  • both sidecar 时延降低约 15-20% , qps 提高约 20%;
  • client sidecar 时延降低约 10% , qps 提高约 20%;
4 未来展望 在系统探测方面 , 目前我们仅仅是通过 eBPF 解决了一些迫切的问题 , 这些问题通过常规的监控手段无法做到或者代价高昂 。 随着 eBPF 监控在内部的应用 , 我们还会逐步通过 eBPF 监控替换掉以往一些比较重的、对上层应用侵入比较深的监控功能 , 一来可以提高监控模块的性能 , 二来也提高了监控模块的可运维性 。 此外我们仍在开发一些相对复杂的 eBPF 监控功能 , 这些监控功能结合自动诊断平台 , 可以协助开发运维人员或者直接自动发现一些线上排查起来非常繁琐的问题 , 以此提高上层产品的 SLA 保障水平 。
在网络性能优化方面 , 我们有一些对 iptables 依赖较重的场景(例如 kube-proxy) , 我们会利用 eBPF 并结合社区的一些成果 , 给出性能优化方案及原型的开发验证 。 目前已经有很多非常好的开源项目 , 提供了类似的功能 , 代表性的如 cilium , 我们也针对 cilium 做了一系列验证 , 在性能及功能方面并未达到我们的预期 , 所以我们决定还是从我们自身的需求入手 , 借助社区已有的成果自研一个轻量级的组件来满足需求 。
作者介绍:李阳 , 网易杭州研究院轻舟云原生系统资深开发工程师 , 7 年开发经验 , 曾就职于绿盟科技和 360 安全研究院 , 专注于 linux 内核开发、系统和网络安全及性能调优 。 目前在网易杭研负责虚拟化网络数据面的性能调优工作 。
陈启钧 , 网易杭州研究院轻舟云原生资深开发工程师 , 十年以上开发经验 , 曾就职于华为 , 主要从事存储网络管理、容器以及网络虚拟化相关工作 , 专注于发现并解决问题 。 目前在网易杭研主要负责 VPC 网络、轻舟容器网络、轻舟服务网格等方面的性能调优工作 , 主要关注 Kubernetes、eBPF/XDP、用户态协议栈相关技术 。
InfoQ 粉丝专享福利来喽!各位小伙伴可以扫描下方海报二维码「进群」 , 即有机会获得漫威钢铁侠(珍藏版)手办一整套、Java 高手笔记本 + 极客时间专栏免费课程、数据结构与算法地图 2.0/ 编程必备速查知识手册 / 计算机基础课地图等技术必备知识手册 。 不仅有很多超值奖品还可以和 InfoQ 的读者一起畅所欲言 , 和编辑们零距离接触 。 扫描海报二维码了解更多活动详情 , 快来加入我们吧!
点个在看少个 bug??


推荐阅读