《字节跳动海量时序数据库的内核探究.pdf》由会员分享,可在线阅读,更多相关《字节跳动海量时序数据库的内核探究.pdf(35页珍藏版)》请在三个皮匠报告上搜索。
1、分享主题:字节跳动海量时序数据库内核探究分享嘉宾:字节跳动基础架构 研发工程师 王栋 总结和展望大纲 字节 TSDB 内核探究 字节 TSDB 业务支撑案例 字节字节 TSDB TSDB 概述概述字节可观测性平台 业务挑战服务数国内装机量日均服务发布日均配置变更字节可观测性平台 构建思路构建思路:三位一体三位一体“三位”:“一体”:一个平台,观测上述 3 类数据一套存储,链接上述 3 类数据Metrics 监控数据Tracing 调用链路数据Logging 日志数据字节 TSDB 使用方式重要概念 序列(Series):一组 时间戳 和 值 序列的唯一主键:Tag组合写入:写入:SDK(Gol
2、ang/Java/C+/Python);数据类型(Timer/Counter/Gauge/Histogram)查询:查询:实现了绝大部分 OpenTSDB 查询语法,可通过 Grafana、Bosun 等接入,亦可用 OpenAPI 查询数据字节 TSDB 使用方式Series Key10:00:0010:00:1010:00:20idc=1,host=1.1.1.110.07.010.0idc=1,host=1.1.1.29.05.0-idc=1,host=1.1.1.38.09.0-idc=2,host=2.1.1.13.01.04.0查询举例:q(avg:cpu.loadidc=1,1h
3、-ago,)Series Key10:00:0010:00:1010:00:20idc=19.07.010.0字节 TSDB 整体架构字节 TSDB 内部落地情况吞吐量国内 2 Billion 打点/秒 30 秒本地聚合后查询性能国内 40K QPS,Latency avg 0.3s,pct99 2.1s资源配比每 5 台机器,支撑 1000 台机器监控Metric 数量国内集群 Metric 数量超过 20MOpenAPI 账号1000+OpenAPI APP 账号用户规则2000+预聚合规则最大支持维度单指标最大支持 30M Dimension 总结和展望大纲 字节字节 TSDB TSDB
4、 内核探究内核探究 字节 TSDB 业务支撑案例 字节 TSDB 概述高性能存储:结合 Cache 和 HDFS 构建冷热存储热存 tsdc:引擎内核(1/3)引擎细节:TagK 和 TagV 会字典化,TagSet 使用 varint 编码SeriesId 是自增 ID查询过的 Tag 会创建索引,Tag Cardinality 决定索引类型Inverted Index 的 postings 使用 RoaringBitMap热存 tsdc:引擎内核(2/3)两类 TimeSlot:Mutable,ImmutableImmutable Slot 会序列化到磁盘,同时 LruCache 加速其查
5、询速度DataPointSet 为核心数据结构,包括:1.优化版 Gorilla 压缩算法2.动态长度 RingBuffer3.多值列式存储热存 tsdc:引擎内核(3/3)Scan:Async RPC,并根据load数据大小区分轻重查询,轻重查询线程隔离使用 Distributed Weighted Round-Robin(DWRR)调度算法,保证租户cpu粒度的公平调度支持用户自定义、实时预聚合 TSDB物化视图冷存 arestor:PreShuffle,Streaming and Compaction PreShufflePreShuffleShuffle数据生成WatermarkStr
6、eamingStreaming窗口化聚合计算Auto-RollupCompactionCompaction小文件Merge清理历史高精度数据冷存 arestor:File Format高性能查询:执行引擎(1/2)框架一:定义 Dag,生成异步Workflow(Dag包括:Action、Plan、Graph)字节 TSDB 查询服务使用自研轻量级执行引擎。包含2个框架:高性能查询:执行引擎(2/2)支持 Fast Fail On Exception,基于 Cost 预测的 Fast Fail 也正在开发中。框架二:远程执行器,“真”异步rpc高性能查询:分布式查询 DQuery(1/4)=Sc
7、atter-Gather高性能查询:分布式查询 DQuery(2/4)执行过程的优化项:(1)多节点分布式执行多节点分布式执行:上述所有 Action,都可以转化成 Remote Event 并远程执行(2)算子下推算子下推:比如聚合算子SUM/COUNT/MIN/MAX 等,下推到最底层节点执行(3)流式聚合流式聚合:非叶子节点支持流式聚合高性能查询:分布式查询 DQuery(3/4)(4)异步异步 loadload 存储存储:使用异步 client 获取 tsdc 和arestor的数据(5)时间片长度选择时间片长度选择:时间片的切分,对齐 tsdc 和 arestor 存储的 TimeS
8、lot 长度高性能查询:分布式查询 DQuery(4/4)Dquery 支持多机房容灾:(1)一个依赖一个依赖:机房单元化(2)一个假设一个假设:两条专线,不会同时中断(3)容灾方案容灾方案:在主机房之间发生网络孤岛、长传中断等故障时,查询 proxy 可以动态切到第三方控制面高可用大脑:集群状态中心 Coordinator(1/3)使用Raft作为一致性协议,保证系统的CP性(Consistency&Partition Tolerance)。基本抽象:资源组(Resource Group)需要分配 shard 的 tsdc 集群 需要分配 partition 的 MQ Consumer Gr
9、oup高可用大脑:集群状态中心 Coordinator(2/3)1.tsdc会向Coordinator注册,注册后保持心跳2.Coordinator给tsdc资源组分配节点3.读写两侧,获取分配好的拓扑Coordinator 支撑 tsdc 水平扩展:高可用大脑:集群状态中心 Coordinator(3/3)写入:根据消息的 EventTime,对齐Timeline,确定消息对应的TimeState查询:根据查询的时间范围,如果包含多个 TimeState,则在制定查询计划时、在时间片拆分这一步对齐 Timeline数据的sharding,使用二级一致性 Hash:ConsumerConsum
10、er:两次 Consistent Hash 计算,确定序列的数据分片QueryQuery:一次 Consistent Hash 计算,确定同一 Metric 下多个序列的数据分布范围其他内核细节(1/3):二级一致性 Hash其他内核细节(2/3):常态写降级解决问题:部分指标,只写不查1.查询过的 Metric Name,写入Bloom Filter,该 BF 的 Key 定时过期2.写入侧根据上述 Bloom Filter,对未查询的指标降级到5分钟解决办法:其他内核细节(3/3):写入链路私有Codec字节TSDB定义了一套高性能的私有写入Codec1.1.代码复用代码复用:写入链路每个
11、环节,都可以复用相同代码2.2.个性化部署个性化部署:支持更个性化的部署方案,比如SDK直写tsdc3.3.DecodeDecode友好友好:只需要解码出Metric Header,即可完成封禁、常态写降级等功能4.4.hashcodehashcode计算前移计算前移:Metric Name、Tags的 hashcode 计算,前移到 SDK 进行 总结和展望大纲 字节 TSDB 内核探究 字节字节 TSDB TSDB 业务支撑案例业务支撑案例 字节 TSDB 概述业务支撑案例(一):框架和链路追踪字节内部 Rpc&Http 框架,通过字节链路追踪系统,深度集成了TSDB Client:涵盖g
12、olang/python/c+/java等多个语言 定义统一的微服务黄金指标:QPS/延时/错误率 等 用户开箱即用业务支撑案例(二):观测诊断平台监控:应用监控、容器&主机资源监控、基础组件监控报警:微服务报警、自定义报警、组件报警、智能报警事件&日志归因&诊断业务支撑案例(三):微服务数仓性能倍增项目 各服务资源占用、吞吐、单核 QPS单服务天级别的请求数、成功率、SLA 等,用来计量计费 总结和展望总结和展望大纲 字节 TSDB 内核探究 字节 TSDB 业务支撑案例 字节 TSDB 概述经验总结性能1.存储引擎的细节:字典化、varint 编码、索引、锁粒度细化2.分布式查询、算子下推时序模型1.多租户2.多值容量&成本1.冷热存储2.Agent 侧30s聚合3.常态写降级4.tsdc内存模型极致优化未来展望云原生tsdc 持久化持续演进多租户持续演进自定义多值&支持 SchemaThank You!Thank You!