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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
92 3
|
5天前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
150 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
2天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
3月前
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
273 5
|
1月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
66 15
|
1月前
|
存储 Cloud Native 块存储
EBS深度解析:云原生时代企业级块存储
企业上云的策略,从 Cloud-Hosting 转向 Serverless 架构。块存储作为企业应用上云的核心存储产品,将通过 Serverless 化来加速新的计算范式全面落地。在本话题中,我们将会介绍阿里云块存储企业级能力的创新,深入解析背后的技术细节,分享对未来趋势的判断。
115 2
|
1月前
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####
|
1月前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
1月前
|
Kubernetes Cloud Native 调度
云原生批量任务编排引擎Argo Workflows发布3.6,一文解析关键新特性
Argo Workflows是CNCF毕业项目,最受欢迎的云原生工作流引擎,专为Kubernetes上编排批量任务而设计,本文主要对最新发布的Argo Workflows 3.6版本的关键新特性做一个深入的解析。
|
1月前
|
数据库