天翼云分布式数据库实时分析引擎详解

来源:六安市叶集区金利木业有限责任公司

【IT168评论】TeleDB是天翼云自主研发的分布式数据库,集高扩展性、高SQL兼容度、完整的分布式事务支持、多级容灾能力等能力于一身。提供容灾、备份、恢复、监控、安全、审计等全套解决方案,适用于GB级-PB级的海量数据场景。

TeleDB基于无共享架构,通过引入分布式执行引擎和全局事务管理器,实现了完整ACID特性,在满足交易型业务的同时也能支持复杂查询。为了进一步提升分析型业务的处理能力,我们引入了列式存储和向量化引擎,同时整合RDA、实时写入、实时查询等技术,实现海量数据的实时入库、实时分析。

在第15届中国数据库技术大会(DTCC2024)大会上,天翼云科技有限公司资深研发专家胡彬,根据自己和团队在天翼云的技术实践经历,发表了题为《天翼云分布式数据库实时分析引擎详解》的演讲,对TeleDB的系统架构、产品特点、技术路线进行整体的介绍。

▲天翼云科技有限公司资深研发专家 胡彬

嘉宾介绍:15年码农,8+年数据库管控和内核研发经验,专注于分布式系统、云原生和存储引擎领域,有从零孵化云原生数据库产品的经验。2022年加入天翼云,现为天翼云数据库团队内核负责人,主要负责TeleDB多款数据库产品的内核研发工作。

本文由ITPUB整理,经胡彬老师授权发布。以下为演讲实录。

天翼云TeleDB架构演进

回顾天翼云自研数据库的发展历史,不难发现其深厚的底蕴与持续的创新。早在2012年,中国电信率先组建了专业的数据研发团队。之后的十余年,基于中国电信业务需求,TeleDB从中间件分布式数据库向下一代分布式数据库架构演进。

时至今日,经过数年的深耕细作与不懈努力,中国电信天翼云数据库团队已硕果累累,不仅累积了150+项核心专利技术,更是在全国范围内建立了5大研发中心,形成了强大的研发网络。同时,团队汇聚了超过300名数据库领域的专项人才,为天翼云TeleDB的快速发展提供了坚实的人才保障。

TeleDB架构演进方向和业界相同。首先是集中式,基于发展成熟、生态完善的MySQL、PG开源数据库,可以快速替换非核心系统,但是单机处理能力有限,无法横向拓展。

其次是中间件分布式,去满足要求不严格、并发性比较高的场景。数据存储在不同单机数据库上,通过中间件记录元数据;中间件本身不保证分布式一致性读和完整ACID。虽然扩展性好、效率高、简单易用,但是SQL兼容度低、关系模型支持不完整,复杂SQL查询性能低。

然后是原生分布式,引用MPP架构,去做更复杂的查询。对业务屏蔽分布式细节,业务按照访问集中式数据库的方式访问数据库;数据库保证分布式一致性读和完整ACID。这种架构的SQL兼容能力好、扩展能力高、业务迁移成本低,可以为客户提供更可靠的数据库云服务。

经过多年的发展,TeleDB已进化为一款基于MPP架构的原生分布式数据库,聚焦于提升产品性能,尤其针对复杂查询场景,展现出卓越的处理能力与效率,为用户带来前所未有的数据处理体验。

通过引入RDA技术,解决了传统架构下复杂查询导致的连接数、进程数暴涨问题。Global Syscache解决了并发数增加导致内存同步增长的问题。DDS实时的分布式死锁检测,将检测、解锁实效性提升到秒级。

但值得注意的是,当前TeleDB的SQL引擎仍是一个典型的火山模型,大量虚函数调用,无法有效利用CPU缓存和流水线。在存储引擎侧,行存储导致任何情况下都需要加载整行,IO效率低。

TeleDB列式存储

如图所示,最上面是Pax Access Method,它是基于tableam扩展的存储接口层。中间层Pax Write State Machine指列存的修改功能,Pax Reate State Machine指列存的读取、索引、表达式下推等功能,Pax File对上提供列存文件的读写接口。底层Pax File Storage是指列存文件。最左侧Pax META Table,管理列存表和列存文件的映射关系。

离散的 insert、update 和 delete 操作会产生大量小文件,从而影响读性能。因此需要将小文件合并起来以提升访问效率。在保证列存数据实时写入,实时可查的基础上,确保查询性能相对稳定。

File Meta Manager是负责小文件合并的bgworker,通过Meta Table中列存表与文件的映射表,周期的进行检查,制定文件的合并策略,并将合并任务下发给 worker 子进程,由 多个worker 并发的进行合并操作。

为了进一步降低存储成本,同时更好的结合datalake等下游产品能力,TeleDB做了一些冷热分离的尝试。

File Storage Manager负责列存文件存储位置管理的bgworker,周期性地根据不同的策略调整,对符合规则的文件进行降冷处理。中间通过XBlock块缓存服务访问外部对象存储,在加速IO 的同时,屏蔽不同对象存储协议的差异。

列存使用过程非常简单,先创建列存引擎插件,创建列存表,后面就可以像行存表一样使用,可以查询系统目录表 pg_class 和 pg_am可以确认表的存储引擎。

TeleDB向量化执行

整体架构包括Vector Executor向量化执行器,其包括:Sort、Agg、Filter、Project等向量化算子;Batch Tuple Slot基于TupleSlot扩展的包含多行数据的对象;列存表的接口层Pax AM。

向量化执行引擎架构与现有执行引擎兼容,可逐步替换算子,基于现有Table AM框架,可支持多种存储引擎。

上图展示了通过优化group by子句,来实现hashagg并行+向量化的过程。

Remote Data Access解决重分布场景的进程数暴增问题,DN间数据传输走RDA,1 个分布式会话在每个DN只会有1个会话进程。网络通信模块Forwarder以RPC + 推送方式更高效率的实现DN间数据传输。

RDA算子通过共享内存结构设计和缓冲区管理实现和forwarder的高效通信,RDA将元组转化为二进制数据在DN间传输,向量化算子的结果batch完美结合RDA,以二进制的方式多行批量实现DN间数据传输。

关于更多的AP特性,列存引擎具备可用性、成本、安全等特性,基于XLog实现列存数据的主备复制,对列存数据进行压缩和加密。

SQL引擎具备执行器和优化器,包括Limit+Sort 、动态分区裁剪、RuntimeFilter,基于代价和规则进行路径选择。

TeleDB引擎演进方向

TeleDB引擎架构如图所示,它是基于PostgreSQL开放架构,打造冷热分离的多引擎平台。

最上面是Optimizer基于代价模型选择执行引擎;然后是执行引擎层,包括 PG 原生执行引擎和向量执行引擎;存储层是基于TableAM(PG的存储引擎框架)的Heap(PG 原生行存)、PAX(自研列存)、XStore(自研 update-inplace行存)等存储引擎、XLake(基于FDW框架的自研数据库插件);最底层是XBlock块缓存服务。

关于未来的演进方向,TeleDB架构将集中式分布式一体化,形成对等架构,支持负载均衡和读写分离的高性能网关。存储引擎方面:向AI靠拢,支持向量存储;将存储条带化,提升系统弹性扩展能力。