PolarDB MySQL 版 Serverless-测评

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
数据管理 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,会增加安全问题和运维成本,希望阿里云团队解决下。

祝产品大卖。


相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
22天前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
1月前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
1月前
|
存储 关系型数据库 Serverless
PolarDB常见问题之serverless试用时无法选择已有的 vpc如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
1月前
|
关系型数据库 MySQL Serverless
RDS MySQL Serverless
阿里云新推出RDS MySQL Serverless,提供实时弹性资源,按需设置范围,自动适应负载变化,实现资源优化与成本降低。用户可通过控制台或API轻松创建实例,无缝应对低负载至高负载场景,实现自动弹性扩缩容。该服务适合各种云数据库应用场景,兼具成本优化和高灵活性。【2月更文挑战第29天】
32 1
|
1月前
|
关系型数据库 Serverless 分布式数据库
PolarDB的Serverless能力与同类型产品的对比
【2月更文挑战第21天】PolarDB的Serverless能力与同类型产品的对比
20 2
|
1月前
|
关系型数据库 MySQL 测试技术
数据库专家带你体验PolarDB MySQL版 Serverless的极致弹性特性!
本次基于阿里云瑶池数据库解决方案体验馆,带你体验PolarDB MySQL Serverless形态下的性能压测环境,基于可选择的标准压测工具进行压测,构造弹性场景进行压测,实时动态展示弹性能力、价格和性价比结果,压测环境可开放定制修改、可重复验证。参与活动即有机会获得鼠标、小米打印机、卫衣等精美礼品。
数据库专家带你体验PolarDB MySQL版 Serverless的极致弹性特性!
|
2月前
|
人工智能 数据管理 Serverless
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
404 2
|
2月前
|
人工智能 运维 Cloud Native
、你如何看待阿里云数据库走向Serverless与AI驱动的一站式数据平台?
、你如何看待阿里云数据库走向Serverless与AI驱动的一站式数据平台?
149 2
|
2月前
|
人工智能 数据管理 大数据
阿里云数据库走向Serverless与AI驱动的一站式数据平台是一个很有前景和意义的发展方向
阿里云数据库走向Serverless与AI驱动的一站式数据平台是一个很有前景和意义的发展方向
33 2
|
7天前
|
监控 Serverless API
阿里云函数计算的工作原理与事件驱动模型密切相关
【4月更文挑战第17天】阿里云函数计算的工作原理与事件驱动模型密切相关
60 4