基于云原生数据库 PolarDB for PostgreSQL 分布式开源项目实现序列号生成和性能调优赛题解析 | 学习笔记

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 快速学习基于云原生数据库 PolarDB for PostgreSQL 分布式开源项目实现序列号生成和性能调优赛题解析

开发者学堂课程【第八届大学生创新创业大赛阿里命题数据库命题解析基于云原生数据库 PolarDB for PostgreSQL 分布式开源项目实现序列号生成和性能调优赛题解析学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1045/detail/15278


基于云原生数据库 PolarDB for PostgreSQL 分布式开源项目实现序列号生成和性能调优赛题解析


内容介绍:

一、PolarDB for PostgreSQL 分布式架构

二、比赛题目


一、PolarDB for PostgreSQL 分布式架构

1、PolarDB分布式是基于社区 pg 上面演进出的分布式架构,主要采用mpp架构,主要分两层,一层是协调节点,一层是存储节点,协调节点负责用户数据接入多个协调节点之间是彼此独立的,也就是每个cn节点都可以单独接受用户的查询请求,其他节点处理sql请求的时候,它会生成分布式plan,发到对应的DN进行执行,把执行结果返回给客户端,真正的表数据是在多个dn节点上存储,比如表的数据,它会根据分布k划分为多份数据,单独的一份数据会存储在单独的data node节点上,可以增加背景的形式保障它的可靠性,分布式事务采用的是2PC提交的方式,也用了 hnc 的四种协议保证一致性。

image.png

2、经过过去几个版本的迭代,演进出插件化的形态,在社区单机配件基础上提供分布式的插件,通过使用插件,就可以把单个 pg 扩展成分布式的集群可以用代码部署单机节点,如果后续业务有需要,可以用插件的形态把单个节点继续扩展为分布式集群,内核组建相对更加统一,数据库节点没有那么多的类型,在兼容性方面可以做到兼容pg的最新版本,sql功能方面,尽最大的限度兼容单机的 sql 功能,但是分布式跟单机还是有一些区别,有的地方还是需要继续演进。

3.插件化的一种形态在插件里面包含查询优化器,分布式事务的管理,以及连接池功能,比如用户的 sql 过来之后,在插件里面,社区编辑器有 hook 功能,利用 hook 在插件里面进行分布式的查询优化,把执行计划再分发给对应的data node,让它执行再收集结果,分布式事务方面,2pc结合的四种协议2pc在commit时候,会先进行 prepare,完成之后,再进行连接,减少连接的负担,以及更好的管理 Cn和 dn 之间的 commit,在插件里面也维护了一个连接池 hlc 特性在 data node上需要有一些支持,但是没有进行插件化,在设计底层存储进行修改在pg11版本上提供patch,用社区11版本再加上 planner patch,再加上插件,就可以得到完全的支持,分事务分布式的 pg 数据库。

image.png

4、交互流程,一个cn,底层有两个cn,假如用户连接到cn1上,开始执行sql,首先sql会分发到各个dn上,cn上自己当前的时钟,发送给dn1和dn2,dn1和dn2在收到时钟之后,它会跟自己的本地时钟进行比较,会把自己的本地始终更新为最大的值,当cn开始commit时候,开始2pc的过程,首先进行prepare,发送给各个dn之后,每个dn就会把自己的本地时钟往前推进,加一,把preparets回复给cn,cn会拿到所有dn的prepare ts之后,会从里面选择一个最大的prepare ts作为分布式事务的提交式检索,同时它也会把自己的本地时钟推进到最大的commit ts,进行加2PC的第二阶段,向各个dn发送commit,DN会把自己的本地时钟也会继续推进提交时间,完成两阶段的第二阶段,整个分布式事物就是简单的概要。

image.png

5、演示用代码和文档部署环境,文档和代码通过链接都可以找到,直接直接直接找到。

参考文档: htps://github.com/ApsaraDB/PolarDB· -for- PostgreSQL/tree/distributed#deployment-from-source code

代码 : htps//github.com/ApsaraDB/PolarDB-for- PostgreSQL/tree/distributed

在一台机器上部署两个CN和两个DN的分布式集群,用阿里云的ecs,把代码下载好,首先直接从编译开始,编译也提供了脚本,bash里面需要注意的地方就是要安装的目录需要指定,包括安装的时候,有bug或者之类的一些选项,默认情况下,什么都不加就可以,编译好之后,可以看配置下环境变量,后面操作会更方便一点,路径跟bash中对应的,准备部署文件,对pgxc ctl工具进行改造,用prepare distributed命令可以直接直接把SHOME/polardb/ polardb_ paxos . conf配置文件准备好,配置文件的默认就是在一台机器上进行两个dn,一个sql进行部署,内容里面格式跟查询社区是一样的,可以有两个cn,也会有两个dn,包括端口号,如果有需要修改的,可以自己修改,用默认的就可以,清理集群就是可以把上一次部署的一些目录进程全部清空掉,有配置文件,用命令可以初始化集群,首先会把commit 和datanode initdb拉起来,因为插件本质上在polarx基础上进行修改,可以看到每个插件每个节点都会进行poreign data wrapper polarx添加的操作,这时已经拿到两个cn,两个dn的节点,可以看到状态,15,16是两个cn,18,19是两个dn,可以连接上看,select*from pg foreign_ server可以看到两条cn,两条dn,端口号,比如随便插两条数据,分布式数据最终会到底层的两个dn上,可以查到两条数据,

image.png

cn1,cn2也可以查询到数据,连接到某一个dn,18和19是dn,可以看到插入的两条数据,1和100,1落在dn1上,在另一个节点,100数据,整个集群搭建好。


二、比赛题目

1、序列号的生成,序列号在单机里面比较容易实现,用一些进程间通信就可以实现,因为分布式的网络通信的开销会大,单机本身的复杂度也比分布式要低,所以现在的目标就是在分布式的集群里面,设计跟单击数据库里面sql效果差不多的东西。

2、可以看单机sequence的实现,一些用法,语句和语法是兼容的,有extval,setval,currval,lastval操作,默认从start1开始,nextval是2,之后是3,不管多少个sequence连接到数据库里面,每次顺序都是单调递增的。

3、但是在分布式环境里面的情况就会变得复杂,客户端可以连到不同的cn,不同的cn之间需要产生全局有序的序列号,要求就是在介绍的分布式数据库的项目上实现功能实现nextval,setval,currval,lastval操作,在实现的方式上,有几条路径可以选,需要在功能和性能上有平衡,比如用最严格的方式,比如跟单机的效果是一模一样,也就是产生sequence一定是全局单调递增,在不同的session之间要生成严格有序的序列号,不管多少个客户端连到不同的cn或从全局上看不可能出现有两个一样的序列号,比如cn1上next1,cn3上next得到3,中间的2被缺掉是不行的,方式是严格有序,但是方式的性能会有一些影响,所以可以用另外一种路径,可以分批进行分配,可以在每个session上或者每个cn一批一批的进行分配,比如session获得1到100,另一个session获得101到200,一定是递增的,但是不一定是严格有序的,可能中间会缺一些东西,但是能换来性能上的一些的改进,在全局范围内也不会出现两个一样的sequence。

4、第二个题目是性能调优的题目,因为在数据库场景里面经常会看sql跑得慢或者性能比较差,经常做性能调优的事情,在单机数据库里面可以通过常见的命令或者在数据库里面采集函数级别的信息做事情,但是在分布式上面,题目是开放性的,比如一台机器的节点,有方法可以做性能的查看和诊断,但是包括业界没有好用的工具,在分布式跨了几个节点或是在场景下有全局的统计,内部的一些汇总,buffer命中率,cpu的利用率,每个节点上的热点函数,希望profile性能调优的工具最后是一种图形化的形式进行展现或者让开发人员方便的获取整个数据库内部的热点瓶颈等形式。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5天前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
18 0
|
1月前
|
人工智能 Kubernetes Cloud Native
深度对话 解锁阿里云分布式云原生技术落地新姿势
深度对话 解锁阿里云分布式云原生技术落地新姿势
深度对话 解锁阿里云分布式云原生技术落地新姿势
|
2月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
75 5
|
2月前
|
运维 安全 Cloud Native
核心系统转型问题之保障云原生分布式转型中的基础设施和应用层面如何解决
核心系统转型问题之保障云原生分布式转型中的基础设施和应用层面如何解决
|
2月前
|
监控 Cloud Native 容灾
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
|
2月前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
2月前
|
运维 Cloud Native 安全
核心系统转型问题之确保核心系统云原生分布式转型的安全可靠性如何解决
核心系统转型问题之确保核心系统云原生分布式转型的安全可靠性如何解决
|
2月前
|
弹性计算 Cloud Native Windows
核心系统转型问题之核心系统需要转型到云原生分布式架构的原因如何解决
核心系统转型问题之核心系统需要转型到云原生分布式架构的原因如何解决
|
2月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
55 0
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
什么是云原生数据库PolarDB分布式版
本文介绍什么是云原生数据库PolarDB分布式版,也称为PolarDB分布式版,本手册中简称为PolarDB-X。
69 0

热门文章

最新文章