前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PGXZ 腾讯分布式关系数据集群—架构解析

PGXZ 腾讯分布式关系数据集群—架构解析

作者头像
腾讯技术工程官方号
发布于 2018-01-26 11:17:54
发布于 2018-01-26 11:17:54
1.6K0
举报
李跃森 (jasonysli)
李跃森 (jasonysli)

本文作者:数据平台部存储引擎组PGXZ项目负责人,2013年从华为加入腾讯,从事数据库和存储相关的工作。多年来一直致力于数据库引擎的研究和开发,从事过多款数据库内核的设计和开发工作,包括内存数据库,分析型数据库,事物型数据库,当前负责PGXZ项目的开发。

分布式关系数据集群是一项基础类的IT技术,广泛应用于事务处理领域。对微信支付后台大量数据的处理提供强有力的支持,保证数据处理的准确性及使用的顺畅。PGXZ是典型的MPP(大规模并行处理),Share Nothing的分布式数据库架构,在此种架构中各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表GreenPlum, DB2 DPF和Hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。

我们常说的 Sharding 其实就是Share Nothing架构,它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如阿里的TDDL和我厂的TDSQL,只需增加服务器数就可以增加处理能力和容量。

本质上来讲,PGXZ内部是垂直按照分布列进行节点级的水平分隔,是某种Sharding的实现,但PGXZ把这些分布逻辑和细节屏蔽到了数据库的内部,对外提供和单机数据库一样的接口,在保证了易用的同时还提供了强大的数据库能力。PGXZ的CN和DN的每个节点都是一个PostgreSQL的实例,从实现上来讲,PGXZ就是在PG的代码上加了集群的相关功能,从而做成了一个MPP的数据库集群。本文主要解析PGXZ为了实现MPP架构对PG做的修改。PGXZ的架构简图如下:

Coord:协调节点,对外提供接口,负责数据的分发和查询规划,多个节点位置对等;CN上只存储系统的元数据,并不存储实际的业务数据。

Datanode:存储实际数据,并执行协调节点分发的执行请求,实际存储数据的节点;DN上存储业务数据;各个DN可以存储在不同的物理机上,相互之间隔离,这也就是所谓的Share Nothing。

GTM:全局事务管理器,负责全局事务管理;GTM上不存储数据PGXC执行SQL的过程:

Step1:业务发送请求到Coord节点,Coord节点向GTM请求 事务信息。Step2:Coord发送SQL语句和事务信息到Datanode。Step3:Datanode执行完SQL后返回结果给CN。Step4:CN收集DN的结果并汇总会后返回给业务。

PGXZ的元数据管理首先介绍下集群的节点管理,节点管理涉及到两张表:PGXC_NODE,管理集群的DN和CN,保存集群所有的DN和CN信息。字段信息如下:

包含CN访问节点时必须的信息,主要是节点名称,节点是CN还是DN,端口,IP等等。PGXZ提供了ADD NODE,ALTER NODE,ROMOVE NODE等命令来对系统的节点进行添加,修改,删除,这些命令的底层就是操作的PGXC_NODE表。

PGXC_GROUP,PGXZ提供了一个节点组的概念,通过组可以把大规模的集群成几个小规模的集群,在建表时指定对应的存储组,进而达到业务上物理隔离的目的。表结构如下:

主要有组名称,组中成员节点OID等字段。CREATE NODE GROUP,DROP NODE GROUP等命令主要对PGXC_GROUP表进行操作。

为了管理集群中表的信息,PGXZ在PG原有的元数据的基础增加PGXC_CLASS对集群中的表进行管理:

pcrelid是集群表对应在CN或者DN上pg_class记录的Oid,这个列建了唯一性索引,保证记录的不可重复。

pclocatortype描述集群表的分布方式:

'H':哈希分布,使用分布列的hash值对分布节点数取模决定数据存储到哪个节点。该中分布释放无法做到线性扩容和缩容。

'R':复制表,这个表中的数据在所有分布节点上是完全相同的,也就是每个写入操作都会复制到分布节点。该种表一般用在数据量很小的表上。

'N': 随机分布,表中的记录随机分布到所有的存储节点。

'S':Sharding分布,表中的数据使用分布列的哈希值在一个逻辑的分布表上进行取模获得写入的节点。这种分布模式的表可以做到很好的扩容和缩容特性。

pcattnum是集群表的第一分布列,从1开始。

Psecondattum是集群的第二分布列,在双KEY分布时用来计算数据的存储位置,当前该列类型只能是timestamp。

这个表在DN和CN上都有存储,在每次建表操作时CN协调集群内部的所有节点完成建表操作,在每个节点上创建对应的PGXC_CLASS记录,完成建表操作。

CN在生成执行计划时根据PGXC_CLASS来决定请求发送往哪些节点。

PGXZ集群内部的连接管理PGXZ在CN中新加了Pooler进程来管理CN到其他CN和DN的连接,这个进程起到连接池的作用。

通过Pooler进程,CN可以高效的获取到其他节点的连接,保证事务的执行效率。

Pooler进程中有多个dbpool,每个dbpool对应一组数据库和用户名的组合,不同的用户名和数据库的组合对应不同的dbpool。

dbpool在该用户首次登录这个数据库的时候创建,使用hash表来管理该用户往各个节点的对应数据库的连接池。每个节点的连接池存放在以nodeid为键的hash表中。这个连接池具有普通数据库连接池所需的特性,包括最大连接数,最小连接数,连接生命周期等等。

PGXZ中的分布式事务PGXZ通过2PC事务来保证事务执行的原子性,这里拿CREATE TABLE为例子进行解析:

第一步,CN向所有节点发起BEGIN TRANSACTION,保证整个操作的原子性,这个操作由CN内部发起,业务无感知。

第二步,CN向所有节点发起CREATE TABLE命令,每个节点完成建表操作。

第三步,CN向每个节点开启两阶段事务,这个阶段包括发起请求的节点自己。阶段结束后,所有节点完成PREPARE。

第四步, CN向所有节点发起两阶段事务提交请求,至此,建表操作结束。

说到两阶段事务,对应的故障和处理方法是一定要讨论的。在第一和第二个阶段发生故障时,事务此时还是普通事务,直接回滚所有节点的事务即可,不会有其他的副作用。但是在第三阶段以后情况有所不同,在事务被PREPARED以后,事务中的信息在两阶段事务中进行了持久化,这个事务必须通过COMMIT PREPARED或者ROLLBACK PREPARED来完成。

在一些极端的场景下,比如节点硬件故障,磁盘空间不足,COMMIT PREPARED或者ROLLBACK PREPARED阶段会被异常结束,这些系统的事务状态当前是未决的。因为两阶段事务的持久化信息中很有可能会包含锁的信息,如果这些事务得不到很及时的处理就会对后续的业务处理造成较大的影响。我们提供了一个2PC事务的自动处理工具,在系统监测到残留的2PC事务时,运行工具来处理系统的两阶段事务,保证业务的正常运行。

工具会扫描系统的2PC事务状态并做出处理,处理的方式如下表:

通过上面的方法,在系统发生故障时,可以有效的降低2PC事务带来的影响。总结:除了元数据管理,集群连接管理,2PC事务意外,PGXZ在查询优化器的层面也做了很多优化来解决分布式后的查询优化。这里篇幅所有限不做详细的解析。

思考:数据库存储架构的发展主要有Shared Nothing和Share Everything。Share Everything的集群商业软件有SybaseIQ,Oracle RACK等,但是在开源软件软件领域目前还没有相应的解决方案。当前具备POSIX接口的分布式文件系统已经在很多的生产环境投入使用,我们是不是也可以畅想下基于DFS的Share Everything架构的数据库集群?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯技术工程官方号 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PostgreSQL的几种分布式架构对比
Citus以插件的方式扩展到postgresql中,独立于postgresql内核,所以能很快的跟上pg主版本的更新,部署也比较简单,是现在非常流行的分布式方案。Citus在苏宁有大规模应用,微软也提供citus的商业支持。下面是citus的架构:
数据库架构之美
2020/01/02
8.6K0
PostgreSQL的几种分布式架构对比
PGXZ-腾讯全功能分布式关系数据集群
开头先解释下全功能什么意思,所谓的全功能指的是支持绝大部分的SQL特性,像主键,触发器,约束,函数,存储过程,跨节点join等等。而且这些特性的支持对业务完全透明,业务可以像使用一台单机数据库一样来使用PGXZ。 PGXZ凝结了数平小伙伴们一年多的辛苦劳动,在 2015年10月份正式上线接入业务。当前主要的用户有微信支付,数据平台。最大的线上集群规模31个节点,每分钟55万请求。 本文先介绍下PGXZ的渊源,然后对PGXZ的特性进行下总结。 要讲PGXZ就不得不先说下PGXZ的祖父--Postgresql。
腾讯大数据
2018/01/29
2.1K0
PGXZ-腾讯全功能分布式关系数据集群
分布式两大流派 POSTGRESQL -XC 了解一下
分布式数据库有两大流派,NEW SQL VS POSTGRESQL -XC ,NEW SQL 的分布式主流的理论来源自 GOOGLE 的分布式数据库spanner,以及相关理论的白皮书,而令一派的分布式数据库来自于POSTGRESQL -XC, 今天我们看看到底POSTGRESQL-XC 这个流派的方式是什么,有什么特点,当下那些分布式数据库采用了POSTGRESQL -XC。
AustinDatabases
2021/07/15
4.9K0
分布式两大流派  POSTGRESQL -XC 了解一下
为什么说GTM是所有PGXC架构分布式数据库无法逾越的性能瓶颈?
熟悉pg的人对pgxc都不陌生,pgxc最初由stromdb公司开发,应用于商业,后来被TransLattice收购并将其开源,也就是现在的pgxl。Pgxc是基于pg的非常成熟的分布式架构,是一款混合负载的htap数据库。国内也有很多基于pgxc来做的分布式数据库,例如华为GaussDB-A,腾讯Tbase,亚信antdb等或多或少都借鉴了pgxc的架构理念。pgxc的总体架构大家都很清晰了,不再赘述。
数据库架构之美
2020/02/26
3.1K0
为什么说GTM是所有PGXC架构分布式数据库无法逾越的性能瓶颈?
分布式 PostgreSQL - Citus 架构及概念
Citus 是一种 PostgreSQL 扩展,它允许数据库服务器(称为节点)在“无共享(shared nothing)”架构中相互协调。这些节点形成一个集群,允许 PostgreSQL 保存比单台计算机上更多的数据和使用更多的 CPU 内核。这种架构还允许通过简单地向集群添加更多节点来扩容数据库。
为少
2022/03/31
1.6K0
分布式 PostgreSQL  - Citus 架构及概念
【DB宝94】PG分布式之PGXL安装部署
文档:https://www.postgres-xl.org/documentation/index.html
AiDBA宝典
2022/04/11
2.4K0
【DB宝94】PG分布式之PGXL安装部署
Postgres-XL集群搭建详细创建步骤
最近公司业务需求,需要使用Postgres-XL 集群,关于这部分知识,网络资料不多。经过一段时间的查询,和各种弯路之后,终于完成安装。将详细步骤完整记录,以备查阅。也希望能帮到需要的人。
星哥玩云
2022/08/13
9110
开源TBase编译部署详细步骤
很多学员想学习TBase数据库,但是苦于没有企业版的授权文件,在编译部署开源版本的时候又遇到诸多问题,因此我写下这篇文章供大家参考。
腾讯云数据库 TencentDB
2020/12/23
2.8K0
开源TBase编译部署详细步骤
微信支付用的数据库开源了
腾讯TBase是一款腾讯自研高性能HTAP数据库,提供高性能的OLTP和OLAP能力,同时保证可扩展全局一致性分布式事务(ACID),为用户提供高一致性的分布式数据库服务和高性能的数据仓库服务。一方面解决了传统数据库扩展不足、数据sharding之后数据库事务的严格一致性难题、数据安全、跨地域容灾等问题,同时具备了高性能事务处理、数据治理、混合负载支持等能力。 在OLTP方面,TBase采用MVCC+全局时钟+2PC+SSI的方式来实现全局一致性分布式事务,同时引入大量性能优化的设计来减少全局事务带来的开
腾讯云数据库 TencentDB
2019/11/18
8680
微信支付用的数据库开源了
腾讯云国产分布式数据库TBase技术分享
作者简介:许中清,十多年数据库从业经历。从事数据库内核开发、数据库产品架构和规划。曾就职于华为,2015年加入腾讯,参与过TBase、CynosDB等数据库产品研发。专注于关系数据库、数据库集群、新型数据库架构等领域。目前担任CynosDB的分布式存储CynosStore负责人。
腾讯云数据库 TencentDB
2019/05/21
9.9K2
腾讯云国产分布式数据库TBase技术分享
Postgres 分布式数据库
聊起分布式数据库,大家第一印象估计是 谷歌的 Spanner ,以及 TiDB。其实还有另外一种分布式 Postgres-XC (目前已经迭代到 PostgreSQL-X2 ),Postgres-XC 数据库系统主要是基于水平可伸缩的share nothing 架构,支持全局事务,表分区,复制以及查询计划在各个节点并行执行。
用户1278550
2022/05/17
2.2K0
Postgres 分布式数据库
Postgres-XL集群部署与管理指南
Postgres-XL是一个基于PostgreSQL数据库的横向扩展开源SQL数据库集群,具有足够的灵活性来处理不同的数据库工作负载,架构如下图所示:
星哥玩云
2022/08/17
1.1K0
Postgres-XL集群部署与管理指南
在Centos7环境下进行搭建postgresql-xl集群环境
更多参数参考:http://postgres-xc.sourceforge.net/docs/1_1/pgxc-ctl.html
cn華少
2018/09/11
2.1K0
在Centos7环境下进行搭建postgresql-xl集群环境
国产开源数据库:腾讯云TBase在分布式HTAP领域的探索与实践
腾讯云从 2009 年便开始在内部的业务上进行尝试,在企业分布式数据库领域的自研过程是比较有经验的。当时主要是为了满足一些较小的需求,比如引入PostgreSQL 作为 TDW 的补充,弥补 TDW 小数据分析性能低的不足,处理的需求量也较小。
腾讯云开发者
2020/11/23
2.8K0
十分钟搭建实验分布式数据库环境
划水了好久,今天来跟大家分享一下如何用一台笔记本,构建一套分布式数据库的实验环境吧。我们使用docker 和 postgres xl 来完成。
麒思妙想
2022/04/12
8410
十分钟搭建实验分布式数据库环境
Postgresql-xl全局快照与GTM代码走读(支线)
(第一篇PG视角、下一篇GTM视角) (前面是乱七八糟的一些概念,最后一部分是GDB走读)
mingjie
2022/08/03
1K0
Postgresql-xl全局快照与GTM代码走读(支线)
实现分区表性能提升超10倍,解密TDSQL PG版开源升级特性
1月11日,腾讯云TDSQL PG开源版(开源代号TBase)再升级:分布区表关联查询性能(join)提升超10倍,同时提升了产品在分布式场景下的易用性,增加灵活可用的功能组件。 该升级版本在第十一届PostgreSQL中国技术大会上正式公布,同时更新文档已同步在GitHub上。依托社区和内部业务系统的实践检验,TDSQL PG开源版基本保持每月一次小升级、每半年一次重大升级的节奏,助力众多开发者应用前沿数据库技术。 本期将为大家深度解读TDSQL PG开源版升级特性,具体包括:分区表功能增强、异地多活易
腾讯云数据库 TencentDB
2022/01/14
1.1K0
强大互联网基因,深度揭秘腾讯云新一代企业级HTAP数据库TBase核心概念
腾讯云PostgreSQL-XZ(PGXZ)经过公司内部多年业务的打磨,在2017年改名为TBase后,正式对外推出,目前已在政务、医疗、公安、消防、电信、金融等行业等行业的解决方案中大量应用。TBase以其功能强大,运行稳定,高性能高可靠性,以及强大的互联网基因得到客户的普遍认可。
腾讯云数据库 TencentDB
2018/05/07
1.6K3
强大互联网基因,深度揭秘腾讯云新一代企业级HTAP数据库TBase核心概念
金融级分布式数据库架构设计要点
银行业从最初的手工记账到会计电算化,到金融电子化,再到现在的金融科技,可以看到金融与科技的结合越来越紧密,人工智能、大数据、物联网、区块链等新兴技术改变了金融的交易方式,为金融行业的创新前行提供了源源不断的动力。同时互联网金融的兴起是一把双刃剑,带来了机遇的同时也带来了挑战。普惠金融使得金融的门槛降低,更多的普通大众参与到金融活动中,这让金融信息系统承受了越来越大的压力。于是我们可以看到大型商业银行、保险公司、证券公司、交易所等核心交易系统都在纷纷进行分布式改造,其中数据库作为有状态的应用,成为了信息系统中唯一的单点,承担了所有来自上层应用的压力。随着数据库瓶颈的凸显,进行分布式改造迫在眉睫。
数据库架构之美
2020/01/17
2.5K0
金融级分布式数据库架构设计要点
pgxc架构下两阶段提交异常分析
在当前去IOE的大潮下,分布式数据库正如火如荼的发展起来,特别是国产数据库呈现了井喷态势。一个典型的分布式数据库应该具有如下组件:①协调节点,也叫sql转发节点,用来进行sql协议支持,分布式执行计划生成与下发;②数据节点:用来存储数据,同时进行运算;③全局事务管理器,用来保证事务一致性。为了保证高可用,成熟的分布式数据库这些节点都具有主备切换功能。
数据库架构之美
2019/12/18
1.4K0
pgxc架构下两阶段提交异常分析
推荐阅读
相关推荐
PostgreSQL的几种分布式架构对比
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档