前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TDSQL-C PostgreSQL(CynosDB) 内核实现剖析二

TDSQL-C PostgreSQL(CynosDB) 内核实现剖析二

原创
作者头像
腾讯云数据库 TencentDB
发布2021-09-17 10:54:35
9000
发布2021-09-17 10:54:35
举报
文章被收录于专栏:腾讯云数据库(TencentDB)

| 导语 TDSQL-C PostgreSQL(CynosDB)是腾讯云数据库团队自研的新一代云原生数据库,融合了传统数据库、云计算与新硬件技术的优势,采用计算和存储分离的架构,100%兼容 PostgreSQL,高度兼容Oracle语法,提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。本文旨在从数据库内核的角度揭秘TDSQL-C PostgreSQL存储层的技术内幕。本文适合读者:腾讯云售后服务,TDSQL-C用户,TDSQL-C开发者,需要有基本的数据库与存储知识。

一、概述

      TDSQL-C采用计算和存储分离的架构,所有计算节点共享一份数据,存储容量高达128TB,单库最高可扩展至16节点,提供秒级的配置升降级、秒级的故障恢复和数据备份容灾服务。TDSQL-C既融合了商业数据库稳定可靠、高性能、可扩展的特征,又具有开源云数据库简单开放、自我迭代的优势。《TDSQL-C PostgreSQL(CynosDB) 内核解密》文章已总体介绍了TDSQL-C核心架构与关键技术,本文下面将介绍TDSQL-C 存储层内核实现细节

二、CynosStoreNode 存储实现

  CynosStoreNode负责Segment日志的处理、BLOCK数据的异步回放、读请求的页面多版本支持等,同时还负责将日志备份到Cold Backup Storage(COS),进行增量备份,根据增量备份,可以灵活的生成全量备份和差异备份。CynosStoreNode以Segment为维度进行资源管理,Segment Group内3个Segment实际存储同一份数据,通过一致性协议(Raft)进行同步。Pool、SG、BLOCK映射关系如图所示下,Segment对应为一个spdk_file文件(10GB)。

相比于传统的开源数据库以及其他云数据库,云原生数据库TDSQL-C计算层仍然包含传统内核的大部分组件(查询处理器、事务管理、锁、缓存实现以及MVCC),但有几个重要核心功能(redo日志记录、日志回放、持久存储、崩溃恢复和备份/恢复)均下沉到CynosStore存储层。在工程实现上,CynosStoreNode(无锁实现)与CynosStoreAgent的设计理念与目标是一样,使用了创新的share-nothing的编程异步框架,无共享模型的异步框架,结合现代新硬件技术,实现存储层的极致性能。

Write Log

1) 存储节点接收日志记录并添加到内存队列 2) Write Server写日志到落盘,并行发起RAFT日志复制 3) Leader及Follower日志落盘成功,Follower成功后向主发送ACK确认 4) RAFT多数派提交成功,返回StoreAgent写日志成功 5) 异步的将日志记录挂载到对应数据BLOCK的更新链上,会对更新的数据BLOCK形成1个更新链,从而支持数据BLOCK多个版本,提供数据页面多版本访问(注意:与CynosPG 页面内的MVCC多版本不同) 6) 异步的将日志备份到冷备系统腾讯云COS

TDSQL-C将页面CRC操作由计算层下放到了StoreNode存储中,充分利用存储服务器的CPU资源。同时StoreAgent下发的MRPL会合并更新链中的日志记录到数据基页BLOCK,以及GC回收无用日志。BLOCK页面由基页+日志链构成,实现存储页面多版本

Read Page

1) 存储节点Leader接收读Page(BLOCK)请求 2) Read Server根据请求的Page(BLOCK)及对应访问LSN号去DATA PAGE查找,基于基页合并日志返回请求页面或者直接返回基页 3) 返回StoreAgent请求Page(BLOCK)

备份回档

CynosStoreNode还包含了StoreLearner/StoreReplayer/StoreUploader三个组件,主要功能如下: StoreLearner:负责持续接收StoreNode Leader发过来log写入本地,在log流中断场景,StoreNode Leader重新add learner segment做完snapshot后,通知StoreUploader将log或snapshot上传到COS上。

StoreReplayer:负责备份/回档,接受CynosStoreMeta发过来备份/回档命令,请求StoreUploader从COS上下载log和snapshot文件,然后进行log应用,做完备份/回档完毕后,告诉CynosStoreMeta最终结果。

StoreUploader:负责持续备份log和snapshot文件上传到COS上和下载log和snapshot用于生成备份和回档新的实例。

通过以上功能组件的协调配合,基于CynosStore数据页面多版本的秒级快照备份对用户的数据进行连续备份保护,免去主从架构备份回档数据的同步和搬迁,最高以GB/秒的速度极速并行回档,保证业务数据迅速恢复。整个备份回档组件仍然采用share-nothing无锁实现,对实例存储无任何影响。

三、CynosStoreMeta 存储元数据服务

CynosStoreMeta负责CynosStore Service资源的分配和调度,采用一主两从架构,包括 Pool调度和SG调度,以及维护Pool和SG的对应关系。 CynosStoreMeta两类调度一个是资源池Pool调度(自动扩缩容 Pool),另一个是SegmentGroup调度(增减副本,leader切换,资源均衡等)。

      CynosStoreMeta核心功能如图所示:

1) SN(CynosStoreNode)注册到SCM(Storage Cluster Manager),SN的物理布局信息通过标签组labels(每个标签label采用key-value键值对表示)进行定义,标签名依次是Region->Zone->Rack->Host,标签值是具体部署的物理信息,如北京->北京一区->rack_01->host_01。一个SN负责处理一个NVME设备上的数据读写。 2) DCM(管控DB Cluster Manager)开始创建Pool,SCM接收到创建操作后,保存该Pool的元数据信息到ETCD上,然后把该Pool加入到内部调度队列。 3) Pool调度器:定期从调度队列上获取各个Pool来调度,调度包括Pool的初始化(分配第一个SG),根据Pool状态及使用情况进行扩缩容,以及Pool的销毁。 4) SG调度器:每个Pool下对应一个SG调度器,负责该Pool内所有SG的调度,包括SG的初始化,增减副本,SG内leader切换,迁移等,通过装箱算法选择最佳Storage Node作为该SG的成员以及整个存储资源的调度。 5) CynosFS通过CynosStoreAgent会定期同步SG的使用情况,Pool信息到SCM,并从SCM获取该Pool的所有SG信息以及SG的变更情况(如SG内leader切换)。

      元数据管理详细内容见《TDSQL-C PostgreSQL(CynosDB) 元数据管理》文章介绍分析。

备份回档调度也由CynosStoreMeta控制:

1) SG添加 Learner,并记录Pool 和 SG 创建和销毁事件到 CDB 2) 增加备份和回收调度:根据备份策略进行快照备份和回收 3) 增加回档调度

备份功能:增加全局备份调度状态,每日备份调度信息(调度时间,备份加载情况,执行情况等)。

回档功能:1.管控发起回档任务,StoreMeta生成Pool的回档任务并保存到CDB, 返回该回档任务的ID给管控供后续查询回档进度; 2. 生成该回档时间的快照; 3.根据快照回档出新的Pool。

回收功能:增加全局回收调度状态,每日回收调度信息(最新回收时间),其过程与备份类似。

  备份回档详细内容见《TDSQL-C PostgreSQL(CynosDB) 备份回档》文章介绍分析。

四、总结

本文从内核开发的角度介绍云原生数据库TDSQL-C存储层CynosStoreNode、CynosStoreMeta实现核心原理,后续文章内核团队会由点及面的分享存储层的各个技术点细节。

广告时间:TDSQL-C PG数据库团队广招天下英才,这里拥有全球顶尖的数据库专家,汇集了一批极具极客精神的数据库爱好者,团队不断的吸收业界最新的理论和工程成果,最新的硬件和软件技术,将其应用到自研系统中,设计和实现高性能新一代云数据库,TDSQL-C PG还有很长的路要走,如果你也对数据库领域技术感兴趣,欢迎加入我们,让我们一起见证TDSQL-C PG 攀登世界的顶峰。

参考资料: 1. 源代码库:《CynosStore源码》、《CynosStoreMeta源码》 3. 《腾讯云CSIG数据库产品中心PG内核团队WIKI

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、CynosStoreNode 存储实现
    • Write Log
      • Read Page
        • 备份回档
        • 三、CynosStoreMeta 存储元数据服务
        • 四、总结
        相关产品与服务
        TDSQL PostgreSQL 版
        TDSQL PostgreSQL 版(TDSQL for PostgreSQL, 原 TBase)是腾讯自主研发的分布式数据库系统,具备高 SQL 兼容度、完整分布式事务、高安全、高扩展、多级容灾等能力,成功应用在金融、政府、电信等行业核心业务中。同时提供完善的容灾、备份、监控、审计等全套方案,适用于GB~PB级海量 HTAP 场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档