| 导语 TDSQL-C PostgreSQL(CynosDB)是腾讯云数据库团队自研的新一代云原生数据库,交融了传统数据库、云计算与新硬件技术的劣势,采纳计算和存储拆散的架构,100%兼容 PostgreSQL,提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。本文旨在从数据库内核的角度揭秘TDSQL-C PostgreSQL的外围架构与关键技术。本文适宜读者:腾讯云售后服务,TDSQL-C用户,TDSQL-C开发者,须要有根本的数据库与存储常识。

一、概述

TDSQL-C采纳计算和存储拆散的架构,所有计算节点共享一份数据,存储容量高达128TB,单库最高可扩大至16节点,提供秒级的配置升降级、秒级的故障复原和数据备份容灾服务。TDSQL-C既交融了商业数据库稳固牢靠、高性能、可扩大的特色,又具备开源云数据库简略凋谢、自我迭代的劣势。TDSQL-C不仅在性能、扩展性和高可用方面有大幅晋升,计算存储的解耦使得计算层和存储层都取得了很大的独立优化空间,本文上面将介绍TDSQL-C架构的实现,以及在新架构上的关键技术劣势。

二、TDSQL-C PostgreSQL(CynosDB) 架构

Primary Instance是数据库的读写实例(RW),负责接管数据库的读写申请,Replica Instance是数据库的只读实例(RO),负责解决数据库的只读申请,目前能够反对扩大最多15个Replica实例。

CynosFileSystem是用户态分布式文件系统,次要提供分布式的文件治理,为CynosPG实例提供文件存储服务。CynosFS是专为云原生数据库而打造的分布式用户态文件系统,将传统分布式文件系统劣势与云原生数据库相干特色进行交融,是TDSQL-C弹性扩大、海量存储、高性价比的基石。

CynosStoreAgent、 CynosStoreMeta、CynosStoreNode 形成分布式云存储系统CynosStore(一个反对日志的、提供多版本读的、分布式的块设施存储)。其中CynosStoreNode存储节点负责数据库的理论数据存储。同时CynosStore将日志实时同步到腾讯云冷存储(COS)上,用于基于工夫点的数据备份与复原服务。

Primary Instance和分布式存储之间传输的是日志流。Primary Instance将数据变更以日志的形式发送到CynosStore中,CynosStore会定期的将日志合并到数据页面上,因而无需将脏页写到存储中,这是与传统数据库很大不同的中央。Replica Instance没有写事务,因而,不会向CynosStore发送日志信息,然而会申请读取页面。Primary Instance也会将日志同步到Replica Instance中,Replica Instance会应用收到的日志更新内存中的数据页面,当Replica Instance切换成Primary Instance时,能够间接应用这些最新的页面对外提供服务,无需再次从CynosStore中读取页面。

TDSQL-C实现原理:日志即数据库。基于此实现的数据库系统专为云原生而打造。数据库的Primary Instance会产生日志,并保留到CynosStore中,因而咱们从存储上,针对于每一个数据页面,均能够拿到基于日志回放的任何工夫的页面版本。也就是说,CynosStore提供了一个基于页面的多版本存储系统,每一个版本都是基于一个或者多个MTR的回放(Mini-Transaction Record:多条日志的汇合,用来保障数据库中的页面或者索引构造从一个“一致性”状态,到另一个“一致性状态”)。

1.计算层

数据库引擎CynosPG基于PostgreSQL而来,PostgreSQL是世界上性能最弱小最先进的开源数据库。通过长达30年以上的踊跃开发和一直演进,PostgreSQL已在可靠性、稳定性、数据一致性等取得了业内极高的名誉。CynosPG次要对PostgreSQL日志零碎和存储系统进行革新,进行Oracle语法高度兼容,以及深度的内核性能及性能优化,对于PostgreSQL SQL引擎架构改变无限,因而CynosPG能够齐全兼容PostgreSQL原生的性能。

分布式用户态文件系统CynosFileSystem,为实例提供分布式的文件治理,负责将文件的读写申请翻译为对应的BLOCK读写,CynosFileSystem为实例提供Pool维度的存储拜访,如上图所示。

CynosStoreAgent为CynosFS提供SG维度的存储拜访,提供SG的读写接口,对于读写申请有不同解决。 写申请:将批改日志通过LOG API发送到CynosStoreNode,读申请:间接通过BLOCK API读取CynosStoreNode数据。CynosStoreAgent 除了承当计算层与存储层的读写交互,也负责主备间日志流同步,对于CynosPG主备实例间只通过CynosStoreAgent进行交互。在工程实现上,因为古代多核和多插槽计算机对于跨核间的数据共享(atomic instruction、cache line bouncing、memory fences)代价十分大,CynosStoreAgent(无锁实现)工程实现上应用了翻新的share-nothing编程异步框架,一种无需耗时锁定即可在 CPU 内核之间共享信息的设计,面向古代新硬件技术的劣势实现了极致性能。

2.存储层

CynosStoreNode以Segment为维度进行资源管理,Segment Group内3个Segment理论存储同一份数据,通过一致性协定(Raft)进行同步。CynosStoreNode负责Segment日志的解决、BLOCK数据的异步回放、读申请的页面多版本反对等。同时还负责将日志备份到Cold Backup Storage(COS),进行增量备份,依据增量备份,能够灵便的生成全量备份和差别备份。相比于传统的开源数据库,云原生数据库TDSQL-C计算层依然蕴含传统内核的大部分组件(查问处理器、事务管理、锁、缓存实现以及MVCC),但有几个重要外围性能(redo日志记录、日志回放、长久存储、解体复原和备份/复原)均下沉到存储层。在工程实现上,CynosStoreNode(无锁实现)与CynosStoreAgent一样,应用了翻新的share-nothing的编程异步框架,无共享模型的异步框架,联合古代新硬件技术,实现存储层的极致性能。

CynosStoreMeta负责CynosStore Service资源的调配和调度,采纳一主两从架构,包含 Pool调度和 SG 调度、备份回档调度,以及保护Pool和SG的对应关系。 CynosStoreMeta两类调度一个是资源池Pool调度(主动扩缩容 Pool),一个是 SegmentGroup 调度(增减正本,leader切换,资源平衡等)。

三、TDSQL-C PostgreSQL(CynosDB) 技术劣势

日志即数据库

TDSQL-C 引入计算存储拆散的设计,存储层应用共享的分布式存储,计算层则将传统数据库不必要的IO全副卸载,如上图所示写IO只有Redo日志流,Redo日志能表白数据库的所有状态,实现计算与存储基于日志传输的新数据库架构,真正实现了将 Redo LOG 下沉到存储层,将网络 IO 缩小到最低。

TDSQL-C计算层实现无状态,计算层本地数据文件将不复存在,依然蕴含传统数据库内核的大部分组件:查问处理器、事务管理、锁、缓存实现以及MVCC多版本,移除了PostgreSQL中的FPW个性,脏页面刷盘操作。

TDSQL-C存储层实现可计算智能存储,传统内核几个重要外围性能:Redo日志记录、日志回放、长久存储、解体复原和备份/复原,均下沉到存储层,由分布式存储系统主动治理数据的多正本,实现主动扩缩容,主动故障校验检测和修复,同时实现了存储页面多版本反对。

计算与存储拆散,共享分布式存储

采纳计算与存储拆散的设计理念,满足业务弹性扩大的需要。各计算节点通过用户态分布式文件系统(CynosFileSystem)共享底层的存储(CynosStore),极大升高了用户的存储老本。

一写多读,读写拆散

TDSQL-C 采纳多节点集群的架构,集群中有一个主节点(可读可写)和至多一个只读节点。当应用程序应用集群地址时,TDSQL-C通过外部的代理层对外提供服务,应用程序的申请都先通过代理,而后才拜访到数据库节点。代理层不仅能够做平安认证和爱护,还能够解析SQL,把写操作发送到主节点,把读操作平衡地散发到多个只读节点,实现主动的读写拆散。对于应用程序来说,就像应用一个单点的数据库一样简略。

齐全兼容

TDSQL-C齐全兼容PostgreSQL,代码/利用无需批改或只需大量批改,业务无需革新即可平滑迁徙。同时TDSQL-C 会定期实现对PostgreSQL新版本的兼容性。能够应用PostgreSQL 导入/导出工具或者快照,将PostgreSQL 数据库轻松迁徙到TDSQL-C。

极致性能

深度定制的数据库内核,超高性能,能够满足高并发高性能的场景,保障要害业务的连续性,并可进一步提供读写拆散以及读写扩展性。如在CynosPG,CynosFileSystem大量应用的异步、流水线、批处理、Lock Free构造等等。

新硬件技术及零拷贝技术,缩小操作系统上下文切换以及数据在用户态和内核态之间拷贝引起的性能损耗,进一步优化要害门路的零碎性能。如RDMA、NVME、SPDK等等。

CynosStore在工程实现上真正做到了无锁实现,翻新的应用了share-nothing编程异步框架,无锁实现即可在 CPU 内核之间共享信息的设计,面向古代新硬件技术的劣势实现了极致性能。

海量存储

最高128TB的海量存储,无服务器 Serverless 架构,主动扩缩容,主动故障检测修复,并按理论使用量计费,不必不计费,轻松应答业务数据量动态变化和持续增长。主动保护数据多个正本通过Parallel-Raft协定保证数据的一致性,保障数据安全可靠。同时不再须要因为单机容量的限度而去购买多个实例做分片,由此简化利用开发,升高运维累赘。

秒级故障复原、疾速弹性变配、疾速只读扩大

计算节点实现了无状态,反对秒级的故障切换和复原,即使计算节点所在的物理机宕机也能够在1分钟之内复原。

计算节点依据业务须要疾速升降配,升降配一直连贯,依据内存大小不同升降级工夫最快可到秒级,实现计算资源的老本最优。

计算节点依据业务须要疾速增加只读节点,一个集群反对秒级增加删除1个 - 15个只读节点,疾速应答业务峰值和变动场景。利用日志流LSN确保读取数据时的全局一致性,防止因为主备提早引起的不统一。利用基于Redo的物理复制代替逻辑复制,晋升主备复制的效率和稳定性。

快照备份回档

基于数据多版本的秒级快照备份对用户的数据进行间断备份爱护,免去主从架构备份回档数据的同步和搬迁,最高以GB/秒的速度极速并行回档,保障业务数据迅速复原。整个备份回档流程无锁实现,对实例存储无任何影响。

四、总结

因为篇幅无限,具体实现细节并没有具体地论述,本文次要全局的介绍了TDSQL-C外围架构与关键技术,后续文章会具体揭秘TDSQL-C各个内核组件具体实现细节。腾讯云数据库团队也在一直的摸索更多的性能与优化,如在执行器优化器摸索,向量化执行引擎,XRDMA更低提早IO栈,MTCP面向多核的用户态网络协议栈,DB语义下推与异构计算减速,FPGA存储引擎减速,Hybrid Storage(Optane/DRAM/AEP/ScaleFlux)等等软硬一体化交融工作,去谋求更佳的性能性能以及用户体验,后续咱们也会尽量给大家分享这些细节的停顿与实现。如果在应用TDSQL-C中遇到纳闷,不要犹豫请立即分割咱们,咱们会致力地为大家答疑,感激对TDSQL-C的反对。

五、相干概念

Segment(Seg):Storage Service治理数据BLOCK和日志的最小单元(10GB),也是数据复制的实体。图中同样色彩的3个Segment理论存储同一份数据,通过一致性协定(Raft)进行同步,咱们叫做Segment Group(SG)。

Pool:多个Segment Group(SG)从逻辑上形成一个间断的存储数据BLOCK的块设施,供下层的CynosFileSystem调配应用。Pool和Segment是一对多的关系。