收录于合集
#腾讯云数据库TDSQL for PG
9个
腾讯云数据库TDSQL PG版(原TBase)分布式关系型数据库是一款面向海量在线实时分布式事务交易高性能数据库系统。面对应用业务产生的不定性数据爆炸需求,无论是高并发的交易还是海量的实时数据分析,TDSQL PG版都有足够能力处理。在此基础上构造发行了具有功能更丰富、稳定性更好、兼容性更广、安全性更高、性能更强、扩展性极好的分布式数据库TDSQL PG版产品。本文由腾讯云数据库高级工程师谢灿扬先生带来分享,主要介绍企业级产品TDSQL PG版在分布式全局事务,数据安全,成本优化,复杂查询性能等方面做的工作,以下为分享实录:TDSQL PG版经过十余年打磨大概可以分为以下几个阶段,第一个是单机时代引入 PostgreSQL做为腾讯大数据平台 TDW 的一个补充,弥补了小数据量分析能力不足。随着业务发展,单机瓶颈逐步凸显,促使团队推出了更具有扩展性的SQL和兼容V1版本,并在2015年上线微信支付系统。此外,TDSQL PG版提前布局ToB市场,在V2版本支持三权分立,加密透明等安全特性,并在2018年拿下数字广东和云南公安等多个标杆客户。TDSQL V3主要定位 HTAP,在2019年上线PICC核心业务,直到去年发布V5版本,主要是为了去 O,内核具备去O和读写分离能力,同时上线的运营商用户还有保险系统。TDSQL PG版是基于腾讯及PostgreSQL开源的自主分布式 HTAP国产数据库,其全面兼容PostgreSQL,高度兼容Oracle语法,产品采用无共享架构,在提供数据仓库处理的能力的同时,还能支持完整的事物分布式ACID能力。TDSQL PG版整体能力,从支持上来说它的支持接口比较丰富,比如libpq里的C 、C++,Jdbc/odbc、Python、Ecpg,各种常用语言接口都是支持的,同时它也支持用户自定义函数操作服务。很多企业用户关心的数据安全方面,TDSQL PG版用三权分立安全体系,支持数据脱敏同时还有加密功能,并且支持多种国密算法。同时作为HTAB数据库,TDSQL PG版支持千万级TPS事务处理,全并行分布式计算框架,可以让业务高效完成OLAP计算。在数据治理方面,可以支持在线扩缩容,用户无感知数据Rebalance,使用透明的冷热数据分离来减少用户业务成本。此外,还支持多种窗口分析常函数,并且高度兼容Oracle常见语法。针对TDSQL PG版适用场景从两方面看,一是业务特征,如果业务满足这些特征,比如在数据量OLAP超过1个T,OLAP超过5个T或并发链接达到2000以上,业务峰值每秒 100万笔左右,同时还必须要有一个分布式的水平扩展能力,需要OLTP和OLAP(03:55 英混合场景,并需要严格的事务保证,TDSQL PG版是很适合的。第二是业务场景,例如TDSQL在地理信息系统,高并发实时计算方面或Oracle兼容都是一个非常好的选择。下面和大家分享TDSQL PG版整体架构。GTM全局事务管理器,它是全局事务信息的管理节点并管理全局对象。Coordinator协调节点主要是业务访问入口,CN节点中每个节点都对等,访问三个节点中任意一个结果都是一样。图中下层是一个数据节点,数据节点是实际处理数据的一些地方,每个数据节点都会有一份本地的原数据,并且还有一些本地数据分片,中间数据交互总线也会把所有的节点有机联合起来,负责整个集群中所有的数据交互。最左边我们的管控系统,就负责我们节点的资源分配、高级安全审计、数据治理、扩容等运维能力。下面对重点能力进行介绍。今年支持了一个多引擎、支持集中式部署模式和分布式部署模式,其中集中式部署模式和单机PostgreSQL相同,没有分布式开销,并且支持一组多备的部署模式和两地三中心,都具有完备的Oracle兼容能力。在金融或运营商保险这种场景中,可以达到98%兼容性。在业务需要扩容时可以无缝扩展成分布式集群。从集中式扩展到分布式,我们拥有完整的ACID能力,并且在分布式场景,也支持分部件更新全局索引,可以极大减少我们业务,进行一些分布式适配的改造量。并且在分布式场景中,TDSQL PG版也支持提供高性能OLAP能力,支持业务做分类型查询工作。TDSQL PG版同时支持集中式和分布式,集中式与分布式支持完整的 ACID,其中分布式事务,是基于GTS提供的MVCC并发控制逻辑,这里一个核心点是GTS时间戳,是由 GTS集群进行提供。GTS集群是从零开始单向递增的逻辑时钟,通过硬件提供足够稳定保障,并且是单向递增,我们利用这个特性来进行高性能分布式事务。而GTS对硬件没有要求,可以通用服务器来做GTM节点,同时GTS本身可以通过流复制来保证可靠性。在性能方面,24 核服务器能够处理1200万的QPS,几乎可以满足所有场景的需要。TDSQL PG版在全并行计算方面的并行能力分为三个层级:一是节点级并行,所谓节点级并行是系统拿到一个查询后,会把查询下发给不同的 DN,并且通过 DN 之间的分片查询节点级并行。二是进程中并行,在执行器拿到算子以后,把它算子并行化,允许多个 CPU 同时用资源来完成查询工作。三是通过指令级,比如可以通过特殊的 CPU 指令,SIMD 指令,进行算术运算等,来提升计算效率。今年新增另一特性全局索引,要知道如果在分布式设计中,表配置非分布键性能它比分布键性能差距是比较大的。举个例子,比如说分布键是其它键,那这里用一个非分布键,比如说 Mike 这个名称。由于这个键它不是我们的分布键,数据库其实不知道它在到底存储到哪个节点。那这样我们就需要在节点上,比如说DN1、DN2、DN3都需要扫描。假设这条数据只有一条,多了很多无用扫描,特别是节点数越来越多时。当然有了全局索引,相当于有一个全局索引来存储MAC这条记录对应的存储节点,那这样就可以比较快的去找到这一个节点。并且随着节点数的增多,性能也是稳步提升。这里需要一个全局事务来保证全局索引,保证数据表之间的一致性。可以看到右下角这个图,蓝色是非分布键的索引,黄色的是分布键,灰色的是全局索引。可以看到相对于非全局索引它的提升还是很大的。相对于我们的分布键查询,它的性能是比较接近的。全局索引的高性能还可以用在外键或者全局唯一约束上,这样可以极大减少业务的分布式改造成本。这里有一个特性透明压缩,支持数据库透明压缩能力,这个是完全对业务透明。通过简单的Alter table,可以把一个表直接压缩成它的 1/3,或者它的 1/4、1/5。然后从左边的图可以看到透明压缩主要存储层工作,页面在落盘的时候,调用指定的一个压缩算法,然后存储在对应文件系统里面来减少磁盘空间。当业务需要使用一个页面读取出去时,我们会在内存里进行解压,供业务来使用。下面是TPCC模型测试结果。可以看到一个磁盘压缩率大概是降低了70%左右,CPU大概是增加20%,因为要花额外CPU去做压缩,性能TPCC查询性能是降28%。另外TDSQL PG版支持全面的循环校验。这是对磁盘损坏的保障方案。我们都知道磁盘坏块概率相对较低,但随着业务量增长,集群数、服务器数增多,它会成为一个必然事件。TDSQL PG版支持全流程校验,例如定期全量校验,主动实施故障探测,故障阻断,在故障发现之后,会自动发起增量修复去完成副本的修复。在这样一个手段中,可以保证坏块不会扩散到冷备还有备机,相当于病毒,不能让它扩散到所有副本上。在表上我们的一个数据中,维护了一个块级别的CRC信息,从介质里面读取的时我们可以校验来做数据保护。最后来说当故障发生时,做数据储备转换时,可以保证在数据正确情况下,第一时间恢复业务,再异步修复流程。通过备份或者说冷备中,来拿取受损页面推进修复。在线修复可以通过可用的副本来进行,没有可用副本才会从冷备中拉取。另外一点Direct IO因为Page Buffer问题,导致内存的利用率并不高,并且在某些情况下容易引起性能波动。TDSQL PG版支持 Direct IO,经过测试可以提高内存的使用率。并且在TPCC测试,它的波动是更加平稳的,也就是说它能够提高业务稳定性。在新版本中,我们支持多种定位视图,一是全局事物视图,支持全局链接管理。第二是我们内存占用视图,可以对当前内存使用量进行一些统计。接下来是我们的经典用户案例。TDSQL PG版是在2015年,替换微信支付的分库分表系统上线,支撑微信支付从500万笔到1000万再到10亿笔,保证业务稳定性还有连续性,这里用到了数据治理功能。图上右上角是我们的 CLB 腾讯的内部的一个负载均衡的组件。CLB是我们接入的节点,在DN上涨,我们是存储四个月数据,四个月内数据是存在一个高性能的SSD里面,四个月前的数据会存到比较普通设备,比如大存储硬盘。它使用了大小商户策略,可以解决不同体量用户倾斜问题,从而高效保证系统运行。通过这种方式,把整个业务成本降低到1/4左右。在外部有比较大的一个保险公司,上线了非常多的实例。这里只展现了我们的一个部署架构。首先分为两个平面,一个是读写平面,一个只读平面,读写平面业务可以通过 VIP 来提供读写能力,我们的只读平面,VIP在多个节点中做负载均衡,提供一个业务只读的能力。TDSQL PG版在数据生成后,需要把数据同步到其它的系统上,例如Elasticsearch、MySQL、INFORMIX 或者Oracle在TDSQL PG版中可以在通讯的同时把它解成一个 Json 形式,同步到Kafka同步工具,最后通过Kafka通到其它业务系统。最后一个案例是去年上线的的七人普系统,这个项目是国家核心重点项目,涉及700万的普查员以及1亿人自主申报,并且在15天内完成数据量采集。在项目中 PostgreSQL 承担了非常重要的分析业务,同时具备了实时写入还有海量数据同时分析能力。目前PG已经成为新应用的首选。现在属于数据库黄金时代,所以我们会一起共同努力,谢谢大家!