共计 5072 个字符,预计需要花费 13 分钟才能阅读完成。
| 导语 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 是一对多的关系。