8月2日,滴滴宣布其开源云原生操作系统可观测性项目HUATUO正式入驻中国计算机学会(CCF),加入其重点孵化项目序列。本次入驻不仅体现了滴滴长期践行开源共建共享的理念,也希望通过行业协作,共同推动可观测领域操作系统基础设施的高效标准化发展。

HUATUO(华佗)是滴滴自研并开源的云原生操作系统可观测性项目,聚焦解决云原生环境中故障现场缺失、复现困难、诊断成本高等问题。面对容器漂移、架构复杂、上下游依赖多等挑战,HUATUO基于 BPF技术,整合 kprobe、tracepoint、ftrace等动态追踪手段,构建了低损耗、零侵扰的多维度内核观测能力体系,包括精细化指标埋点、异常上下文捕获、系统毛刺自动追踪及多语言持续性能剖析。当前,HUATUO已在滴滴生产环境中实现规模化部署,覆盖多类复杂故障场景,在系统高可用性保障与性能优化中发挥了关键作用。

技术架构

HUATUO系统在设计上重点考量了可扩展性、易用性、稳定性、可降级性、模块独立性以及接口设计等核心要素。系统主要由底层数据采集器和 apiserver 两部分构成。上图展示了数据采集器的架构,下面主要从软件架构进行说明:

  • 在指标采集方面,为提升指标的扩展性和易用性,HUATUO实现了一套统一的指标框架。该框架向上层提供符合Prometheus标准的开源指标格式输出,同时向下为开发者暴露简洁的Go语言接口。开发者仅需实现此接口,即可高效便捷地集成新的监控指标。
  • 针对内核事件处理,HUATUO提供了专门的事件框架。该框架核心负责实时感知与处理各类内核事件,并为开发者封装了大量底层实现细节。开发者只需专注于实现一个轻量级的特定接口,即可快速扩展新的内核事件类型。
  • 任务追踪(Tracing)管理,HUATUO承担着管理来自AutoTracing和 apiserver的完整任务生命周期的职责,确保追踪任务的顺畅执行与状态维护。
  • 系统支持采集多种类型的观测数据,HUATUO实现了统一的存储接口,后端包括本地文件系统、Elasticsearch (ES) 以及Amazon S3等。这一设计使得具体的存储实现细节对开发者完全透明,简化了存储选型与接入。
  • 基于成熟的Cilium BPF库,HUATUO重新设计了 BPF 管理功能。创新地采用BPF对象文件的方式,实现了业务应用逻辑与底层操作系统的解耦。
  • HUATUO支持火焰图处理功能。该功能通用强,支持处理生成 CPU 使用、内存分配、网络 I/O 等关键子系统性能瓶颈的火焰图。
  • 最后,HUATUO建立了一套关联机制,将内核数据结构体和容器信息关联。为了实现内核数据和容器信息关联,HUATUO从云原生组件获取pod/容器信息,从内核捕获容器创建删除事件,通过cgroup id、css、容器 ID 等进行关联。

核心特性

低损耗内核全景观测

传统的 procfs 指标粒度较粗,难以回答“是谁、在哪、为何发生”等关键问题。HUATUO针对这一痛点,深入内核各子系统的工作机制,在慢路径和异常路径进行精细化埋点,捕获关键上下文信息,并基于 BPF 技术实现无侵入、低开销的动态观测。同时,为应对高频异常可能带来的性能冲击,HUATUO设计了“限速”机制,实现指标采集的动态降级控制。

在系统架构上,项目注重扩展性:内核侧通过 BPF 减少版本依赖,实现可编程观测;应用侧则提供统一框架,支持 metric、event、tracing、profiling等能力的灵活扩展。通过构建内核与 K8s容器间的高效数据映射机制,HUATUO 最终实现了在性能损耗低于 1% 的基础上,对内存、CPU、网络、IO 等核心子系统的全景、细粒度观测能力。下图是对各子系统的观测点和前端效果图。

异常事件驱动诊断 

指标是一种整体持续的对系统状态的表达和描述,而事件是对指标的一种增强,能够捕获更严重的系统问题,更多的观测数据。异常事件驱动的诊断不需要事无巨细的获取系统状态,只需要根据设定的阈值触发即可。这种方式相比指标对系统的性能损耗更小,获取的信息更多,但阈值需要打磨,或者根据用户的需求选择。那么我们关注哪些内核事件呢?

从实践经验来看,需要围绕内核的进程上下文,中断上下文展开,需要关注阻塞和延迟事件,例如网络事件、调度事件、IO事件、内存事件等等。最终 HUATUO构建基于异常事件驱动的运行时上下文捕获机制,聚焦内核异常与慢速路径的精准埋点。当发生缺页异常、调度延迟、锁竞争等关键事件时,自动触发追踪,生成包含寄存器状态、堆栈轨迹及资源占用的图谱诊断信息。

全自动化追踪 AutoTracing 

相比指标和事件,全自动化追踪是为了解决更高维度的系统,业务应用的指标突增,偶发延迟等问题设计的。该方式适合解决如 cpusys、cpuidle、IO、Loadavg、容器争抢等问题。那么如何组织观测数据?调用栈,火焰图?通过实践经验发现,火焰图能够很好的表达、展示这些突增时采集到的数据。

火焰图能够表达非常丰富的信息,不局限于CPU、在内存、锁、loadavg等场景依然非常占据优势,且诊断结果简单易懂。这种全自动化的、按需的追踪也是对性能损耗和获取观测数据的有效平衡。最终总结为,AutoTracing模块采用启发式追踪算法,解决云原生复杂场景下的典型性能毛刺故障。针对CPU idle 掉底、CPU sys 突增、IO 突增、loadavg 突增等棘手问题,实现自动化快照留存机制和根因分析。下图是华佗通过自动化追踪方式观测的内核子系统。

如下图分别为cpuidle、cpusys自动化捕获,自动生产成火焰图。

持续性能剖析

操作系统观测体系已经很丰富了,为什么需要持续性能剖析?持续性能剖析在应用性能分析,故障排查,放火演练,链路压测等场景占据重要位置。这些场景需要一种持续的、可回溯的、全景的、全语言的性能剖析能力。那么剖析哪些资源?

实践中,不局限于CPU、内存分布、内存分配、锁竞争等同样重要。观测这些对象的维度又是非常丰富的,例如多语言、线程、进程、线程组、进程组、容器、CPU、内核子系统等等。最终HUATUO(华佗),通过标准化底层语言框架,提供统一的语言无关的存储结构。通过零侵扰,低损耗的方式实现持续对操作系统内核,应用程序进行全方位性能剖析,涉及系统 CPU、内存、I/O、 锁、以及各种解释性编程语言,助力业务持续的优化迭代更新。下图为持续性能剖析的软件架构和以redis为例的内存剖析。

开源生态融合 

无缝对接主流开源可观测技术栈,如Prometheus、Grafana、Pyroscope、Elasticsearch等。支持独立物理机和云原生部署,自动感知K8S容器资源/标签/注解,自动关联操作系统内核事件指标,消除数据孤岛。通过零侵扰、内核可编程方式兼容主流硬件平台和操作系统发行版。

落地场景

该项目在各种场景都有应用落地,成为支撑滴滴网约车核心业务运行的重要技术保障之一。

链路压测:重要节假日前,各业务线都会进行稳定性链路压测,HUATUO 为这种场景提供系统故障诊断分析,持续性能剖析。

放火演练:业务应用放火不符合预期,则可以通过HUATUO查看底层系统运行状态。

假期护堤:节假日期间,访问流量非常高,业务应用可能出现延迟、抖动、I/O 突增和CPU掉地等问题。HUATUO则会自动捕获这些事件。

性能剖析:业务应用在不同的集群表现有差异,则可以通过HUATUO分别对不同集群应用执行性能剖析,差异化分析。

预发灰度:HUATUO主动发现了很多问题,例如应用程序进程突增、cordump、loadavg 突增、网络丢包等。

日常排障:系统软件团队负责集团业务集群底层基础设施的稳定性,日常会有很多故障排查,问题解答等工作。HUATUO落地后在很大程度上释放了团队人力。

未来,滴滴将与中国计算机学会(CCF)一起加速 HUATUO 项目快速迭代,聚焦操作系统底层的性能剖析与分布式链路追踪,基于实现自动感知、Tracing、Profiling等关键技术,实现零侵扰、可编程的内核监测,为各行业提供一个一站式系统化的系统故障分析解决方案。此外,在产学研合作生态支持下,不断提升技术影响力,助力打造具备全球竞争力的国产开源基础设施。

感谢大家阅读至此,让我们开源社区见!

https://github.com/ccfos/huatuo

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python学智能算法(三十二)|SVM-软边界理解

【1】引言 前序学习进程中,已经对SVM的KKT条件,Slater条件等进行了探究,但这些都是完美情况,数据线性可分。 实际生活中需要处理的数据往往因为各式各样的原因会不可分,所以必须学会容忍一些小错误,完美的…

实名认证 —— 腾讯云驾驶证识别接口

官方地址: API Explorer - 云 API - 控制台https://console.cloud.tencent.com/api/explorer?Productocr&Version2018-11-19&ActionDriverLicenseOCR前置操作与下面博客前置操作一致:实名认证 —— 腾讯云身份证认证接口-CSDN博客 首先编写Con…

科技云报到:Agent应用爆发,谁成为向上托举的力量?

科技云报道原创。经过两年多的发展后,AI开始加速进入Agent时代。当AI从“被动响应”迈向“主动决策”,AI Agent正成为连接数字世界与物理世界的核心枢纽。从自动处理客户服务工单的企业Agent,到协调多步骤科研实验的学术Agent,再到…

Python字典高阶操作:高效提取子集的技术与工程实践

引言:字典子集提取在现代数据处理中的关键作用在Python数据工程领域,字典结构作为核心数据载体占比高达68%(2025年Python生态调查报告)。字典子集提取作为高频操作,在以下场景中至关重要:​​API响应处理​…

Java学习进阶--集合体系结构

Java 集合框架 (java.util 包) 是 Java 中用于存储和操作数据集合的核心组件,其设计精良、功能强大且高度灵活。理解其体系结构是 Java 进阶的关键一步。一.集合的核心思想接口与实现分离集合框架的核心在于接口定义了行为规范,而具体实现类提供了不同的…

【Unity】Unity中的StreamingAssets文件夹

目录前言核心特性1. 文件保留原始格式2. 只读访问3. 平台兼容性不同平台下的路径一、使用1、读写2、使用UnityWebRequest读取二、AB读取的特例三、注意事项前言 StreamingAssets 文件夹是Unity项目中的一个特殊目录,用于存放需要在运行时访问的资源文件。这个文件夹…

[windows]torchsig 1.1.0 gr-spectrumdetect模块安装

问题 按照提供的readme git clone https://github.com/TorchDSP/torchsig.git cd torchsig pip install . cd gr-spectrumdetect mkdir build cd build cmake ../ make install cd ../examples/ bash trained_model_download.sh gnuradio-companion example.grc &安装总是出…

网络安全要了解的知识

基于2025年网络安全态势整理的十大高危漏洞类型,结合攻击影响范围、技术严重性及实际案例分析综合排序:---1. 访问控制失效- 核心问题:权限校验缺失导致越权操作(如修改URL参数获取他人数据)。 - 案例:202…

xml 格式化

运行效果:免费在线XML格式化工具 - XML代码美化/压缩/验证 代码实现: using Microsoft.AspNetCore.Mvc; using System.Xml; using System.Xml.Linq;namespace SaaS.OfficialWebSite.Web.Controllers {public class XmlController : Controller{public I…

Pygame音频播放的最简框架代码示例

一、示例代码:import pygame pygame.init() pygame.mixer.init() pygame.mixer.music.load(/home/lijiang/Music/Lynyrd Skynyrd - Sweet Home Alabama.mp3) pygame.mixer.music.play()while pygame.mixer.music.get_busy():pygame.time.Clock().tick(10)二、代码详…

在Ubuntu环境中安装Docker和Minikube的完整指南

目录 前言 准备工作 第一部分:安装Docker 步骤1:卸载旧版本(如果有) 步骤2:安装依赖包 步骤3:添加Docker官方GPG密钥 步骤4:设置Docker仓库 步骤5:安装Docker引擎 步骤6&am…

几个概率分布在机器学习应用示例

一、说明 在这份快速指南中,我们将介绍最重要的分布——从始终公平的均匀分布,到钟形的正态分布,计数点击的泊松分布,以及二元选择的二项分布。 没有复杂的数学,只有清晰的概念、真实的例子,以及为什么它们…

2025年测绘程序设计模拟赛一--地形图图幅编号及图廓点经纬度计算

想要在2026年参加这个比赛的,可以加入小编和其它大佬所建的群242845175一起来备赛,为2026年的比赛打基础,也可以私信小编,为你答疑解惑一、读取文件 这里有两种文件需要读取,所以要额外处理 internal class Read {publ…

【C++基础】名字空间与 inline 命名空间:面试高频考点与真题解析

想象一下,你正在开发一个大型项目,团队中有10名程序员同时工作。当你们分别定义了calculate()函数时,编译器会陷入混乱:它不知道应该调用哪个版本的calculate。这就是C++引入名字空间(Namespace)的根本原因! 一、名字空间(Namespace)基础概念 1.1 为什么需要名字空间…

Pytest项目_day08(setup、teardown前置后置操作)

setup模块级setup_module:运行于模块开始之前,生效一次 一个py文件(测试文件)就是一个模块函数级setup_function:对于每条(不在类中的)函数用例生效,如果函数在类中,那么…

trae开发c#

安装插件C# Dev Kit,使用的版本是1.41.11 .NET Install Tool一般会自动安装,安装C# dev kit的时候,版本2.3.7 C# 插件,版本2.87.31 https://marketplace.visualstudio.com/items?itemNamems-dotnettools.vscode-dotnet-runtim…

Modstart 请求出现 Access to XMLHttpRequest at ‘xx‘

在 uniapp 前端页面请求时出现类似如下错误Access to XMLHttpRequest at https://example.com/api/mtiku/config from origin http://localhost:20000 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control…

计算机视觉CS231n学习(5)

循环神经网络 RNN recurrent neural networksRNN序列处理能力(RNN核心作用) RNN处理序列数据,相比“Vanilla”神经网络(仅支持一对一映射),RNN支持多种序列映射模式: 一对一:传统分类…

Spring Boot Redis 缓存完全指南

Spring Boot Redis 缓存完全指南 1. 项目依赖配置 1.1 Maven依赖 <dependencies><!-- Spring Boot Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><…

八股——WebSocket

文章目录1、 什么是 WebSocket&#xff1f;与 Http 协议的区别是什么&#xff1f;2、 Http 是如何升级为 WebSocket 的&#xff1f;3、 为什么 WebSocket 可以进行全双工模式的消息传输&#xff0c;而 Http 不可以&#xff1f;4、 什么是 TCP 的沾包和拆包&#xff1f;5、 WebS…