《专场15.1-TDengine 3.0 云原生架构实践-关胜亮.pdf》由会员分享,可在线阅读,更多相关《专场15.1-TDengine 3.0 云原生架构实践-关胜亮.pdf(59页珍藏版)》请在三个皮匠报告上搜索。
1、高性能时序数据库TDengine 云原生架构实践关胜亮TDengine 主要开发者涛思数据 联合创始人 技术 VP个人介绍个人介绍TDengine 的联合创始人和主要开发者,主导研发了开源云原生时序数据库 TDengine 1.0、2.0 到 3.0 的所有迭代版本。中国科学技术大学软件工程专业学士、中科院计算所计算机科学与技术专业硕士,先后就职于中科软、南瑞集团、360 等多家公司具有超过 10 年的技术开发与研发管理经验,一直专注在时序数据存储领域,目前个人专注于高可用集群、高效数据写入、实时数据订阅等技术方向,多次参与开源社区 Meetup 并进行主题演讲。TDengine TDengi
2、ne 的创新与关键技术的创新与关键技术物联网物联网大数据时代大数据时代数据采集后被源源不断的发往云端物联网典型场景:智能电表物联网典型场景:智能电表 数据是时序的,都带有时间戳 数据是结构化的,而且以数字型为主 除非固件更新,结构不会改变 每个采集点都带有静态属性标签 由于网络或其他原因,每个采集点的数据到达服务器的时间是无法控制的,但每个采集点的采集数据到达服务器的相对顺序是基本有保证的设备设备 IDID时间戳时间戳采集数据采集数据标签标签Device IDTime StampCurrentVoltagePhaseLocation Typed6850003.132200
3、.31BJ.chaoyang1d6851008.212190.82BJ.haidian2d6860003.112190.35BJ.chaoyang1d6830005.411100.53BJ.daxing1d6861008.112230.81BJ.haidian2d6871308.152150.85BJ.haidian2d6870003.152230.32BJ.chaoyang1d6840005.511120.54BJ.daxing1d1003
4、005.601090.53BJ.daxing1d6881008.192180.87BJ.haidian2d6860005.621080.56BJ.daxing1d6885003.192210.31BJ.chaoyang1很显著的特点 物联网典型场景:智能电表物联网典型场景:智能电表设备ID:D1001,标签 loc:BJ.chaoyang type:1TimeTime stampstamp CurrentCurrentVoltageVoltagePhasePhase003.132200
5、.30003.112230.35003.152190.32003.192210.33每张表里的记录按时间自动排序新数据记录的写入变成简单的追加操作数值按列的变化范围更小设备ID、标签不会重复存储设备ID:D1002,标签 loc:BJ.haidian type:2设备ID:D1003,标签 loc:BJ.daxing type:2TimeTime stampstamp CurrentCurrentVoltageVoltagePhasePhase008.212190.82008.1122
6、30.81308.152150.85008.192180.87TimeTime stampstamp CurrentCurrentVoltageVoltagePhasePhase005.411000.53005.511090.54005.601120.53005.621080.56一个采集点一张表带来的直接变化TDengine 的数据模型:一个设备一张表0 每张表的记录按块存储 每个数据块包含一定数量的记录条数 每个数据块带有预计算 每个数据
7、块带有 schema 一张表往往有多个数据块 系统有块索引,根据起止时间,迅速找到数据块块内数据采用列式存储块内数据采用列式存储TimeTime stampstampCurrentCurrentVoltageVoltagePhasePhase003.132200.30003.112230.35003.152190.32003.192210.33000000003.133.113.153.2210.3
8、10.350.320.33 大幅提高压缩率:同一列数据相近,便于压缩;不同数据类型可采用不同压缩算法 大幅提高分析性能:时序数据的分析,往往是针对一个采集量在一个时间范围段进行的。如果行式存储,会读取大量的无效数据003.132200.30003.112230.35003.152190.32003.192210.33Column-based StoreRow-based Store物联网大数据的另一特征物联网大数据的另一特征 同一类型的数据采集点往往很多个,比如一个省的智能电表就可能有 3000 万台 同一
9、类型的数据采集点往往要做聚合操作 用户往往要对采集数据做多维度分析,而且分析的维度在建模时可能不确定一个数据采集点一张表带来的技术挑战:表的数目过于庞大,难于管理,难于聚合超级表:用以描述某一种类型的数据采集点超级表:用以描述某一种类型的数据采集点描述一张超级表,即一个数据采集点类型,需要定义采集量的数据结构 schema 静态标签的数据结构 schema一个具体数据采集点创建数据表以超级表为模板,数据表的 schema 就是超级表的 schema给静态标签指定具体值超级表:超级表:多个数据采集点的高效聚合标签存储策略标签数据单独存储,与时序数据完全分离采用 Key-Value 型存储,便于增
10、删改操作每个数据采集点一条标签记录标签记录集中在一起存储,并建有索引通过超级表的设计大幅节省标签的存储空间大幅提升多个数据采集点的聚合效率让多维分析方便、高效TDengine 成为一款强大的数据分析工具业务对时序数据库产生新的要求业务对时序数据库产生新的要求用户才能带来真正需求用户才能带来真正需求业务场景的需求,就是TDengine架构不断升级的动力。以新能源汽车为例,典型的信号上报业务,需要标记时间戳和采集点的信息,将各种状态信息上传到服务器,随着销售数据的增长,并发写入量会不断提升。以互联网行业比较有代表性的运维监控为例,每时每刻都有大量的监控数据要记录和存储,这类数据的高效存储和查询对监
11、控系统的表现至关重要。随着服务器和各种业务的增多,相关的指标量也会飞速增长。来自用户的功能要求 提供基于时间段的自定义预计算功能,用户通过 SQL 语句,对应用完全透明 表的TTL机制,超过周期的表删除;不仅仅是对时序数据的到期删除,还提供表本身到期删除 标签的文本索引机制,优先支持标签数据的倒排索引;后续视情况增加普通列字段的倒排索引 时序数据删除功能,使用 SQL 语句对给定范围的数据的删除工作,可以指定表或超级表 范围以后,进行删除操作 重构集群的热备、冷备、异地容灾的支持 对公有云提供对象存储支持(例如 S3),使用其提供的 API 进行数据存储来自用户的性能要求 10亿时间线(表)规
12、模下,集群系统 1 分钟内启动完成 支持超过100 个节点的集群部署,且 ready 的时间小于 1 分钟 元数据管理节点采用一致性哈希分散到多个节点上,降低系统宕机的影响 相同软件和硬件条件下,不低于 2.x 版本的数据写入、查询性能 读写分离的计算框架、云原生 提供给用户 SQL 优化的工具和手段,支持explain,profile 功能,针对 SQL 语句提供物理查询计划和执行规划来自用户的易用性要求 提升系统的可观测性,全面方便的TDengine系统监控 系统性的多平台支持 用户应用与服务端之间的传输加密、压缩选项、SSL 支持 通用字符集的更友好的支持 更友好的可视化数据库管理工具接
13、口 运行参数通过 shell 或者 API 动态调整,将参数划分为 session 级别 和 global 级别强烈的分布式流式计算需求强烈的分布式流式计算需求Data ingestionData pre-processingData storageMessage QueueStreaming/batch ProcessingTimeseries database使用普通时序数据库的数据写入pipelineStreaming processingStreaming/batch processingData storageTimeseries databaseStreaming sourceMe
14、ssage QueueDownstream tasks使用普通时序数据库的数据分析pipeline使用TDengine时序大数据处理平台 数据写入、预处理、存储、分析查询、实时计算pipelineData ingestion,pre-processing,storage,real-time aggregation,caching and consumingAll in One云原生带来的技术挑战云原生带来的技术挑战技术挑战技术挑战云原生数据分析 水平扩展性复杂性架构改进 消息队列消息队列无需无需 Kafka 等等MQ 数据缓存数据缓存最新记录实时返回最新记录实时返回 流式计算流式计算实时聚合计
15、算数据流实时聚合计算数据流 数据订阅数据订阅实时推送最新数据实时推送最新数据用户视角用户视角 时序数据库时序数据库实时实时/历史一体透明历史一体透明研发视角研发视角平台层平台层LIBLIBCORECORERuntime EnvironmentThird Party SDKUtilTQTDBTSDBTStreamTQueryRaftProxyQnodeMnodeDameonVnodesSnodeMonitor关键特性关键特性云原生的时序数据库水平扩展性弹性韧性极简的时序数据处理平台流计算缓存数据订阅简单易用的数据分析能力历史与实时数据的分析完全统一时序数据分析的特有功能将数据的写入、预处理、长期
16、存储、复杂分析、实时计算、实时报警等融为一体,只需SQL就能完成,极大降低了用户的使用成本分布式架构分布式架构数据节点(Dnode):taosd 程序在物理节点上的一个运行实例虚拟节点(Vnode)数据节点被虚拟化成多个Vnode,具有独立的运行线程、内存空间与持久化存储的路径一个 Vnode 包含一定数量的表,除存储的时序数据外,也保存有所包含的表的 Schema、标签值等管理节点(Mnode)所有数据节点运行状态的监控和维护弹性计算节点(Qnode):运行查询计算任务,当一个查询执行时,依赖执行计划,调度器会安排一个或多个 Qnode 来一起执行流计算节点(Snode)负责运行流计算任务,
17、可以同时执行多个 Stream 的计算任务TDengine ClusterV5V3V4S2M1Q2M5V2V5Q3M3V4V5V6V3S3V2Q1M1S1V3V2V4M2TAOSCAPPTAOSCAPPV5S2V2Q3V5V6V3V2Q1M1S1V3V2V4V6Q2S3V3V5V4V4M1M2M3V6Dnode2 Dnode 5Dnode 3Dnode 6Dnode 1Dnode 4时序数据分片时序数据分片分片(Sharding)设计策略:按照数据采集点进行分片,片称为 Vnode一个片里有一到多个数据采集点的数据集合不同片可以分布到多台计算机上一个数据采集点的数据只会在一个片里片通过中心化的
18、节点进行管理系统的负载均衡的是以 Vnode 为单位进行时序数据分区时序数据分区218031804分区(Partition)设计策略:按照时间段将数据进行分区,纵向分割同一时间段的采集数据存放在同一数据文件,不同时间段不同文件时间段以天为单位,可以配置分区的优势根据时间段,便于快速定位要查找的数据文件便于做生命周期的管理,超过保留天数,自动删除最老文件用户对于历史数据处理,不用再采用分库或分表处理,只要存储容量够多级存储多级存储按照时间自动迁移数据到不同存储介质,只需简单配置时间范围和对应存储路径极冷数据热数据温数据冷数据最近 1 小时内最近 10 天最近 6 月最近 3
19、 年内 存固态硬盘机械硬盘S3海量数据海量数据处理处理分片:以 Vnode 为单位对数据采集点进行划分分区:按照时间段将数据进行拆分分表:每个设备一张表,加速查询TDengine 提供极高的数据压缩比和随机查询性能v2v3v5T0-T1T1 T2T2 T3按照时间维度对数据进行分区(Partition)v4按采集点对数据进行分片(Sharding)TDengine对大数据进行的切割分布式元数据管理分布式元数据管理 节点、用户、数据库、超级表等全局信息存储在 mnode 中 数据表的元数据,例如表名、标签,仅存储在 vnode 中 使用 B+树存储数据表的元数据 使用一致性哈希算法路由数据表到目
20、标 vnode 232-10Vnode1Vnode2Vnode3Vnode4Vnode5数据库级别的元数据管理数据库级别的元数据管理管理节点负责数据库级别的元数据的存储和管理,包括用户数据库超级表索引.TDengine 通过两阶段提交保证关键操作的一致性APPMnodeVnode13.Req:create stable5.Response 6:acktaosc 1:SQL:create stable2.Req:create stableVnode24.Req:create stable数据表级别的元数据管理数据表级别的元数据管理 每个数据采集点的元数据没有存放在 Mnode,而是分布在各个 V
21、node 里,由于没有中心节点,不会有任何瓶颈 当应用要将数据插入到一张表或对一张表做查询操作时,基于表名的 hash 值,请求将直接发送到对应的 VnodeAPPMnodeVnode 5:acktaosc 1:SQl:insert into table2.Req:get vgroup info3.Req:get meta data4.Req:insert data数据表的标签信息存储到硬盘中,延迟加载到内存Vnode 配置固定大小和数目的内存页采用 LRU 机制按需从硬盘加载只要计算内存足够,元数据全内存存储,千万级别规模的标签数据过滤结果能毫秒级返回在内存资源不足的情况下,仍然可以支持数千
22、万张表的快速查询使用 TTL 机制,删除过期的数据表数据表级别的元数据管理数据表级别的元数据管理标签索引在 TDB 模块实现基于 LRU 的索引文本类型标签,数值类型标签适用于标签变化较小的领域,例如车辆、设备等基于 FST 的索引JSON 类型标签适用于 DevOps 场景索引重建在背景运行单个 Vnode 支持 10 万标签的索引管理典型的数据聚合查询流程典型的数据聚合查询流程查询时先进行标签过滤,然后在进行时序数据过滤Vnode.APPVnode2DriverVnode1QnodeTag DataTime Series Data高基数高基数支持 10 亿数据表没有性能下降系统在 1 分钟
23、内快速启动 1,000,000,000 1 min基于基于 Vnode Vnode 的水平扩展的水平扩展数据表的路由采用一致性 hash 算法将数据表名压缩到 232长度的环形空间创建 DB 时就创建指定数目的 Vnode每个 Vnode 负责一定 hash 范围的数据表由 Mnode 负责 hash 范围的管理在系统缩容、扩容时动态调整 hash 范围232-10Vnode1Vnode2Vnode3Vnode4Vnode5Vnode Vnode 多副本机制多副本机制集群内多副本机制通过虚拟节点级别的冗余来实现,即每个 Vnode 有若干个副本Vnode 的全部副本共同构成了一个虚拟节点组(V
24、Group),VGroup 里 Vnode 个数就是数据的副本数VGroup 由管理节点创建、管理,并且由管理节点分配一个系统唯一的 ID,VGroup ID。如果两个 Vnode 的 ID 相同,说明它们属于同一个组,数据互为备份。VGroup 里 Vnode 的个数是可以动态改变的,允许只有一个,也就是没有数据复制。Vnode13vnode17vnode19vnode17vnode19vnode13vnode11vnode13vnode17Dnode2Dnode4Dnode3Dnode1(Mnode)vgroup11vgroup13vgroup17vgroup19Vnode17Vnode1
25、9Vnode17Vnode19Vnode13Vnode11Vnode13Vnode17VGroup11VGroup13VGroup19VGroup17Vnode Vnode 主从选举主从选举Vnode 启动时,角色是不定的,它需要与 VGroup内其他节点建立连接,并互相交换基本信息VGroup 采用 RAFT 一致性协议,保证系统的高可用与高可靠,Vnode 可以是 Leader、Follower、Candidate 或 Offline状态Vnode 记录一个持久化的版本号和任期,任何数据更新操作都会导致版本号单调递增,每次选主都会导致任期的单调递增写操作只能在 Leader 上进行,系统采
26、用异步复制的方式将数据同步到 Follower 上。这样确保了一份数据在多个物理节点上有拷贝,系统需要中有足够的副本数量来确保数据安全vnode13vnode17vnode19vnode17vnode19vnode13vnode11vnode13vnode17Dnode2Dnode4Dnode3Dnode1(Mnode)vgroup11vgroup13vgroup17vgroup19交换数据vnode17vnode19Vnode17vnode19vnode13Vnode11Vnode13Vnode17VGroup11VGroup13VGroup19VGroup17交换数据交换数据数据写入复制数
27、据写入复制FollowerVnodeApp/taoscWrite memorydiskWALLeader VnodeFILEFILEFlushLeaderVnodeWrite memorydiskWALFollower VnodeFILEFILEFlush Leader 节点写入流程Follower 节点写入流程 由于网络原因或者宕机导致 VGroup 中 Vnode 不同步的时候,需要进行 Vnode 的数据复制 不同于写入请求触发的复制操作,恢复操作针对 WAL 文件与数据文件同时进行 在数据恢复的过程中,同步模块先同步数据文件,然后开始同步WAL 文件在同步过程中,如何做到 Leader
28、 的写入不会阻塞?数据块有版本号的概念 数据块被追加到数据文件尾部产生归档数据文件(快照)Leader Vnode按版本号记录每个数据文件的 Offset依次传输数据文件Follower Vnode按版本号传输未发送的 WAL 记录依次接收数据文件(快照)应用到存储引擎传输实时 WAL 记录接收 WALl 记录接收实时 WAL 记录App/taosc节点恢复节点恢复负载均衡 数据节点通过心跳信息定时(每秒 1 次的频率)向管理节点报告其状态(包括硬盘空间、内存大小、CPU、网络、活跃虚拟节点数等),管理节点在内存中保存了整个集群的状态 管理节点根据每个数据节点的最后得分来评估其负载状况,当新的
29、数据节点被添加进集群,该节点的负载分值为 0 当管理节点发现某个数据节点负载过高,它会指令数据节点将其包含的一个或若干个虚拟节点迁移到其他数据节点 通过增减副本避免在负载均衡中阻塞读写操作Vnode2Vnode1Dnode1Dnode2Vnode2Vnode1Dnode1Vnode2Dnode2Vnode1Dnode1Vnode2Dnode2vgroup2 副本为2扩容与缩容 TDengine 的数据分片粒度是 Vnode,一个 Vnode 里包含多张表,一个 Vnode 数据不会分散到两个节点存储 在系统中某个 Vnode 成为了读写热点,就需要拆分 VGroup 拆分的策略是 先增加副本,
30、再调整 hash 范围,最后删除冗余数据Vnode1Dnode1Dnode2Vnode1Dnode1Vnode1Dnode2Vnode2Dnode1Vnode3Dnode2Vnode2Dnode1Vnode3Dnode2compact存算分离存算分离计算和存储分离动态启停 Qnode支持 Vnode 的拆分与合并 极简时序数据处理极简时序数据处理传统架构传统架构数据缓存数据缓存采用固定大小内存用以缓存最新的时序数据支持全内存运行,表示所有表的最近一条数据都在内存中在全内存情况下,百万级别规模的最新数据能毫秒级返回非内存情况下,保存访问最为频繁的数据TDengine 在时序场景下降低了对 Red
31、is 的依赖数据订阅数据订阅 基于 WAL 文件订阅 提供与 Kafka 相似的 API 支持订阅数据库、超级表、数据表 订阅时支持条件过滤TDengine 在时序场景下降低了对 Kafka 的依赖流计算流计算 时间驱动的流计算 事件驱动的流计算 通过 SQL 语法描述,简单易学 支持 UDFTDengine 在时序场景下降低了对 Flink Spark 的依赖数据迁移数据迁移taosX增量备份异地容灾边云协同异构数据交换的管道便捷的数据分析便捷的数据分析重构计算引擎重构计算引擎1.完善的 SQL 支持2.支持子查询、JOIN 等语法3.支持 UDF时序数据查询时序数据查询累加和移动平均数时间
32、加权平均插值计算会话窗口状态窗口 跳变量统计Block-Wise SMA写入过程中,保存数据块的预计算结果内存数据积累到一定大小触发写磁盘由行存储转化为列存储在磁盘中以数据块 Block 形式组织把 Block 中各列数据的聚合结果,例如 max,min,sum,count 等存储到 bsma 文件根据查询计划选择使用哪些聚合结果000000003.13.13.23.210.30.30.30.4003.12200.3003.12230.315
33、385486870003.22190.3003.12210.4count 4sum 12.5max 3.2min 3.1last 3.2.count 4sum 1234max 223min 219last 221.count 4sum 1.3max 0.4min 0.3last 0.4.内存:行存储硬盘:列存储预计算文件count 4.max 00min 00last 00.Rollup SMA原始数据自动进行降采样存储支持三个不同的数据保存层级,指定每层数据的聚合周期和保存时长level 1 存储原始数据
34、,可以在 level 1 中存储一条或者多条数据,level 2 和 3 存储聚合数据Rollup 目前支持 avg,sum,min,max,last,first适用于 DevOps 等关注数据趋势的场景,本质是降低存储开销,加速查询,同时抛弃原始数据0:050:100:150:200:250:300:350:400:450:500:551:001:051:101:151:201:251:301:351:401:451:501:552:00raw data290299859380398
35、58340853082892893849328493849238939290038level892level232493283level32923Time-Range-Wise SMA按照聚合结果降采样存储适用于高频使用的 interval 查询场景采用与普通流计算一样的逻辑,允许用户通过设定 watermark 应对延时数据,相对应的实际的查询结果也会有一定的延迟create table if not exists stb(ts timestamp,c1 int)tags(t1 int);select max(c1),min(c1)from stb interval(6m);create sma index sma1 on stb function(max(c1),min(c1)interval(6m);select*from sma1;Vnode5Vnode2Vnode1流计算节点Vnode3Vnode4客户端数据分析能力数据分析能力1.基于超级表的多维分析2.计算和存储的分离3.数据分片UI分区 4.流式计算5.历史和实时数据一体化处理6.从控制台进行快速的即席查询 7.支持Python Pandas 等多种连接器