新华通讯社主管

首页 >> 正文

eBPF技术在资本市场的可观测性应用
2024-11-08 来源:经济参考网

  随着证券行业数字化转型的加速,云原生技术如容器、微服务架构等已经广泛落地应用。然而,这些新技术带来的技术复杂性,也给业务监控和问题诊断带来了新的挑战。本文总结了基于eBPF技术进行可观测性系统构建的研究和探索,主要包括以下几个部分:首先,介绍了云原生技术下可观测性技术的挑战和研究目的;接着,简要介绍了eBPF技术,包括原理和开发流程;然后,详细阐述了采用eBPF技术进行相关指标的采集和数据分析的方法和实践;最后,对整个研究进行总结和展望。通过本文的探索,希望能为证券行业提供新的监控和诊断思路。

  一、研究背景和目的

  近年来,证券行业在数字经济和实体经济融合的推动下,加快了数字化转型。证券公司积极应用云计算等新兴技术,尤其是以容器和Kubernetes为基础的云原生架构已经成为行业标配。然而,这些新技术虽然带来了资源利用率提升、开发效率增加和运维弹性提高等优点,但是这些优点都是以服务整体技术栈变得更加复杂为代价的,传统的监控、排障方法已经无法满足需求。

  eBPF技术作为可观测性解决方案,近年来备受关注。相较于传统监控手段,eBPF具有无侵入性和灵活性,降低了业务接入难度。通过eBPF技术,在不修改源代码的前提下,可以获取服务间互相访问的可观测数据。因此,我们希望本次基于eBPF技术的可观测性系统研究成果能为证券行业提供一种高效、可靠的可观测性解决方案,降低运维成本和风险。此外,我们期望为资本市场和证券行业提供更高效、精准的监测与评估手段,从而提升交易系统的可靠性和安全性,满足监管要求,增强投资者信任度,推动整个行业的稳健发展。

  二、eBPF技术简介

  (一)概述

  eBPF技术是一种源于传统BPF(Berkeley Packet Filter)技术的新型可编程内核技术,是Linux内核的一项革命性技术。它提供了能够在运行时动态安全地修改Linux内核行为的机制,而无需改变内核代码或者额外加载内核模块。eBPF技术目前主要用于可观测性数据采集、网络技术增强以及安全审计和安全阻断。

  (二)技术原理分为:

  1、eBPF虚拟机及指令集

  eBPF虚拟机用于执行eBPF指令/字节码。虚拟机内建有一个校验器,用以确保eBPF字节码的安全性,防止可能导致内核崩溃的操作,例如死循环、无效跳转和内存越界访问等。eBPF虚拟机基于寄存器架构,其指令集包含常见的算术逻辑运算、位操作和跳转等指令。

  2、eBPF程序类型eBPF程序都是内核事件触发的,不同的hook点能够执行不同类型的eBPF程序,且从hook点获取的入参/出参也各不相同。在可观测性领域,本文关注的主要是kprobe类型,即BPF_PROG_TYPE_KPROBE。

  3、eBPF程序互操作与数据交互

  eBPF提供了一组预定义的helper函数和一组特定的内核函数,实现与内核的安全交互。在可观测性领域,通常需要将eBPF程序采集到的数据进行统计和记录,然后导出以供外部程序进一步处理和分析。为处理结构化数据,eBPF提供了统一的Map能力的抽象,实现用户态控制进程与eBPF执行代码之间的双向通信。

  4、eBPF程序开发脚手架

  eBPF程序的开发和加载,需要一系列的脚手架工具,包括编译、加载、内核交互获取数据等。目前业内有传统的bcc以及比较新的libbpf。本文选择了bcc作为开发脚手架框架。

  (三)可观测性eBPF程序的开发和运行流程

图1 开发和运行eBPF程序大致流程

  如上图所示,开发者在完成eBPF程序代码编写后,通过Clang编译器将其编译成字节码。这些字节码随后会被加载到内核中。在加载过程中,内核中的eBPF校验器会对执行指令的安全性进行检查。校验通过后,字节码将被即时编译(JIT),并在事件触发时被调用。当相关的eBPF代码因事件触发而被执行时,其逻辑可以执行数据采集、统计、采样和记录等操作。在用户态,通过查询Map来获取eBPF采集到的数据,从而进一步处理和分析这些信息。

  三、研发实践

  (一)需求分析

图2 可观测数据项的概览

  1、网络观测需求

  在典型的容器网络方案中,当访问Kubernetes集群外部网络时,通常在节点出口进行SNAT(源地址网络地址转换)。这种方法会导致在集群外部网络出现异常时,难以精确定位到具体的业务Pod。在进行性能分析时,常用的解决方案是在应用层使用APM(应用性能管理)工具,然而,这种方法对业务具有侵入性,并增加了业务的复杂性。一个高效的网络可观测性系统应满足以下需求:首先,数据采集需要细粒度。其次,网络指标应得到增强,系统应额外采集常见错误和异常场景的指标。最后,网络协议解析应做到无侵入性。

  2、系统观测需求

  系统问题主要可以分为以下几类:CPU调度、内存分配管理、文件操作及IO访问。对于CPU调度,随着现代机器中的CPU核数逐渐增加,CPU架构日趋复杂,需要对CPU的调度情况进行监控。在内存分配管理方面,需要对内存缓存的使用情况、内存申请延迟以及内存回收过程进行细粒度的监测。对于文件操作,需要采集相关文件操作的延迟数据。

  (二)整体系统设计

图3 采集设计框图

  上图是容器云场景下的整体数据采集设计框图:

  ·Agent、Cluster、Storage是数据流的核心组成部分;

  ·Agent以Daemonset的方式部署到每台机器上,负责采集指标以及监听的IP和端口的元信息;

  ·Cluster Agent以集群的方式部署,负责整合指标和监听的IP和端口元信息,形成容器到容器的访问Metric;

  ·Storage负责存储Metric;

  ·Topology Compute是一个存储的消费端,负责消费Metric产生拓扑图数据。

  (三)技术实现

  网络指标包含四层网络指标和七层应用层协议指标。四层网络指标涵盖了TCP的收发带宽、TCP RTT平均和最大延迟等。而七层应用层指标涉及HTTP、Redis、MySQL等协议的请求、错误和延迟指标。四层指标主要用于基础设施的网络监控。通过细粒度的网络指标可以感知容器之间互访的网络质量,进行网络带宽审计,识别并绘制出容器之间的业务依赖关系,形成业务依赖拓扑。此外,这些指标还可以记录业务容器的网络访问痕迹,帮助发现潜在的安全风险并进行影响评估。七层应用层指标则用于业务监控,通常用于观测业务的稳定性以及无侵入的业务调用拓扑分析。

  1、四层指标采集实现

图4 四层指标采集逻辑示意图

  Agent负责从内核的eBPF程序的Metric Map中提取具体的TCP指标,以及监听的IP和端口等原始信息。这些原始数据需要进一步与业务数据进行关联处理。在原始数据采集过程中,涉及的技术要点如下:

  (1)TCP连接会话跟踪。主要维护一个以socket为键的Map,用于记录与socket对应的监控元数据。

  (2)内核conntrack跟踪。主要用于将经过NAT转换后的IP地址和端口还原为真实的地址和端口,确保数据正确关联到相应的业务。

  (3)指标跟踪。Metric Map主要用于记录点对点粒度的网络监控数据,包括各种TCP指标。

  (4)TCP端口监听跟踪。主要用来记录机器监听的IP和端口以及容器的对应关系,这有助于更好地进行元数据分析,包括分辨是否为客户端或服务端。

  指标采集需要在不同的hook点上实现,具体的指标项和对应的hook点如下表所示。采集到的原始数据将由Agent根据业务元信息进行进一步增强,添加更多的业务信息到指标的标签中,以方便业务的检索和分析。

表1 tcp采集的指标以及对应的hook点

  2、七层指标采集实现

  七层应用协议指标采集提供了精简模式和精细模式。精简模式聚焦于应用粒度的请求QPS、错误率和请求延时等指标,不对协议进行更细粒度的分析。精细模式则将这些指标精确到应用的请求路径粒度,如HTTP协议精细到URL级别。如下图所示,七层应用协议指标采集和四层TCP指标采集的实现方式大致相同,差异点在于七层协议指标计算的hook点在tcp_sendmsg和tcp_recvmsg。此外,精细模式的额外协议解析将消耗更多的资源。

图5 七层指标采集逻辑示意图

  3、系统指标采集

  在容器原生采集指标的基础上,本文额外采集大量的系统深度指标,这些指标在业务层面具有较高的价值,表2是部分主要采集的系统深度指标的说明:

表2 部分主要的系统深度指标

  (四)性能影响分析

  eBPF程序在内核中基于事件触发运行,不可避免地带来一些开销,从而影响业务性能。为了深入了解eBPF程序对业务性能的影响,本文针对多种场景进行了详细测试。根据测试结果,通常情况下,业务延迟增加在1%-10%之间,CPU的额外消耗在5%-15%之间。当然,如果开启更精细的采集,开销也会相应增加。

  以下是一个具体测试场景的数据,供参考。该场景选择了最常见的Nginx服务,使用wrk工具模拟不同的请求压力情景,对比了开启和关闭eBPF探针情况下,Nginx服务的请求延迟和整机CPU平均使用率的变化情况。

图 6 开关eBPF的TPS性能对比测试

图7 开关eBPF的CPU使用率性能对比测试

  从测试数据可以看出,P99时延从1.85毫秒增加到1.92毫秒,时延增加约3.7%。整机CPU平均使用率从4.4%上升到5.1%,大约增加了15%的CPU消耗。由于Nginx本身对时延敏感性较高,这些数据可以作为其他业务评估时的参考基础。实际上,对于普通业务,影响通常不会达到如此显著的程度。

  (五)应用落地效果展示

图8 网络拓扑界面

  图8展示了一个网络拓扑,显示应用和服务之间的依赖关系和通信状况。图9展示了应用层指标的无侵入式采集与图表绘制。对于一些老旧系统,无侵入式采集方式通常是唯一可行的应用访问数据观测手段。

图9 应用层指标界面

  四、总结与展望

  随着当下新技术应用的深入和行业数字化加速发展,证券公司对系统稳定性的重视显著提高。云平台运维管理因业务与技术融合而日趋复杂,带来挑战。实践表明,基于eBPF的可观测技术是对传统监控手段的有力补充,可以结合其他可观测数据,有助于精准定位和解决问题,提升运维效率并降低成本风险,保障系统稳定运行和交易顺畅进行,推动业务创新和发展。通过实时监测交易流程中的潜在异常,提前预警快速响应,减少因系统故障导致的交易中断或延迟,增强客户信任和满意度,为长期稳健发展提供技术支撑。

  eBPF技术在资本市场和证券行业中具有重大意义。通过其可观测技术,证券公司可以实时监测交易系统的运行,及时发现并解决潜在问题,降低交易风险,从而保障连续性和安全性。同时,eBPF技术的应用还能帮助行业适应复杂交易环境和需求,提升性能和稳定性。此外,eBPF技术还可扩展到网络功能优化、安全防护等领域,从而进一步提升证券行业的科技水平和市场竞争力。(国投证券信息技术委员会软件开发部李银鹰、沙烈宝、曾东明)

凡标注来源为“经济参考报”或“经济参考网”的所有文字、图片、音视频稿件,及电子杂志等数字媒体产品,版权均属《经济参考报》社有限责任公司,未经书面授权,不得以任何形式刊载、播放。获取授权

《经济参考报》社有限责任公司版权所有 本站所有新闻内容未经协议授权,禁止转载使用

新闻线索提供热线:010-63074375 63072334 报社地址:北京市宣武门西大街57号

JJCKB.CN 京ICP备18039543号