DeeTune:基于 eBPF 的百度网络框架设计与应用

news2024/11/18 1:37:32

作者 | 百度APP云原生技术研发组

导读

随着云计算的技术的不断迭代演进,百度内部服务逐渐搬迁到云环境中,部署成本和效率取得明显收益,但一些可观测能力的短板和缺失逐渐显露,传统的方式往往通过植入代码进行修改来实现,但在业务形态和技术栈多样性的背景下,面临业务被侵入、沟通协调、性能、稳定性等方面的诸多问题。本文中我们介绍百度基于eBPF实现的网络框架:DeeTune,包含构建服务拓扑、流量录制、无侵入指标监控等能力,进一步提升了SRE和质量保障的工作效率。

全文3733字,预计阅读时间10分钟。

云计算的进步以及基础设施、架构改进和其他相关技术的不断迭代发展,促进了百度内部服务向云环境的迁移。尽管云服务在成本效益和运营效率方面取得了显著进步,但云环境基本功能的某些局限性和不足也日益明显。因此,某些合理的业务需求,如建立不同微服务之间的拓扑关系和进行测试会话,仍未得到满足。传统的实施方法通常是在业务系统中嵌入代码,以便于功能集成。然而,由于业务结构和技术堆栈种类繁多,这种传统方法在业务入侵、通信、协调、性能、稳定性和其他相关方面面临诸多挑战。本文介绍了基于 eBPF 的百度网络框架 DeeTune。DeeTune 包含许多功能,如服务拓扑构建、流量录制、非侵入式指标监控等。这些功能有助于提高 SRE 的效率和质量保证。

01 问题和挑战

百度的微服务规模庞大且持续增长,服务之间的依赖关系同样非常复杂。服务拓扑能够展示全局服务及服务间的调用关系,也能够携带监控信息展示服务链路间的黄金指标,因此服务链路对于系统可观测性、稳定性保障、基础设施建设都有重要意义。

由于人工梳理成本大,基于SDK和框架的传统方式面临多技术栈、业务侵入等诸多问题,全局服务拓扑能力缺失会导致一些实际业务需求无法得到满足:

稳定性保障:缺少服务及流量拓扑来支持故障期间的快速定位和精确止损。当出现稳定性问题时,希望依据服务拓扑能够快速地定位问题服务及机房,能够高效获悉并通知故障服务的依赖和被依赖方、评估故障影响面分析;

基础设施建设:缺少服务拓扑来指导机房搬迁和重建工作的开展。在以往的机房搬迁过程中,服务的梳理和确认是一项重要但繁杂工作,每次机房搬迁都需要较长的时间梳理服务及其依赖,不仅需要投入人力,还需要预留机器资源,此外还容易引起稳定性风险;

系统重构升级:缺少服务上下游关系以评估系统重构升级对上下游的影响。升级过程中如何精准通知依赖方和被依赖方,重构过程中如何获取扇入、扇出等评估服务复杂程度的数据以判断服务是否需要拆分和合并等。

庞大的服务规模、复杂的业务类型、繁多的技术栈使得质量工程师的工作面临巨大的挑战,如集成测试环境搭建、测试用例编写、测试完备度评估等。流量回放是目前较先进成熟的自动化测试解决方案之一,通过线上流量录制和线下流量回放,实现对代码的快速回归能力。能够极大地提升项目迭代效率、加速代码回归测试进度,保证业务研发质量。

没有统一的流量录制方案和工具,流量回放的能力和效果受到了很大制约,流量录制的难点在于:

[1]业务技术栈复杂,配套的基础库和框架也非常多,无法通过框架或业务改造进行统一的流量录制;

[2]即使是单一技术栈和框架,也会面临业务侵入和有感的问题,稳定性也可能会受到一定影响;

[3]服务之间的访问途径非常多,如通过网关访问、虚拟IP访问、服务间直接连接等,无法通过统一的流量出入口录制流量。

服务间调用的指标(如流量、耗时等)和跟踪是业务上用于稳定性问题和服务性能优化的重要依据,但目前所有可观测性方案都是业务侵入的,需要框架或业务自身改造。另一方面,对于主机和容器的监控,除了操作系统提供的一些静态计数器,还需要能够从不同数据源收集和聚合数据,支持一些更深度的可观测性能力,帮助分析定位系统问题。但这类能力的开发难度和资源消耗都非常大。

02 eBPF介绍

导致上述技术挑战的根本原因在于业务形态和所采用的技术栈具有多样性,横向的跨业务、跨技术栈需求会导致规范性、业务侵入、沟通协调、性能、稳定性等多方面影响。

随着eBPF技术近几年的快速发展和应用,能够为我们解决以上问题提供新的解决方案和思路:

[1]eBPF是内核相关技术,它与用户态的技术栈、框架无关;

[2]能够在业务无侵入的方式下拿到更多内核态和用户态信息,可以在很大程度上为我们提供帮助甚至是解决问题。

eBPF全称为:extended Berkeley Packet Filter,是linux内核态引入的一套通用执行引擎,它允许在Linux内核中基于事件触发运行用户自定义的代码逻辑:

[1]eBPF提供了一种软件定义内核的方法,可以使用eBPF实现Linux的动态追踪以及Linux高速的网络数据包处理等逻辑;

[2]eBPF可以在不改变内核源码或加载内核模块情况下在内核中插入指定hook代码,能在内核或应用程序执行到一个特定的 hook点时执行(预定义的 hooks点位包含系统调用、 函数出入口、内核追踪点、网络事件等)。

03 eBPF特点

[1]安全、稳定:通过严格限制访问函数集、内存地址、循环次数、代码路径触发,内核内置了稳定的API,保证只有被验证安全的 eBPF 指令才会被内核执行;

[2]高效:eBPF 指令依然运行在内核中,无需向用户态复制数据,并且借助即时编译器(JIT)将字节码转成机器码,运行效率等同于内核运行,执行更高效;

[3]热加载(持续交付):eBPF程序的加载和卸载无需重启linux系统;

[4]数据互通:maps实现用户和内核态数据互通;

[5]兼容性:eBPF提供了稳定的 API,能在老内核上执行,那它一定也能继续在新内核上执行。

使用ebpf技术,可以为安全、tracing&性能分析、网络、观测&监控等方向提供新的思路和解决方案:

[1]安全:可以从系统调用层、packet层、socket层进行安全检查,如编写防火墙程序、开发DDOS防护系统等;
[2]Tracing&性能分析:内核提供多种类型探针(probe point),如Kernel probes、perf events、Tracepoints、User-space probes、XDP等,可以编写eBPF程序收集这些探针点的信息,通过这种方式对程序进行跟踪,分析程序性能;

[3]网络:可以开发内核层高性能包处理程序,比如Cilium提供内核层的负载均衡,把service mesh往更深层推进,解决sidecar的性能问题;

[4]观测&监控:对这些探针点的持续观测和监控,可以丰富指标数据的范围和深度,更重要的是,这项工作可以在在不改变既有程序的前提下完成。

04 最佳实践

[1]Facebook:Katran 开源负载均衡器, L4LB、DDoS、Tracing

[2]Netflix:BPF 重度用户,例如生产环境 Tracing、profiling

[3]Google:Android、服务器安全、可观测性以及其他很多方面,GKE 默认使用 Cilium 作为网络基础

[4]Apple:使用 Falcon 识别安全风险

[5]AWS:使用 eBPF 作为 RPC 观测工具等

[6]Alibaba:容器网络插件Terway的增强,可观测工具 ilogtail的增强

[7]Bpftrace:提供了一种快速利用eBPF实现动态追踪的方法,可以作为简单的命令行工具或者入门级编程工具来使用;

[8]BCC:BCC 是python封装的 eBPF 外围工具集,用于创建高效内核跟踪和操作程序,可以大大方面 BPF 程序的开发;

[9]Cilium:Cilium 是一种基于eBPF的网络、可观察性和安全性解决方案。能够完全替代 kube-proxy,并提供深度网络和安全可见性和监控;

[10]DeepFlow:是中国公司开源的一款高度自动化的可观测性平台,使用 eBPF、WASM、OpenTelemetry 等新技术,极大的避免了埋点插码;

[11]Coroot:是一种基于 eBPF 的开源可观察性工具,它可以并将采集到的数据转化为可视化、可操作的指标,帮助快速识别和解决应用程序问题。

05 实现方案和应用

5.1 实现方案

虽然eBPF技术能够较好的解决技术栈依赖和业务侵入的痛点,但在百度复杂的环境中仍然需要解决很多难点。通过对各种技术的调研,结合百度业务实际需求,我们设计并实现一套切合百度需求与场景的基于eBPF的网络框架:DeeTune。它有5个子系统组成,如图1 所示:

图片

Agent:以Host Agent方式部署于物理机上,加载并执行eBPF程序,监听内核中进程的创建与销毁、TCP连接的建立和关闭、socket的读写等事件,并在用户态对相应事件处理,得到topology、metrics和trace等数据。

Server:独立部署的Otel Collector服务,接收Agent上报的可观测性数据,解析和处理后,存入相应存储,后续查询分析使用。

Storage:用于存储拓扑、录制流量、Trace系统的数据,为不同类型数据提供不同类型存储,保障存储和查询分析效率。

CProm:百度内部的Prometheus和Grafana集成服务,通过标准接口提供服务提供大数据量查询功能。

API和Web UI:提供OpenAPI和Web可视化方式访问,各角色用户通过适合的方式访问、使用平台的数据和功能。

百度微服务部署的环境使用了多个PaaS平台、多容器类型、多内核版本和多CPU架构,是eBPF Agent的落地过程中不得不考虑的问题。同时,如何高效的实现内核态中众多的tracepoint及用户态中的支持逻辑,进一步加大了系统的实现复杂度和难度,如图2所示:

在这里插入图片描述

服务信息是平台的核心基础数据,所有能力(如拓扑、监控、流量录制)都强依赖服务信息,它主要由Agent获取和解析,包括服务名、业务线、IDC、BNS(Baidu Naming Service)等。

百度内部的复杂基础设施环境,使得服务信息的获取变得复杂和困难:

[1]多PaaS平台:百度内部有着复杂的业务场景,需要不同的PaaS平台能够适配各业务场景的最佳上线和部署方式。不同的PaaS平台对服务信息的定义、在Naming Service中的注册内容和格式都不尽相同,所以平台的Agent需要做很多的兼容工作来获取当前服务和被调用服务的服务信息;

[2]多容器类型:百度内部主要由三种容器类型:分别是Matrix(百度自研容器类型)、Container、Docker。PaaS部署服务实例时,会将一些服务信息写入如Containerd、Dockerd等容器守护进程中,且不同PaaS平台可能会使用不止一种容器,因此加大了Agent获取服务信息的难度。

上述问题的解决,主要还是依赖Agent对各场景的兼容和处理,并在可能的条件下与各PaaS沟通协作,以统一规范的方式注入服务信息。

百度内部的CPU除了X86架构,还有ARM A64架构,因此我们需要分析上面每一个tracepoint是否都能在两种CPU架构上执行,如在ARM CPU上需要对tracepoint sys_enter_open/sys_exit_open做兼容处理。

Agent的运行需要一定的主机资源,因此过多的资源占用会对系统造成影响:

  • Agent系统内部一部分是CPU密集型的计算逻辑,用于处理内核事件,并最终产出Topology、Metrics、Trace等数据。

  • 另一部分是存储密集型的逻辑,用于保存计算的中间数据和运行时数据,为计算逻辑提供数据支撑。

生产环境中,每秒钟内核中可能会产生几K~几百K的事件数,因此Agent需要有高效的事件处理能力和高效的数据存取结构,减少锁的的使用和冲突等。DeeTune Agent经过几次性能优化,目前在生产环境中可以将CPU/MEM控制在 1.3Core/1G。

另一方面,由于eBPF tracepoint的存在,机器上所有网络请求都会经过内核eBPF程序的处理,因此eBPF也会对服务间调用的网络延迟产生影响。经过真实环境测试,在tracepoint的事件触发、eBPF Map的增删改查、bpf辅助函数调用和对7层协议的解包的判断大约会消耗30µs,这个时间对于绝大部分服务的影响可以忽略。

5.2 应用场景

服务拓扑

基于eBPF的服务拓扑能力,能够提供高准确度和高完备度的服务拓扑数据,能够支持高效的故障定位与分析、服务的强弱依赖、故障演练、服务影响面分析、跨机房调用等。服务拓扑能力除了可视化的拓扑图,还提供了OpenAPI供需求方二次开发定制自己的能力。

图片

流量录制

流量录制是非常态化需求,Agent需要能够根据配置,动态的按照录制策略完成录制任务。流量录制可以在平台上创建任务,可以根据拓扑信息,指定有连接关系的任意两个服务间的流量录制。同时可以指定录制策略,如录制时间、条数,要录制的接口等。QA通过任务注册时的回调或者OpenAPI获取任务及录制的流量。如图:

图片

指标监控

DeeTune默认采集汇聚了关于主机和容器的如CPU、MEM等资源指标。除了最基础的资源指标,理论上借助eBPF技术,我们几乎可以采集系统内任何指标,如:活跃&失败连接数、网络重传、流量统计、进程&容器数、内核关键指标等。通过对系统和容器进行更深度的观测,能够帮助运维工程师更高效的定位资源相关问题:如PaaS平台容易出现的资源使用不合理、容器部署密度高、资源超卖高、网络状况诊断等。

图片

06 总结

DeeTune是百度基于eBPF实现的网络框架,提供服务拓扑、流量录制、opentracing、容器资源与业务流量监控、跨机房调用检测等云原生场景基础能力,一些能力已经提供试点使用并取得了初步收益。本文分析真实问题,对eBPF技术优势和应用等方面全面介绍了DeeTune的设计方法和应用。

未来还会在一些方面持续的优化和建设:

多协议支持:目前链路指标和流量录制主要支持HTTP1、Redis、MySQL协议,未来持续对gRPC、bRPC、HTTP2还有内部其他自研协议的支持工作。

多系统联动:与部署平台、监控系统、代码与持续集成系统、质效系统的信息联动,能够帮助业务更高效发现并解决线上问题和代码问题。

——END——

推荐阅读

百度自研高性能ANN检索引擎,开源了

存储方案作为产品——Midgard探索

百度垂类离线计算系统发展历程

度加剪辑App的MMKV应用优化实践

百度工程师浅析解码策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/984693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

esp-hosted 方案介绍

esp-hosted SDK esp-hosted 方案介绍 esp-hosted 方案主要为 Linux 或者 MCU 提供无线连接功能(WiFi 或者 BT/BLE) esp-hosted 解决方案包含了 esp-hosted FG 和 esp-hosted NG 两套方案 与传统 WiFi 网卡的区别在于 ESP 设备端需要烧录固件&#xff0…

RGMII 与 GMII 转换电路设计

文章目录 前言一、RGMII 接口的信号说明二、RGMII 发送的 FPGA 实现方案1. OPPOSITE_EDGE 模式2. SAME_EDGE 模式三、使用 FPGA 实现 RGMII 接口前言 RGMII 是 IEEE802.3z 标准中定义的千兆媒体独立接口(Gigabit Medium Independent Interface)GMII 的一个替代品。相较于 GM…

详解Redis之Lettuce实战

摘要 是 Redis 的一款高级 Java 客户端,已成为 SpringBoot 2.0 版本默认的 redis 客户端。Lettuce 后起之秀,不仅功能丰富,提供了很多新的功能特性,比如异步操作、响应式编程等,还解决了 Jedis 中线程不安全的问题。 …

Python中的依赖管理是什么? - 易智编译EaseEditing

Python中的依赖管理是指管理和跟踪项目所依赖的外部软件包或库的过程。 在Python项目中,通常会使用许多第三方库或模块来实现特定的功能,而依赖管理就是确保这些库可以正确地安装、更新和卸载,以确保项目的可靠性和稳定性。 以下是Python中…

正则表达式使用总结

一、字符匹配 普通字符:普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。 元字符:元字符具有特殊的含义,例如 \d 匹配任意数字字符,\w 匹配任意字母数字字符&#xf…

Market Insight:中国低代码/零代码市场典型供应商名录(2023)发布

Market Insight:典型供应商名录根据厂商调研、行业用户点评、研究团队评估来综合确定。典型供应商名录的入围者拥有值得客户信赖的能力,这种能力可以表现在产品与技术、服务能力、市场力等其中的一项或多项。典型供应商名录的入围者可以是市场领导者&…

Exception_json反序列化失败_JSONException

TokenGroup tokenGroup JSONObject.parseObject(tokenGroup1, TokenGroup.class);com.alibaba.fastjson.JSONException: create instance error, null, public com.daikin.snapshot.controller.auth.token.TokenGroup 解决方法: 在反序列化失败的实体类添加无参构造方法

学习笔记|回顾(1-12节课)|应用模块化的编程|添加函数头|静态变量static|STC32G单片机视频开发教程(冲哥)|阶段小结:应用模块化的编程(上)

文章目录 1.回顾(1-12节课)2.应用模块化的编程(.c .h)Tips:添加函数头创建程序文件三步引脚定义都在.h文件函数定义三步bdata位寻址变量的使用 3.工程文件编写静态变量static的使用完整程序为:demo.c:seg_led.c:seg_led.h: 1.回顾(1-12节课) 一、认识单…

数字化新零售营销模式如何落地?数字化新零售营销功能推荐

​通过科技手段,针对对线下零售店面的客户进行消费行为、频次等的分析,并进一步整合线上线下资源,实现实体零售的效率充分化,便是目前很火的新零售营销模式,能够将实体门店与数字化技术进行有机结合,通过为…

在Photoshop上标小图标的操作记录

1、做小图标 收集背景图 的背景的rgb值 把这个rgb值记下来,上面的背景要用。 2、统一图标大小 宽度、高度,都设置成1.52 3、把图标往地图上拖 拖到背景图上,可以用上下左右键调整位置 4、在图片上写字 右键这个,就可以写字了。…

SpringBoot / Vue 对SSE的基本使用(简单上手)

一、SSE是什么? SSE技术是基于单工通信模式,只是单纯的客户端向服务端发送请求,服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放,等数据更新的时候才返回给客户端,当客户端接收到消息后,…

异步编程 - 06 基于JDK中的Future实现异步编程(中)_CompletableFuture源码解析

文章目录 CompletableFuture 类图结构CompletionStage接口属性resultstackasyncPool 方法CompletableFuture<Void>runAsync(Runnable runnable)CompletableFuture<U> supplyAsync(Supplier<U>supplier)CompletableFuture<U> supplyAsync(Supplier<U…

【java】【SSM框架系列】【一】Spring

目录 一、简介 1.1 为什么学 1.2 学什么 1.3 怎么学 1.4 初识Spring 1.5 Spring发展史 1.6 Spring Framework系统架构图 1.7 Spring Framework学习线路 二、核心概念&#xff08;IoC/DI&#xff0c;IoC容器&#xff0c;Bean&#xff09; 2.1 概念 2.2 IoC入门案例 …

TVC广告片制作成本多少

电视是广告传播的主要媒介之一&#xff0c;具有广泛的受众群体和较高的覆盖率。通过在电视上播放广告片&#xff0c;企业可以将产品或者服务的信息传达给大量潜在客户&#xff0c;提高知名度和曝光度。接下来由深圳TVC广告片制作公司老友记小编从以下几个方面浅析制作一条TVC广…

SAP PI 配置SSL链接接口报错问题处理Peer certificate rejected by ChainVerifier

出现这种情况一般无非是没有正确导入证书或者证书过期的情况 第一种&#xff0c;如果没有导入证书的话&#xff0c;需要在NWA中的证书与验证-》CAs中导入管理员提供的证书&#xff0c;这里需要注意的是&#xff0c;需要导入完整的证书链。 第二种如果是证书过期的&#xff0c…

Java + Selenium + Appium自动化测试

一、启动测试机或者Android模拟器&#xff08;Genymotion俗称世界上最快的模拟器&#xff0c;可自行百度安装&#xff09; 二、启动Appium&#xff08;Appium环境安装可自行百度&#xff09; 三、安装应用到Genymotion上&#xff0c;如下图我安装一个计算机的小应用&#xff…

vit模型

AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 1、问题2、模型结构 1、问题 在视觉方面&#xff0c;注意力要么与卷积网络结合使用&#xff0c;要么用于替代卷积网络的某些组件&#xff0c;同时保持其整体结构不变。 我们证明了这种对CNNs的依赖…

【C#】关于Array.Copy 和 GC

关于Array.Copy 和 GC //一个简单的 数组copy 什么情况下会触发GC呢[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]public static void Copy(Array sourceArray,long sourceIndex,Array destinationArray,long destinationIndex,long length);当源和目…

微服务·架构组件之网关- Spring Cloud Gateway

微服务架构组件之网关- Spring Cloud Gateway 引言 微服务架构已成为构建现代化应用程序的关键范式之一&#xff0c;它将应用程序拆分成多个小型、可独立部署的服务。Spring Cloud Gateway是Spring Cloud生态系统中的一个关键组件&#xff0c;用于构建和管理微服务架构中的网…

芯片方案应用于终端产品时需要哪些技术支持和保障?

在芯片方案应用于终端产品时&#xff0c;客户可能会遇到三大类问题&#xff1a;一是芯片本身的质量缺陷&#xff1b;二是芯片与终端系统软硬件联合调试及验证&#xff1b;三是终端生产。 接下来&#xff0c;小编简短介绍启英泰伦是如何全方位支持客户项目&#xff0c;保障客户…