开发者学习笔记【阿里云云数据库助理工程师(ACA)认证:云数据库RDS PostgreSQL 快速入门(一)】
课程地址:https://edu.aliyun.com/course/3112080/lesson/19079
云数据库RDS PostgreSQL 快速入门(一)
内容介绍:
一、RDS PostgreSQL发布历史
二、RDS PostgreSQL功能概览
三、RDS PostgreSQL优势
四、RDS PostgreSQL荣誉
五、RDS PostgreSQL业务价值
课程目标
今天通过课程学习可以了解到三部分内容:
第一部分是了解阿里云的数据库RDS PostgreSQL这个产品
第二部分能够掌握阿里云RDS PostgreSQL的产品的功能特性以及它的基本的技术原理
第三部分是在掌握如何利用阿里云RDS PostgreSQL来提升整个研发的效能
一、RDS PostgreSQL发布历史
首先进入RDS PostgreSQL的发布历史这部分,RDS PostgreSQL是一个兼容开源的PostgreSQL的产品。
最上面这张图,这个是开源的PostgreSQL的release timeline的路线图,最早的6.0的版本是在PostgreSQL 1995年的时候发布的,在九八年开始,基本上每一年PostgreSQL都会发布一个大的版本,每个大的版本它的生命周期大概是在五到六年左右的时间。
再看上图这个时间线。这个时间线是从PostgreSQL社区9.4的版本,也就是2014年12月发的这个版本开始的,这个时间线其实就是要对比一下PostgreSQL发了大版本之后,阿里云是什么时候发的对应的它的版本,第一个版本因为是阿里云的首发,所以相隔了六个月的时间,在2015年六月份发了9.4的版本,也就是RDS 的PG9.4,一直到一八年才发了第二个版本。
因为中间在做大量的平台的功能的迭代以及稳定性,还有像产品的形态一系列的工作,所以在发了9.4之后,中间间隔了基本上将近三年的时间,才发了阿里云的rds的第二个版本,也就是十的版本,十的版本也是非常受欢迎。
紧接着2019、2020,总共发了三个版本,这三个版本都是紧随PostgreSQL社区之后去发布的,从整个时间的延迟来看。会发现RDS PostgreSQL,仅跟PostgreSQL发布的时间是越来越紧密的。
比如11版本间隔了九个月,发12的时候就仅间隔了五个月,发13的时候相较社区发布仅仅是间隔了三个月的时间,也就是从2020年九月社区发13到RDS发13间隔了三个月的时间,说明整个的平台是越来越稳,发布节奏越来越快,其中云PG13这个商用版本的发布是在整个所有云厂商里面,中国确实首发
二、RDS PostgreSQL功能概览
第二部分了解RDS PostgreSQL的功能概览
来看一下架构图,业务程序是如何连接到数据库的,业务程序通过SLB连接到阿里云的PG产品,云上PG是分为了多个形态,第一个是基础版,基础版也就是单机版,这个通常会使用在不重要的业务场景里面,或者是一些比如开发的环境里面,又或者是业务刚刚起步的时候,还没有多少的用户量,它的数据库对可用性的要求没有高的场景,可以选择计算,因为较性价比比较高,高可用版是一个可以多机房部署的双机版,有主库、有从库,从库是准实时或者是实时的从主库同步增量的,也是用户可以直接来进行配置,同步的模式可以来配置,最后是只读实例,只读实例就是去增加扩展的数据库,对数据库的Read only的一些Workload的性能,最多可以添加32个只读实例,一个只读实例最多可以添加32个只读实例,整个的数据库是在统一的管控平台下面,整个生命周期都由管控平台来进行管理,包括备份,克隆以及监控、告警,以及整个SQL的审计等等一系列的都是通过管控平台来支持的,整个生态工具包括DMS数据库的管理工具,DBS数据备份工具,DTS数据的同步与迁移,DAS数据自治服务这样的工具,整个来提供外围的PG的管理,PG数据库同时,至少OSS DW这样外部表达的能力,可以把冷数据转到OSS,OSS存储相对更加廉价,如果访问频次比较低,可以考虑把冷数据转到OSS,用户在对OSS数据进行访问的时候,同样也是使用了SQL的接口,访问是比较便利的,同时把数据存储在OSS之后,就可以跟ADB、跟函数计算,以及跟大数据平台的max compute等等一系列产品进行数据相互的打通,来避免管理数据库成为一个孤岛的情况,可以跟所有的产品进行数据打通的,进行海量的计算,这个就是整个RDS PostgreSQL技术架构
1. RDS PostgreSQL功能说明
产品的功能说明,分为这个十个板块,第一个是高可用,高可用提供了双地板的主从的架构,保护模式根据数据对于数据可靠性的要求,提供保护模式的设定,强同步是完全的RPO等于零的同步,半同步就是正常情况下是主从是完全一致的,如果从步有抖动,超过了一定的设定的阈值,它会降级为异步的模式,异步模式是性能最好的模式,在容量高性能这块提供了ESSD的存储能力,可以提供32T的大容量,100W IOPS,规格提供了100多核,在备份恢复与升级这块,是完全提供了全量加归档备份模式,能够支持到时间点的还原的功能。
在安全可用性这块,一个是链路方面的安全,提供SSL链路,数据存储加密提供了云盘的加密,另外是数据访问侧提供了像网络访问的安全组的能力,整个操作层面提供SQL审计,只要开启所有都会被记录下来,可以提供种安全规的要求,主从的复制,社区版本主从复制的时候,逻辑位点是会丢失的,这个在阿里云的RG里面的内核层面做了一些增强,在高可用版本上面做逻辑订阅,它是不会有这种数据丢失的,即使发生主从切换也不会丢失。
另外就是在cloud DBA这块,cloud D BA来提供了性能洞察等等一些能力,openAPI是兼容了平台便捷管理的模块,正常通过控制台或者通过openAPI可以对用户数据库进行管理,也可以通过SQL进行管理,因为SQL是完全的一套user database,或者是修改用户或者修改database这些都是完全可以的,参数管理以及ha机制的管理等等,都是通过控制台可以去实现的,或API实现的,另外应用增强等会讲到,在PostgreSQL这块增加了很多业务层的一些能力,比如中文的分词,模糊查询的索引的能力等等,高性能这块RDS PostgreSQL它其实是支持并行计算的,CPU的多核并计算,在一些极端的场景可以提升20倍以上的性能,如果规格比较大,开启并行计算,这个性能是非常好的,它能够支持混合应用的场景,同时在GIS这块,相比较开源PostgreSQL,在移动对象处理做了许多的增强,性能有50倍以上的提升,分词有1000倍以上提升,如果用来做图像的搜索,比如以图搜图,或者相似的图片的搜索,人脸识别等等,向量搜索的性能相比较于暴力搜索提升2万倍以上的性能。
2. RDS PostgreSQL 性能解读-性能洞察
解读性能动察的模块,性能动察的模块,通过这样一个模块可以快速的定位,第一数据库有没有瓶颈,第二瓶颈是什么,定位它有没有瓶颈,其实是从中间这张图,CPU的load这张图可以看到,有一个虚线都在,虚线是实例的CPU的规格,如果长时间的负载都是在虚线之上,就明这段时间是有性能的瓶颈,性能瓶颈到底是什么,就可以通过最下面几个标签页可以来看,在SQL层面,哪些SQL是有瓶颈的,它消耗的资源是最多会排到前面,可以对这些SQL进行分析,从wait层面可以看到,整个数据库的瓶颈是在等什么,是在等IO,还是在等CPU的计算,还是在等其他的东西,在wait层面可以看到,同时可以在host以及database等等层面,观察点到底集中在哪,集中在哪个业务的用户下面,或者集中在来源的host是哪一些,或者集中在哪个database里面,它能够进行宏观、微观的洞察,这个是非常好用的一个功能
3.RDS PostgreSQL 性能解读-并行计算
(1)高性能
平均20倍+提速
相比单核
(2)自动并行
不需要改写SQL
自动根据SQL代价启动并行计算
支持自定义配置并行度
支持配置最大并行度,防止资源耗尽
(3)覆盖几乎所有复杂查询
表扫描
索引扫描
SQL过滤
JOIN、子查询
聚合、自定义函数
分区表、外部表
自定义聚合、函数
排序、建表、物化、创建索引
并行计算一个是高性能,并行计算是来提升性能的,可以去利用到数据库计算节点的多核的能力来提升整个计算能力,相比较单核,平均的提速在20倍左右,而且它支持几乎所有的复杂查询,比如表的扫描,一个SQL,可以有全面扫描,也可以有索引扫描,表的扫描以及索引扫描都是支持的,SQL子查询的过滤,比如条件后面几乎都是可以并行的,join以及聚合的能力,比如要对大量的数据进行聚合的操作,计算做一些统计的分析,它是能够做并行计算,在逻辑层面,分区表,外部表这些都是可以运行,自己定义的函数或者自己定义的聚合,排序,建表、物化、创建索引等等。
可以理解为几乎所有的操作都是可以并行的,并行本身它是可以自动化完成的,它会根据SQL的复杂度来选择要不要用并行,也可以设置一些参数强制来启动并行,比如一条SQL在固定的时间点去跑,可以去强制的指令SQL,比如要开几个并行,特别是一些晚上跑报表的业务,到了凌晨的时候,基本上业务正常的用户这种交互式的业务,使用的资源会比较少的情况,大量的资源腾出来跑这个报表,这样使得整体的性能得到提升,数据库资源的利用率也可以得到一个大幅度的提升。
4.RDS PostgreSQL 性能解读-应用增强功能
时空、GIS、时序
(1)插件
Ganos(自研GIS模块)
PostGIS(GIS模块)
Timescaledb
(时序模块)
(2)索引
GiST
BRIN
图谱、用户画像、实时营销圈人
(1)插件
ltree(树模块)
varbitx(位图模块)
pg_roaringbitmap
(高级位图模块)
(2)索引:
GIN
GiST
Rum
bloom
图像、多维相似分析、向量搜索
(1)插件
imgsmlr(图像相似)
cube(高维向量)
smlar(文本相似)
pase(高维向量模块)
向量相似
人脸识别
(2)索引
GIN
GiST
pase(hnsw,ivfflat算法)
文本分析、搜索,冷热分离
(1)插件
pg_trgm(模糊查询)
zhparser(中文分词)
oss_fdw(冷热分离)
JSONB(文档类型)
sQL/JSON path语法
(2)索引
GIN
rum
应用这块是RDS PostgreSQL内核对应用做了很多的增强,分四个板块,一个是时空GIS板块,在这个业务层面,支持几个件,第一个是Ganos,是自研的GIS模块,开源的是PostGIS,这两个模块帮助业务能够在支持非常复杂的地理信息相关的业务,比如像导航类、基于位置的社交类,还有像出行类,比如像共享单车、菜鸟配送等等相关的业务,都是可以来支持的,还有像公安的一些刑侦的模块,比如轨迹的跟踪或者轨迹的分析,都是可以来做的,在时序这块,内置Timescaledb这样的插件,能够支持时序的数据,比如特别常见的一些监控类场景,监控的数据都是时序数据,可以存储PG里进行管理,有一个插件叫做PG普罗米修斯,普米修斯实际上是一个利用PG的特性来去支持,使PG存储普米修斯后端的数据,是非常好用。
第二类就是图谱、画像类,以及实时营销圈人类的,这一类更多是用在数据的生成挖掘,或者是一些社交关系的处理,或者是比如新零售的实时推荐的模块里,里面有像ltree树形的插件,这个是存储状数据结构的类型,varbitx位图模块,pg_roaringbitmap高级位图模块,通过这几个模块,在阿里云的RDS文档里也是有最佳实践的,利用这样的一些功能,在用户画像类的场景,在新零售的实时推荐的场景,利用这些模块进行性能的加速,索引支持包括GIN、GiST、rum、bloom一些索引的支持。
第三个板块是图像类、向量搜索类以及相似分析的一些场景,这个场景就类似像图像搜索的一个场景imgsmlr,还有像pase,蚂蚁人脸识别团队,跟输出的一个插件pase高维向量模块,这个可以用在精准的人脸识别,可以做到上万倍的性能提升,支持索引,一个是pase支持两种算法,一个hnsw、一个ivfflat算法来支持高维的向量搜索,同样在智慧通里面也用于一些商业街或者综合商场,还有像新零售门店的到店用户分析等等这一类场景是跟物联网的整机的项目对外输出,里面内置RDS PG的pase的模块。
最后是文本类,这个也是最最常见的一些场景,比如在数据库里面定会有一些模糊查询,或者是中文分词的使用场景,以往可能需要把这些数据同步到搜索引擎去做查询。
今天用RDS PG内置索引,索引都是实时生成的,使用索引原理是跟搜索引擎类似,能够做到实时的模糊查询,以及实时的中文分词,模糊查询是前后百分号的模糊,不是可以通过加一个前缀,或者通过后缀倒叙搜索,前后模糊这种,其他数据库基本都是没法做的,可以在PG里面通过pg_trgm插件来实现,在多词类型存储,是有增强包括json、设置的语法,它会像数组的类型,在SAS的软件行业应用非常的广泛,应用特别的广泛来做一对多的数据的构建,数据建模,提升整体的性能,这是在应用的增强。
5. RDS PostgreSQL 性能解读-迁移上云
一个用户要把线下数据库迁移到云上RDS PG有很多种方法,第一种方法是针对于线下如果是9.4或者9.4以上的版本,PG版本它支持逻辑订阅,可以通过DTS做增量迁移,增量迁移在迁移的过程,它的停机时间可以非常的短,因为它在不停的做增量,做增量同步到的目标端RDS的任意版本都可以,可以做跨版本的迁移
第二类如果线下版本是9.4以下的版本,这个时候可以用pg_dump加ECS管道,建好管道,通过psql把线下的数据直接导入到线上,这个速度如果网络层没有太大问题,通常在50兆每秒以上,比如10G左右的数据库,迁移也是非常快的
如果用的是线下的9.4以下的版本,同时还想支持增量迁移上云,一种方法是DTS全量迁移不是做增量,如果想把变更量也迁移过来,这个是不行,迁移的过程当中是没有办法对线下数据库做写入,如果想做增量迁移,首先把线下的9.4以下的版本,把它升到9.4或者9.4以上,这个升级可以使用pg_upgrade,这个是PostgreSQL自己提供大版本的升价工具,升级也是比较快的,因为它只需要迁移元数据,只要迁表结构,它不需要迁移数据本身,比如这张100万的表,可能几分钟就迁完,因为只是导结构的过程,跟数据本身有多少没有太大的关系,比如有1T的数据,可能几分钟就可以迁完。