前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云 Postgres-XZ 的数据治理策略

腾讯云 Postgres-XZ 的数据治理策略

原创
作者头像
云资讯小编
修改于 2017-06-19 10:58:36
修改于 2017-06-19 10:58:36
3K0
举报

国内数据库技术盛会——2017第八届中国数据库技术大会(DTCC2017)于2017年5月11-13日召开,大会吸引120多位技术专家分享、5000多名IT人士参会,在5月11日的大会中,腾讯云数据库高级工程师,PostgreSQL数据库专家许中清做了腾讯云Postgres-XZ数据治理经验分享。

从微信支付在实际案例中,许中清介绍了腾讯云分布数据库DCDB for Postgres-XZ在数据治理过程中面临的数据倾斜、成本优化、数据迁移等能力,以及在解决这些问题的过程中Postgres-XZ的一系列优化和内核优化,包括映射关系表(shardmap)、虚拟节点组、多维分片策略、不停机数据搬迁等功能。

腾讯云分布式数据库DCDB系列产品,对内支持腾讯内部业务的发展,对外为企业提供强有力的服务,已经赢得广泛客户的信任与口碑,积极推动了腾讯云的快速发展。

一、简介

Postgres-XZ是腾讯自研的,基于MPP架构分布式关系型数据库集群,内部代号为PGXZ。PGXZ是面向OLTP应用,兼容PostgreSQL协议,支持分布式事务和跨节点复杂查询的一款分布式数据库。目前已经在微信支付商户系统中运行近3年,管理超过230个节点和400T的数据量,也是全球最大的PostgreSQL集群之一。

PGXZ的架构如下图,其中GTM负责分布式事务管理,DataNode负责存储数据,Coordinator负责对数据进行分发、聚合等操作,Coordinator本身不负责保存业务数据。Coordinator通过将分布Key上值进行Hash路由到各个DataNode上。

另外,PGXZ引入了逻辑路由层,在Coordinator上实现映射关系表(shardmap)。数据分布关键字(Distribute Key)先被Hash出ShardId,然后用ShardId查询ShardMap表找到数据对应的DataNode。路由过程如下图:

二、防数据倾斜

但凡是分布式集群,数据分布不均衡和负载分布不均衡就天然存在,这叫做数据倾斜;数据倾斜导致会负载和数据集中在一两个节点,进而严重影响集群的扩展甚至正常运行。 解决数据倾斜,是数据治理的最主要目标之一。

通过分析,我们发现数据倾斜的主要原因:分片关键字(Distribute Key)本身引入的倾斜:因为业务数据本身的特征,导致在某个分布Key值的记录数特别多,例如交易类业务,以账户ID作为关键字,然而某账户ID交易量特别大,也会导致数据倾斜。

首先,通过管理shardmap,PGXZ确保数据均匀的写入DataNode。同时,通过shardmap的动态管理, PGXZ可以动态将部分数据从负载较高的节点迁移到负载较低的节点,进而保证进一步的均衡。当然,这里的分片策略不仅仅是来解决倾斜。

某些特殊情况,例如大多数业务存在2/8原则,即前20%商户可能产生超过80%的交易和数据,银行业务、社保业务、电商业务都存在类似情况,我们实际应用中也发现,微信支付系统中的京东账户,采用动态迁移数据本身已经无法解决数据倾斜的问题了,因为京东账户的数据量和负载要求甚至超出一个DataNode物理上限。PGXZ为了解决这种问题,引入了虚拟节点组技术,即由多个DataNode组成一个(或多个)虚拟的DataNode(组),来承载那仅有20%商户产生的80%的交易和数据(如下图Huge Key Group)。

三、冷热数据分离

在数据治理过程中,成本一直是我们关注的地方。由于分布式集群本身设备采用x86服务器,相对于某些方案,成本已经很低了。但PGXZ并不满足,因为腾讯内部PGXZ集群规模还在快速增长,我们可以预见突破1000台设备之日可待;而这么大规模,全部采用高端x86设备,成本也是非常恐怖的;因此,我们提出了在数据库层的冷热数据分离,降低存储成本的方案。

在大部分数据库系统中,数据有明显的冷热特征。显然当前的订单被访问的概率比半年前的订单要高的多。根据经验来讲,越是数据量增长快的系统,这种冷热特征越明显。将冷数据存储到带有大容量磁盘的服务器上,将热数据放在价格更昂贵的ssd上明显更合理。传统方案是通过拆解系统,但PGXZ通过将冷热数据分布存储到Cold Group/Hot Group来大幅度降低硬件成本。

以下图架构是一套完整的架构举例,我们将PGXZ将DataNode从冷/热、大Key/小Key 两个维度分成四个:

Group:Small Key Group(Hot):存储小Key、热数据;

Small Key Group(Cold):存储小Key、冷数据;

Huge Key Group(Hot):存储大Key、热数据;

Huge Key Group(Cold):存储大Key、冷数据

每一个DataNode Group都有独立的ShardMap空间(shard到datanode的映射表);每一个DataNode Group都有不同的Hash策略。比如,对于每一个record,Coodinator(CN)首先会根据DistributedKey和create time判断该record路由到哪一个group。然后采用这个group内的hash策略、并查找这个group的shardmap进一步路由到某一个DataNode。

Coordinator首先根据record的create time判断是冷数据还是热数据,然后查询Huge Key List(PGXZ也提供接口由用户指定)判断record是属于Small Key Group还是 Huge Key Group。最后在指定的Group里面通过hash和查找ShardMap找到对应的DataNode。

为什么每个Group采用不同的Hash策略?最直接的原因就是2/8原则让关键字(Distribute Key)本身引入的严重的分布不均匀。因此在Big Key Group我们通过(distribute key, create time)复合列将大商户的数据hash到不同的shard,保证超大商户能够存储到集群中。那么,为什么小商户不统一使用这种多列的hash策略呢?因为对于数据量小的商户,路由到一个DataNode可以避免对单个账户写操作时的分布式事务和读操作时的跨接点查询。最后,Small Key Group(Hot/Cold)的Hash策略完全一样,Huge Key Group(Hot/Cold)的Hash策略也完全一样,只是他们各自属于不同的shardmap空间。

四、在线迁移能力

解决了倾斜问题,我们看看看自动扩容/缩容,越是发展快的业务,越是重视如果不影响业务运行快速扩容/缩容。当集群规模不足以支撑业务量的增长时,需要增加新的节点,PGXZ会自动将一部分shard从原来的Datanode无缝迁移到新节点上。或者当节点数据出现倾斜时,系统自动将shard从负载较高的节点迁移到负载较低的节点。那这是怎么做到的呢?

通过以上描述了PGXZ集群中的数据分布策略,我们分析可得到在PGXZ中,有三种类型的数据迁移:

热数据变冷,迁移到Cold Group。这是跨Group迁移 小账户变大,签到 Huge Key Group。这也是跨Group迁移 扩容或者因为均衡的原因,在一个Group内部的节点之间进行迁移。

而对PGXZ数据迁移的目标是:

不影响业务。 保证数据完全一致。

综合上述要求,PGXZ提出了一系列解决方案。对于扩容来说,加节点操作很简单,但真正的难点和重点是,再保证高可用和数据一致性的基础上,不停机就能完成数据的迁移。PGXZ的解决方案是根据迁移目标,设定一系列任务(Shard Moving Task)关键点,并对这些关键点进行拆解分析并加以实现。

一个分布式迁移任务(Shard Moving Task)由一个三元组(源source, 目标target, 分片Shards)来定义:从源节点迁移分片中的数据到目标节点。整个流程一共分成5个大步骤:迁移存量数据、迁移增量数据、数据检验、切换路由、清理(如下图):

迁移存量:顾名思义,就是将需要搬迁的分片的存量数据从源节点搬迁到目标节点。此时业务依然在写,为保证二者存量数据迁移不会存在重复或遗漏的数据?PGXZ的方案是是将开始导出存量数据和开始记录增量这两个动作使用同一个数据库快照(Snapshot)。这里要说明下,在路由切换之前,这些目标节点中的数据对外不可见。

追增量:为确保重做增量数据的同时,新的增量数据写入顺利,PGXZ采取多轮迭代的方式来追增量数据。每一轮的增量数据会越来越少(搬迁的速度比新增的速度快),因此每一轮迭代的重做时间逐轮收敛,直到收敛到某一个可配置的阈值,我们就进入下一个步骤数据校验。

数据校验:PGXZ支持严格的数据校验,要求迁移后,不仅数据条数一要致,而且内容也必须完全一致。但是传统的校验需要花费很多的时间,而且,为了保证源节点数据不再新增,必须有一个加锁(只读)的过程。PGXZ的方案是,不是等到源节点统计完成之后才解除阻塞,而是统计校验语句获取快照解除阻塞;因此,所以这个加锁的时间并不长,通常在5ms以内

再追变更:如果数据校验的时间较长,这段时间源节点上又会产生较多增量数据,因此流程需要再次追变更,过程与第二步中的追变更完全一样,在某一轮迭代的重做时间达到某个阈值时,开始进入下一步:切换路由。

切换路由:切换路由需要加锁,也就是阻塞源节点上对这些迁移的分片的写操作,业务在这些分片上的写操作会失败。在路由切换完之后再解除源上的写阻塞。需要注意的是,在阻塞写的这段时间,切换路由之前,还有最后一轮增量迭代需要在目标节点上重做。根据我们在现网中经验,这段阻塞部分shard上写的时间绝大部分情况在20ms以内,通常可以做到小于10ms。,而且由于扩容时,并非所有节点数据都去做迁移,因此这个影响也有限。

清理:解锁、停止源节点上的记录增量数据的过程,清理源节点上的重复数据。

最后根据我们在微信支付多次扩容操作中的统计,主要关注每次迁移锁读写的时间,我们一共进行了135个迁移任务。每一次切换路由时锁业务的时间主要分布在20ms~25ms之前,平均阻塞时间时15.6ms。总的来说,大家感受到的微信支付等一系列服务几乎是全年无休的持续服务的,也注意证明,我们PGXZ的迁移等运维操作,几乎是对业务没有影响的。

根据我们的经验来看,在一个分布式机器的运维过程中,除了日常巡检和故障排除以外,大部分的自动运维工作都在数据迁移上;比如扩容搬迁、冷热数据搬迁等等;因此,如果能使用云服务,例如腾讯云的关系型数据库CDB,分布式数据库DCDB等,这类工作极大的简化,不仅提升每一个业务的效率,还能让大家更加专注于业务开发,提升业务价值。

以上就是PGXZ数据治理策略的主要内容。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何来存储比较大的业务数据
如何来存储比较大的业务数据,例如比较大系统的报表数据,这些数据通过大数据的ETL转换之后,输出到一个地方供业务查询,数据特点是生成之后一般不会改变(除非数据产出错误,重新计算)。
jerryteng
2021/11/22
1.2K0
如何来存储比较大的业务数据
PGXZ-腾讯全功能分布式关系数据集群
开头先解释下全功能什么意思,所谓的全功能指的是支持绝大部分的SQL特性,像主键,触发器,约束,函数,存储过程,跨节点join等等。而且这些特性的支持对业务完全透明,业务可以像使用一台单机数据库一样来使用PGXZ。 PGXZ凝结了数平小伙伴们一年多的辛苦劳动,在 2015年10月份正式上线接入业务。当前主要的用户有微信支付,数据平台。最大的线上集群规模31个节点,每分钟55万请求。 本文先介绍下PGXZ的渊源,然后对PGXZ的特性进行下总结。 要讲PGXZ就不得不先说下PGXZ的祖父--Postgresql。
腾讯大数据
2018/01/29
2.1K0
PGXZ-腾讯全功能分布式关系数据集群
PGXZ 的架构揭秘
作者:李跃森 2016年7月,腾讯云对外发布云数据库PostgreSQL,提供腾讯自研的内核优化版和社区版两个版本,以及提供分布式集群架构(分布式集群内部代号PostgreSQL-XZ)两种方案。 本
腾讯云TStack
2017/09/25
4K0
PGXZ 的架构揭秘
企业级分布式 HTAP 数据库管理系统,腾讯 TBase 正式开源
TBase简介 TBase是腾讯数据平台团队在开源的PostgreSQL基础上研发的企业级分布式HTAP数据库管理系统: 具备高性能可扩展的分布式事务能力,支持RC和RR两种隔离级别; 通过安全、管理、审计三权分立体系,提供全方位的数据安全保证机制; 支持高性能分区表,可使得数据检索效率成倍提升; SQL方面兼容2003标准、PostgreSQL语法和常用Oracle函数&数据类型、窗口函数等; 提供大小商户数据分离、冷热数据分离等高效的数据治理能力。 TBase架构 集群中有三种节点类型,各自承
腾讯开源
2019/11/08
2.3K0
企业级分布式 HTAP 数据库管理系统,腾讯 TBase 正式开源
微信支付商户系统架构背后的故事
PostgreSQL-XC在事务管理系统方案本身有一个明显的缺点,那就是事务管理机制会成为系统的瓶颈,GTM(Global Transaction Manager全局事务管理器)会限制系统的扩展规模。如图1所示,是每个请求过来CN(Coordinator 协调节点)都会向GTM申请必需的gxid(全局事务ID)和gsnapshot(全局快照)信息,并把这些信息随着SQL语句本身一起发往DN(Datanode数据库节点)进行执行。另外,PostgreSQL-XC的管理机制,只有主DN才会获取的gxid,而备DN没有自己的gxid,因此无法提供只读服务,对系统也是不小的浪费。
用户1263954
2018/07/30
9520
微信支付商户系统架构背后的故事
Postgres 分布式数据库
聊起分布式数据库,大家第一印象估计是 谷歌的 Spanner ,以及 TiDB。其实还有另外一种分布式 Postgres-XC (目前已经迭代到 PostgreSQL-X2 ),Postgres-XC 数据库系统主要是基于水平可伸缩的share nothing 架构,支持全局事务,表分区,复制以及查询计划在各个节点并行执行。
用户1278550
2022/05/17
2.2K0
Postgres 分布式数据库
Redis案例:Redis Cluster分片数据不均匀
对于分布式系统来说,整个集群的存储容量和处理能力,往往取决于集群中容量最大或响应最慢的节点。因此在前期进行系统设计和容量规划时,应尽可能保证数据均衡。但是,在生产环境的业务系统中,由于各方面的原因,数据倾斜的现象还是比较常见的。Redis Cluster也不例外,究其原因主要包括两个:一个是不同分片间key数量不均匀,另一个是某分片存在bigkey;接下来我们看看,在腾讯云数据库redis中,如何及时发现和解决分片数据不均匀的问题。
brightdeng@DBA
2020/08/27
5.3K0
Redis案例:Redis Cluster分片数据不均匀
微信支付商户系统架构背后的故事
李跃森
2016/10/12
98.1K12
微信支付商户系统架构背后的故事
国产开源数据库:腾讯云TBase在分布式HTAP领域的探索与实践
腾讯云从 2009 年便开始在内部的业务上进行尝试,在企业分布式数据库领域的自研过程是比较有经验的。当时主要是为了满足一些较小的需求,比如引入PostgreSQL 作为 TDW 的补充,弥补 TDW 小数据分析性能低的不足,处理的需求量也较小。
腾讯云开发者
2020/11/23
2.8K0
腾讯云分布式数据库(DCDB)
苏强
2017/05/12
3.7K0
腾讯云分布式数据库(DCDB)
【Tbase开源版测评】基于PostgreSQL的国产开源数据库初体验
之前本人主要使用过oracle,mysql,greenplum,tdsql,tidb等数据库。头一次接触基于PostgreSQL的国产开源数据库,如果如下内容有错误的地方,还希望各位朋友批评指正。
卖菜小弟
2020/08/15
2.9K4
TBase数据节点在线扩容原理解析
对于Share-Nothing架构的分布式数据库来说,如何将数据均匀的分布到各个节点、在线扩容,以获取更大的存储容量和更高的并发访问量。成为各大分布式数据库系统的一大挑战,今天我将对腾讯云数据库TBase的数据节点在线扩容方案做一个简单的分享。
腾讯云数据库 TencentDB
2020/10/09
3K0
首款国产开源数据库TBase核心架构演进
腾讯云数据库国产数据库专题线上技术沙龙正在火热进行中,4月14日李跃森的分享已经结束,没来得及参与的小伙伴不用担心,以下就是直播的视频和文字回顾。
腾讯云数据库 TencentDB
2020/05/30
2.9K0
首款国产开源数据库TBase核心架构演进
微信搜索引擎中索引的分布式演进
提起分布式,不少人能很清晰的阐述paxos、CAP等理论,但我们在遇到一个具体的分布式问题时,很少有人能知道如何做出一个“好”的设计。对于当前的很多分布式数据系统,包括开源的HBase、ElasticSearch等,我们一般只知其然,很少能够知其所以然。因为几乎所有的分布式数据系统,都会根据自身情况,对实际场景做一些假设,有所舍取,这种多样性也增加了我们的理解难度。
腾讯云开发者
2021/01/11
1.1K0
微信搜索引擎中索引的分布式演进
PGXZ 腾讯分布式关系数据集群—架构解析
本文作者:数据平台部存储引擎组PGXZ项目负责人,2013年从华为加入腾讯,从事数据库和存储相关的工作。多年来一直致力于数据库引擎的研究和开发,从事过多款数据库内核的设计和开发工作,包括内存数据库,分析型数据库,事物型数据库,当前负责PGXZ项目的开发。 分布式关系数据集群是一项基础类的IT技术,广泛应用于事务处理领域。对微信支付后台大量数据的处理提供强有力的支持,保证数据处理的准确性及使用的顺畅。PGXZ是典型的MPP(大规模并行处理),Share Nothing的分布式数据库架构,在此种架构中各个
腾讯技术工程官方号
2018/01/26
1.6K0
如何解决 Redis 数据倾斜、热点等问题
分布式缓存作为性能加速器,在系统优化中承担着非常重要的角色。相比本地缓存,虽然增加了一次网络传输,大约占用不到 1 毫秒外,但是却有集中化管理的优势,并支持非常大的存储容量。
微观技术
2022/12/29
1.3K0
如何解决 Redis 数据倾斜、热点等问题
邹鹏:Redis数据库云端最佳技术实践
这次过来主要是和大家分享一下,腾讯云上个月正式上线的Redis4.0集群版的相关内容,跟大家分享我们在做集群版的时候有哪些思考,我们怎么去设计整个系统架构,最终我们做了哪些东西。大概会有三个点,第一个点是说Redis的使命,我们看Redis是什么产品,为什么这么火,第二块就是腾讯云Redis4.0集群设计经历了哪些思考,最终做成什么样子,最后是2018年年初,登录到腾讯云的自研兼容Redis协议的CKV引擎,他是怎么样的一个架构设计。
腾讯云开发者社区技术沙龙
2018/11/05
1.5K0
带妹上分,团战五杀,光有技术可不行
《王者荣耀》是全球首款5V5英雄公平对战手游, 腾讯游戏天美工作室开发的MOBA游手大作。作为全球用户数最多的手游,你有没有发现无论什么时候上线、玩多久,王者荣耀从来都如丝般顺滑,甚至连排队等待都不需要? 其实,每一次响起那句经典冲锋号"稳住,我们能赢"的时候,后端数据库也在严阵以待。峡谷的战场,就是数据的战场,每一次团战都是在海量的数据中增删改查。接下来,就为大家解密在这款现象级手游背后的腾讯云自研游戏数据库TcaplusDB数据库技术。 PartⅠ 面临的问题 对于王者荣耀而言,数据库是灵魂,承载着所
腾讯云数据库 TencentDB
2020/04/07
1.7K0
腾讯云超火开源数据库产品架构揭秘
Redis 作为高性能缓存经常被广泛应用到各个业务——如游戏的排行榜、分布式锁等场景。 但Redis也并非万能的,在长期的使用过程中,我们也遇到 Redis 一些痛点问题, 比如内存占用高, 数据可靠性差, 业务维护缓存和存储的一致性繁琐等。 因此,腾讯云数据库Tendis诞生了,今天,我们就结合视频,一起回顾腾讯云数据库Tendis混合存储版的整体架构, 并且详细揭秘其内部的原理。 进入“腾讯云数据库”公众号,后台回复“0331李景军”,即可下载分享PPT。 Redis&Tendis 使用 Redis
腾讯云数据库 TencentDB
2021/04/19
1.1K0
Redis数据库云端最佳技术实践
邹鹏,腾讯高级工程师,腾讯云数据库Redis负责人,多年数据库、网络安全研发经验。在网络、计算、存储、安全等领域有深入的研究和丰富的产品化经验。 在Redis、MySQL等数据库的高可用、高可靠和中间件方面有丰富的实践经验。
腾讯云数据库 TencentDB
2018/11/06
1.4K0
Redis数据库云端最佳技术实践
相关推荐
如何来存储比较大的业务数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档