字节跳动超大规模 Metrics 数据采集的实践和探索
如果无法正常显示,请先停止浏览器的去广告插件。
1. 字节跳动超大规模 Metrics 数据采集的
实践和探索
字节跳动-基础架构-研发工程师 / 刘浩杨
2.
3. 关于我
• 就职于字节跳动 DevInfra 可观测性团队
• APM 接入侧方向负责人
• 有6年+的开源社区运营经验
• Apache SkyWalking PMC 成员
4. 目录
字节可观测性平台概览
海量 Metric 数据采集的挑战
海量 Metric 数据采集优化实践
未来展望
5. 字节可观测性平台构建思路
三位:
• Metrics
• Tracing
• Logging
一体:
• 一个平台
• 一套存储
6. 字节可观测性平台构建思路
• 上下文串联
• 过滤、聚合
7. 字节可观测性平台整体架构
8. 目录
字节可观测性平台概览
海量 Metric 数据采集的挑战
海量 Metric 数据采集优化实践
未来展望
9. 字节 Metrics 平台技术挑战
• Agent 部署实例百万级
• Agent 接收1000亿+ dp/s
• Metric 写入50亿+ dp/s
• 查询QPS 100K+
10. 字节 Metrics 平台业务挑战
• 服务集群数十万+ 微服务实例数千万级
• 后端主流研发语言4 RPC框架 10+ 服务发布日均数万次
• 核心业务QPS 千万级 P99延迟10ms 链路深度>50
11. 字节时序数据库ByteTSD
12. ByteTSD 使用方式
•
数据类型:
Counter/Meter/Gauge/Histogram/Su
mmary
• 写入:SDK (Go/Java/C++/Python)
• 查询:实现OpenTSDB查询语法,可通
过Grafana、Bosun、OpenAPI接入
13. ByteTSD 接入方式
• 轻SDK:OpenTSDB Protocol
• 打点精度:Agent 30s 聚合
• 上报方式:Push
14. 引入问题:支持场景受限
• 自定义配置:如秒级打点
• 主动采集:业务需自研 Agent
15. 引入问题:SDK 序列化瓶颈
•
某吞吐量为200w/s Flink ETL
任务做埋点统计,Metric SDK
打点消耗 CPU 占比 36%
16. 引入问题:Agent 资源成本
• 装机量百万数量级
• 每台宿主机需要 2C4G 资源
17. 目录
字节可观测性平台概览
海量 Metric 数据采集的挑战
海量 Metric 数据采集优化实践
未来展望
18. 全局优化: Metric多值
• 存储成本(Tags复用)
• 多Field查询加速
• 多Field复杂计算
19. 全局优化:私有Codec
• 流式编码和读取
• 高压缩率
20. 全局优化:SDK聚合
• 减少序列化
• 自定义打点精度
• 降低 Agent 负载
21. Agent 聚合优化
• 租户数据隔离
• Pool-Alloc for string
• SIMD 加速
• zlib vs zstd vs snappy
• Offload to DPU
22. SDK优化:分层设计
23. SDK优化:无锁 KDTree
• 并发读写
• 基于 string 内存对比
• Sharding Collector
• 倾斜时退化为 HashMap
24. SDK优化:多段Metric索引
• 复用 Tags
• 减少索引次数
25. SDK优化:Structured API
• 增量 API
• Type Safed
• Tags 预处理
• 性能提升
26. SDK优化:series query debug
27. 优化收益:数据服务
•
某吞吐量为200w/s Flink ETL
任务做埋点统计,Metric SDK
打点消耗 CPU 占比从 36% 降
低到 7.14%
28. 优化收益:在线服务
29. 优化收益:整体评估
8000000 * 3% = 240000 Cores
30. 目录
字节可观测性平台概览
海量 Metric 数据采集的挑战
海量 Metric 数据采集优化实践
未来展望
31. OneAgent & DataPipeline
• M.T.L 数据
• 数据上报 + 主动采集
• 插件化 Pipeline
• 流式计算
32. 开源 Agent 对比
33. 开源共建
已提交
• Merge PR 30+
• Metric/Trace 原生数据模型
• Metric 写入到 influxdb 支持
• 插件可分离在独立代码仓库
计划中
• 运维控制面协议
• 自监控、租户数据隔离
• DAG based Pipeline
• SQL 引擎
• …
34. 加入我们团队
联系我
35.