PolarDB MySQL 版 Serverless-测评

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介: 通过函数计算调用PolarDB数据,拉起暂停状态的PolarDB MySQL 集群。

前言


本文分 5个部分介绍产品

一,购买及配置

二,部分功能测试

三,函数计算调用PolarDB

四,问题及建议

五,总结


在开始测试PolarDB的Serverless 实例之前,我们用过PolarDB x 分布式版,对业务库进行读写分离,水平拆分,大大提升了数据库的整体存储容量和并发吞吐量。但高性能的服务背后是高昂的费用,我们认真思考如何将本增效。比如尽量降低PolarDB版本配置,但始终存在峰谷期间的资源浪费,也无法做到按访问连接数做自启停。直到PolarDB的Serverless 这款产品出现,给我们的运维工作优化带来了新的希望。下面我们一起展开测评下吧。



一,购买及配置

购买试用版本的时候注意以下几个部分,尤其是“是否开启无活动暂停”和“表名大小写”规则。


图片.png


图片.png


创建成功,但这里存在VPC和交换机网络问题,请见“问题及建议”板块



图片.png


配置白名单和安全组

图片.png


此处 因测试方便 使用了全局的“0.0.0.0/0”,不建议生产使用。

安全组可以指定和访问源相同的,比如ECS 需要访问数据库,此处就设置与ECS相同的安全组。


如果创建后出现停止状态,可以在数据库节点处 启动集群。


图片.png

创建账号


图片.png

分别创建root 高权账号,DMS管理账号,业务测试账号。


图片.png

创建数据库

test_db 和test_db_2创建完毕后,点击后面的SQL查询跳转到DMS平台。

图片.png

简单的创建和配置PolarDB MySQL实例完成。




二,功能测试



DMS连接访问:

输入以上dmser连接账号,测试连接通过后点击登录。

管控模式,如果只是测试直接选自由操作;如果是个人或小团队使用,选稳定变更;

如果是生产及规模以上,建议使用收费版本,安全协同。

图片.png

DMS登录成功,与托管版RDS 无区别。

图片.png

数据导入测试都正常。

图片.png


图片.png


PolarDB控制台只能创建数据库和账号,不能创建表。如果需要创建表和维护数据等操作,可以通过DMS来管理。




备份恢复:

PolarDB 默认会创建一个初始化的备份,以及每天一次的自动备份。

暂停状态下只能将备份恢复到新集群。


图片.png



我们点击回复数据到新集群后,跳转到购买新集群的页面,配置和当前集群几乎一样。

购买成功后会创建一个 pc-bp10592j1z8lz6axm 名称的 新实例

图片.png

数据库及账号都会克隆过来,但实例里的一些配置 比如白名单,备份策略,参数配置等都不会同步。

图片.png

启动状态下可以下载备份,如果本地也有跑数据库,可以恢复到本地实例中。


图片.png


图片.png

copy 链接地址即可下载文件到本地。



DTS同步:

我们测试下数据同步功能,此处用的是DMS集成的DTS同步功能。


计划将test_db 下的users 表同步到 test_db_2数据库中


点开DMS数据同步功能,配置相关参数,注意 账号要有读写能力。

图片.png


配置源同步和策略

将数据库和表选择到右边对象框,记得重命名数据库名称test_db_2,否则会迁移到默认数据库test_db下。


图片.png

高级配置 默认,不需要修改


图片.png


预检查出现问题,binlog没有开启导致。

图片.png

PolarDB默认使用了更高级别的物理日志代替binlog,不过我们可以手动开启,方便做一些有binlog的场景,比如实施数据同步,订阅等。


图片.png


开启后 重试正常。


图片.png


我们也买下DTS实例


图片.png


全量同步完成,在 test_db_2 数据库中展示了users的所有数据。

图片.png

现在我们测下增量同步,对源表 进行insert动作,看看目的表会不会同步。


图片.png

源表操作完后,目的表users立即就更新了。

图片.png


图片.png


PolarDB MySQL Serverless 版本跟我们之前使用的版本没有什么大的区别,完全可以照搬复用,使用DTS做数据迁移。




三,函数计算调用PolarDB  MySQL Serverless实例


现在我们测试下PolarDB serverless 是否可以按访问有无连接,自动拉起暂停实例吧。


1,搭建函数


参考:https://help.aliyun.com/zh/fc/user-guide/access-an-apsaradb-rds-for-sql-server-database

CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `age` tinyint(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `users` (`id`, `name`, `age`) VALUES
(1, '张三', 18),
(2, '李四', 28);

在以上test_db 数据库中创建表和插入数据。


定义代码逻辑

code 文件夹里定义index.py

# -*- coding: utf-8 -*-
import logging
from re import S
import pymysql
import os
logger = logging.getLogger()
connection = None
# initialize hook, connect to the database
def initialize(context):
    global connection
    try:
        connection = pymysql.connect(
            # Replace it with your host name.
            host=os.environ['MYSQL_ENDPOINT'],
            # Replace it with your port number.
            port=int(os.environ['MYSQL_PORT']),
            # Replace it with your username.
            user=os.environ['MYSQL_USER'],
            # Replace the  password with the one corresponding to your username.
            passwd=os.environ['MYSQL_PASSWORD'],
            # Replace it with the name of your database.
            db=os.environ['MYSQL_DBNAME'],
            connect_timeout=5)
    except Exception as e:
        logger.error(e)
        logger.error(
            "ERROR: Unexpected error: Could not connect to MySql instance.")
        raise Exception(str(e))
def pre_stop(context):
    logger.info("pre_stop hook start.")
    if connection != None:
        connection.close()
def handler(event, context):
    if connection is None:
        raise Exception("Mysql connection not initialized.")
    # Check if the server is alive.
    # If the connection is closed, reconnect.
    connection.ping(reconnect=True)
    try:
        # Database write operation
        with connection.cursor() as cursor:
            # the primary key id is self-incrementing
            sql = "INSERT INTO `USERS` (`NAME`, `AGE`) VALUES (%s, %s)"
            cursor.execute(sql, ("王二", 38))
            # connection is not autocommit by default. So you must commit to save your changes.
            connection.commit()
            logger.info(
                "Successfully insert a piece of data into the database")
        # Database read operation
        with connection.cursor() as cursor:
            cursor.execute("SELECT * FROM USERS ORDER BY ID DESC")
            result = cursor.fetchone()
            logger.info(result)
            return "user: {}".format(result)
    except Exception as e:
        logger.error(
            "ERROR: Unexpected error: Could not connect to MySql instance.")
        raise Exception(str(e))



注意此处定义的是USERS 表,我们一开始购买实例的时候是区分大小写的,后面我们测试下是否真的会区分。

再定义依赖 requirements.txt

PyMySQL==1.0.2

定义 函数计算配置 s.yaml

edition: 1.0.0
name: polardb-test-app
# access 是当前应用所需要的密钥信息配置:
# 密钥配置可以参考:https://www.serverless-devs.com/serverless-devs/command/config
# 密钥使用顺序可以参考:https://www.serverless-devs.com/serverless-devs/tool#密钥使用顺序与规范
access: default # 设置成你自己的密钥信息
vars: # 全局变量
  region: cn-hangzhou
  service:
    name: fc-polardb
    description: 'fc example by serverless devs'
services:
  fc-example:
    component: fc 
    props:
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: python3-mysql
        description: 'hello polardb  by serverless devs'
        runtime: python3
        codeUri: ./code
        handler: index.handler
        memorySize: 128
        timeout: 60
        initializationTimeout: 20
        initializer: index.initialize
        instanceLifecycleConfig:
          preStop:
            handler: index.pre_stop
            timeout: 20
        environmentVariables:
          MYSQL_USER: "polarer"       # 设置成你自己的mysql数据库配置
          MYSQL_PASSWORD: "xxx"   # 设置成你自己的mysql数据库配置
          MYSQL_ENDPOINT: "read-sky9ali.rwlb.rds.aliyuncs.com"   # 设置成你自己的mysql数据库配置
          MYSQL_PORT:  "3306"     # 设置成你自己的mysql数据库配置
          MYSQL_DBNAME: "test_db"     # 设置成你自己的mysql数据库配置



安装依赖

使用s工具安装依赖,需要本地有 docker环境

s build --use-docker


图片.png


部署

图片.png


控制台自动创建的函数

图片.png


调试

图片.png


USERS 表报错,我们定义为users测试下看。

重新deploy 后 再 invoke


图片.png


执行成功。

我们再通过DMS 查看PolarDB 中的数据

插入也成功。


图片.png



2,触发测试


PolarDB serverless 暂停情况下,我们测试看看能否返回数据

默认无活动暂停检测时长调整为5分钟,默认为1小时。


图片.png

确保实例是暂停情况下,点击函数计算的测试函数。


图片.png


持续6s 左右,数据已经返回,但实例还处于启动状态中,应该是延迟。


图片.png

测试通过,函数计算实例 能顺利将暂停状态的PolarDB Serverless集群拉起,并返回接口数据。





四,问题及建议



1,购买无法选择已有的VPC网络和VSwitch交换机


截图如下:


图片.png

我在杭州华东1下 已有VPC网络,无法选择已有资源网络,多次刷新也无效,只能创建新的VPC和VSwitch。

创建后,我再次尝试重新去购买PolarDB serverless版本,发现还是不能选择已有VPC,只能自动创建新的VPC。

在另外一个 阿里云账号下 测试结果一致。

这就带来很大的问题了,如果真上生产,使用上会存在问题,后端服务与数据源在同一个VPC 内才能带来高效快速的数据读写能力。

现在都在不同VPC,形成了内网隔阂。

需要先搭建VPC互通,比如CEN+TR转发路由,这无形增加了成本。

图片.png

其次,不能自定义VPC的CIDR地址,自动创建的VPC地址和已有存在冲突。

创建时 也存在逻辑问题,都是给了创建交换机的入口,但不能指定已有VPC地址,这又如何自定义交换机呢?

图片.png




2,  建议数据库账号授权可以同时增加多个

此数据库 想授权给DMS和业务侧 ,但只能设置一个账号。

如果需要设置多个,必须去账号管理处再设置。


图片.png



3, 开启“无活动暂停”情况下,如果实例暂停,执行DDL 无法唤起实例启动

由于较长时间没有操作实例,PolarDB已经暂停了


图片.png

此时我们创建一条creat 语句,等待了数分钟还是 没有执行成功。


图片.png


手动安排启动

图片.png


启动后 执行DDL成功。


图片.png


看样子是 DDL 不支持唤起。





4,备份数据差异

10:55 新创建的实例,10:58 备份竟然有 320GB。

没有手动去操作备份,却产出了1份 320GB的手动备份文件。


图片.png

手动备份 竟然也有2.3GB


图片.png


但实际查询统计数据 非常小。

图片.png


建议优化下备份大小。




5,手动启动停止集群会弹窗

已停止集群,手动点击启动集群 报弹窗错误,

点关闭后,需要刷新页面 才会显示启动中状态,过一会再刷新就是运行中状态。

这里感觉不太合理,建议去掉弹窗,状态调整为自动同步。


图片.png




6,DTS同步暂停实例,提示信息错误


当PolarDB serverless 集群是停止状态时,同步报错PolarDbModifyWhiteNames。

 Message: - OperationDenied.DBClusterStatus : The operation is not permitted due to status of cluster.

-  DbInstanceId pc-bp11jvi2497mve419 - ModuleName:Add a whitelist to the source database.


图片.png


以为是白名单问题,但测试实例开了0.0.0.0/0授权了全范围访问,不可能还是访问地址受限。

启动实例后,再次同步测试正常。

建议修改错误返回信息。




五,总结


以上通过几个小例子测试了下PolarDB  M有SQL Serverless 版本,基本功能都满足我们需求,在跟普通集群版本对比上来看,多了serverless的能力,也就是弹性伸缩。我们使用函数计算调用PolarDB数据的案例,顺利将暂停的PolarDB Serverless 集群拉起,并返回数据,初次返回数据不过数秒,远比普通集群启动速度要快。这无疑是一个非常大的创新,一些凌晨,不定期的任务,可以使用PolarDB Serverless 版本,来降低成本。此外PolarDB Serverless 还支持弹性扩缩容,我们可以设置实例使用资源量按业务的波峰谷而调整。这样可以提升资源利用率,打破了固定资源付费模式,真正做到了负载与资源动态匹配的按量付费模式,做到了真正Serverless。公司研发和运维使用这么优秀的产品无疑是幸福的。

但也存在一些问题,比如核心点,无法复用已有VPC和VSwitch,这将PolarDB Serverless 版本独立于业务VPC,会增加安全问题和运维成本,希望阿里云团队解决下。

祝产品大卖。


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3月前
|
关系型数据库 Serverless 分布式数据库
ICDE’24 | 中国企业首获最佳论文,详解PolarDB Serverless如何在0.5秒内实现跨机迁移
数据库领域顶会 ICDE 2024于5月13-17日在荷兰乌特勒支(Utrecht, Netherlands)举办。ICDE (The International Conference on Data Engineering) 与VLDB、SIGMOD被公认为是国际数据管理领域三大顶级学术会议,此次在荷兰召开的ICDE 2024大会,共吸引北京大学、清华大学、浙江大学、MIT、斯坦福等机构,以及谷歌、微软、阿里云、华为、字节等公司的近1000名人员参会,共同探讨AI、数据库、数据处理领域的前沿技术问题。
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
44 1
|
3月前
|
关系型数据库 Serverless 分布式数据库
揭秘PolarDB Serverless:大促洪峰秒级应对,无感伸缩见证科技魔法!一探云数据库管理的颠覆性革新,强一致性的守护神来了!
【8月更文挑战第13天】在云计算背景下,阿里巴巴的云原生数据库PolarDB Serverless针对弹性伸缩与高性能一致性提供了出色解决方案。本文通过一个电商平台大促活动的真实案例全面测评PolarDB Serverless的表现。面对激增流量,PolarDB Serverless能秒级自动扩展资源,如通过调用`pd_add_reader`快速增加读节点分摊压力;其无感伸缩确保服务平滑运行,不因扩展中断;强一致性模型则保障了数据准确性,即便在高并发写操作下也确保库存等数据的同步一致性。PolarDB Serverless简化了数据库管理,提升了系统效能,是追求高效云数据库管理企业的理想选择。
100 7
|
3月前
|
安全 关系型数据库 MySQL
揭秘:如何在无影的Serverless世界中,悄无声息地操控MySQL数据库!
【8月更文挑战第8天】在云计算领域,Serverless 枟能凭借其高效与弹性特性脱颖而出。本文采用问答形式解析函数计算环境中 MySQL 数据库的安全高效访问方法。介绍了如何利用数据库插件或 SDK 连接 MySQL,并提供了一个使用 Python 和 `pymysql` 在阿里云函数计算中连接 MySQL 的示例代码片段。同时强调了通过环境变量或密钥管理服务安全处理数据库凭证的重要性。随着 Serverless 技术的发展,数据库操作将更加简便。
77 7
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之使用polardb for mysql数据库的外网地址在程序中连接经常超时,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
运维 关系型数据库 MySQL
PolarDB产品使用问题之PolarDB MySQL版和PolarDB-X的区别是什么
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
人工智能 关系型数据库 MySQL
探索和体验云原生数据库PolarDB MySQL版在AI场景中的应用
探索和体验云原生数据库PolarDB MySQL版在AI场景中的应用
180 0
|
11天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
13天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
19天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
91 1
下一篇
无影云桌面