InfoQ|eBPF 在网易轻舟云原生的应用实践( 二 )
2.2 在网络性能优化方面 Facebook 用 BPF 重写了他们的大部分基础设施 。 例如使用 BPF 替换了 iptables 和 network filter , 并且 Facebook 基本上已经将他们的负载均衡器从 IPVS 换成了 BPF , 此外他们还将 BPF 用在流量优化(traffic optimization)、网络安全等方面 。
Redhat 则正在开发一个叫 bpffilter 的上游项目 , 将来会替换掉内核里的 iptables , 也就是说 , 内核里基于 iptables 做包过滤的功能 , 以后都会用 BPF 替换 。
国内方面腾讯云也对外宣称利用 eBPF 替换 conntrack 模块使 k8s service 短链接性能提升 40% 。
3. 牛刀小试—eBPF 在网易轻舟的应用及落地 eBPF 在网易轻舟的应用也分为系统探测和网络性能优化两个方面 。
3.1 系统探测 我们现有监控工具只能监控内核主动暴漏的数据 , 存在监控盲点 。 通过修改内核或开发内核模块的方式进行监控 , 上线周期长、风险高 , 针对不同版本内核的适配费时费力还容易出错 。 所以我们在开源项目 ebpf_exporter 的基础上完成 ebpf 监控子系统的开发 。
eBPF 监控子系统架构:
本文插图
eBPF 监控子系统采用容器化部署 , 支持通过 K8s 部署和管理 , 监控数据通过 Prometheus 进行持久化存储并通过 Grafana 进行展示 。 eBPF 监控子系统具备如下特性:
- 平台无关且内核无关;
- 安全检查以保证绝对安全;
- 可对内核进行任意监控;
- 支持 pid/container/pod 级别的细粒度监控;
- 支持监控项动态开启、关闭;
- 支持监控项在线升级;
- 提供统一的监控项开发接口;
- 提供 metrics/json 格式的监控数据及统一的数据获取接口 ;
- 支持 K8s 部署、管理;
- 内核类型和数据结构是不断变化的 , 包括函数接口 , eBPF 程序对内核的引用如何保证在不同版本内核中有效;
- 不同版本内核的内存布局也是不同的 , 具体信息必读从独立的内核环境中才能获得;
针对第一个问题(即 kernel 代码一直在变的问题) , 内核中的 eBPF 机制抽象了一组有限的“稳定的接口” , 这些接口屏蔽了不同内核版本之间的差异 , 但这只是一组有限的接口 , 如果出于需求 eBPF 程序对内核耦合过深 , 我们依然需要通过 #if#else 来迎合不同版本内核之间的差异(例如数据结构和函数接口的差异) 。
所以 eBPF 的内核无关是有限的 , 需要 eBPF 机制和开发者共同努力实现 。 此外除了 BCC 这种即时编译的方案 , 还有另外一种名为 CO-RE (Compile Once – Run Everywhere) 的编译方式 , 其核心依赖于 BTF(更加先进的 DWARF 替代方案) , 该方案本文不做展开 , 感兴趣的同学可自行 Google CO-RE 。
监控功能的开发:eBPF 监控子系统是一个框架 , 本身不具备任何监控功能 。 eBPF 监控子系统开发完成后 , 我们又根据产品方、业务方以及运维方的需求 , 开发了一些具体的监控功能 , 例如:
- 监控 HTTP 协议的网络请求延迟 。 因为以往线上业务发生请求超时 , 我们无法确定延迟是发生在网络传输阶段 , 还是业务处理阶段 , 加大了问题排查的复杂度和难度 。 通过该监控功能 , 开发运维人员则可以清晰的知道延迟发生的具体阶段 , 大大缩短了相关问题的排查解决时间 。
推荐阅读
- 网易|OPPO Enco W31网易云音乐定款鉴赏:小姐姐与音乐相遇
- 网易|网易云式浪漫:耳机分你一半一起听
- 网易|是营销过度还是真有实力?网易严选人体工学椅值得买吗?
- |耳机分你一半一起听,吹爆网易云这个新功能
- 搜狐科技|【科技早报】B站二季度净亏损同比扩大81% 网易市值突破700亿美元
- 丁磊|市值超700亿美元!网易股价大涨,丁磊身家超黄铮
- 互联网|以后听歌要“更贵”?腾讯阿里战争“升级”,网易“投靠”马云
- 网易|游戏营收占比近八成!电商引擎熄火 网易下个增长点何在?丨财报AlphaGo
- 音乐|网易云音乐联合搜狗输入法推出音乐帮聊功能
- 网易有道|网易有道“两头难顾”:营销费用节节攀升之下 AI创新是不是“伪命题”?
