提示:授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道
最近一直在探索亚马逊科技上的产品,现在PASS
平台越来越多,但是真正能经得起考验的却不是很多,AWS
作为比较有实力的厂商还是值得学习的,主要是最近也看到aws新注册考研免费试用12个月的ec2
和3个月的Lightsail
,所以准备到上面看看产品到底如何。
Lightsail
是一个虚拟专用服务器 (VPS) 实例,他提供一些数据库实例、应用等,有很多预装好的环境,也提供现在很火的容器服务,不过今天我们的主要内容就是来测试一下 Lightsail
的数据库实例如何,我们会使用常见的sysbench
基准测试对数据库的吞吐率进行测评。
提示:以下是本篇文章正文内容,下面案例可供参考
这是一个专门为开发者准备的轻量型应用服务器。我们可以Lightsail实例选择一个镜像来快速启动、开发项目,这样就不必花费大量的时间来安装软件或框架
登录AWS账号后,会到一个控制面板,面板中有个最近访问,会推荐 Lightsail,如果大家没有看到,可以从搜索框搜索进入 Lightsail 的控制台
这里官方是推荐使用 8.0,然后我们默认就好了,套餐的话因为前3个月是免费的,所以也是默认,对于有数据库高可用需求的可以不用选择 Standard,可以切换成 High Available
然后划到最下面点击创建,这样就是创建成功了
Sysbench
是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。
我们需要有一台测试服务器,大家可以购买EC2或者使用自有的,我使用的是自有的,是centos系统,安装操作如下:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
yum -y install sysbench
# 检查是否安装成功
sysbench --version
我们通过数据库客户端Navicat工具在数据库中创建 aws_test
库用于测试,使用Sysbench
快速生成测试数据。测试数据规模:10
张表,每张表10000
条数据。
sysbench --db-driver=mysql --threads=10 --report-interval=1 --mysql-host=ls-ca37e2b64fd2b1abd5bd9fced0c2e5a12e1bc754.c8ugxo23bwey.ap-northeast-2.rds.amazonaws.com --mysql-port=3306 --mysql-user=dbmasteruser --mysql-password='038%svpK_p
命令解释:
sysbench
//基于mysql的驱动去连接mysql数据库
--db-driver=mysql
//10个线程模拟并发访问
--threads=10
//每隔1秒输出一下压测情况
--report-interval=1
//aws host
--mysql-host=
//端口号:3306
--mysql-port=3306
//测试用户
--mysql-user=root
//测试密码
--mysql-password=*******
//测试数据库
--mysql-db=aws_test
//模拟新建10个表
--tables=10
//1万条数据 执行oltp数据库的读写测试
--table_size=10000 oltp_read_write
//参照这个命令的设置去构造出来我们需要的数据库里的数据
//自动创建10个测试表,每个表里创建1万条测试数据
--db-ps-mode=disable prepare
这里 --time=300 是测试300秒,也就是测5分钟,然后我们看看性能如何
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=ls-ca37e2b64fd2b1abd5bd9fced0c2e5a12e1bc754.c8ugxo23bwey.ap-northeast-2.rds.amazonaws.com --mysql-port=3306 --mysql-user=dbmasteruser --mysql-password='038%svpK_p
数据报告如下:
[ 295s ] thds: 10 tps: 4.00 qps: 97.00 (r/w/o: 72.00/17.00/8.00) lat (ms,95%): 2045.74 err/s: 0.00 reconn/s: 0.00
[ 296s ] thds: 10 tps: 5.00 qps: 95.00 (r/w/o: 63.00/22.00/10.00) lat (ms,95%): 2449.36 err/s: 0.00 reconn/s: 0.00
[ 297s ] thds: 10 tps: 5.00 qps: 99.01 (r/w/o: 68.00/21.00/10.00) lat (ms,95%): 2449.36 err/s: 0.00 reconn/s: 0.00
[ 298s ] thds: 10 tps: 4.00 qps: 98.92 (r/w/o: 73.94/16.99/7.99) lat (ms,95%): 2449.36 err/s: 0.00 reconn/s: 0.00
[ 299s ] thds: 10 tps: 7.01 qps: 97.08 (r/w/o: 58.05/26.02/13.01) lat (ms,95%): 2449.36 err/s: 0.00 reconn/s: 0.00
[ 300s ] thds: 10 tps: 2.00 qps: 97.00 (r/w/o: 83.00/9.00/5.00) lat (ms,95%): 1869.60 err/s: 0.00 reconn/s: 0.00
[ 301s ] thds: 4 tps: 9.00 qps: 60.00 (r/w/o: 20.00/31.00/9.00) lat (ms,95%): 2449.36 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 20426 #300s执行了 20426 的读请求
write: 5836 # 300s执行了 5836 写请求
other: 2918 #300s执行了共2918 其他请求
total: 29180 #300s执行了共29180 请求
transactions: 1459 (4.85 per sec.) #300s执行了1459 的事务数 每秒4.8个事务
queries: 29180 (96.92 per sec.) # 300s执行了 29180 的查询,每秒 96.9 个查询
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 301.0694s # 总耗时
total number of events: 1459 # 中发生事务数
Latency (ms):
min: 1843.81 #最小延迟 1843.81 ms
avg: 2060.15 #平均延迟 2060.15ms
max: 2733.66 # 最大延迟 2733.66ms
95th percentile: 2449.36 #95%的请求延迟 2449.36ms
sum: 3005761.79
Threads fairness:
events (avg/stddev): 145.9000/16.08
execution time (avg/stddev): 300.5762/0.34
我们观察一下测试期间数据库实例的状态:
实例配置为 1GB 2CPU
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=ls-ca37e2b64fd2b1abd5bd9fced0c2e5a12e1bc754.c8ugxo23bwey.ap-northeast-2.rds.amazonaws.com --mysql-port=3306 --mysql-user=dbmasteruser --mysql-password='038%svpK_p
数据如下:
[ 296s ] thds: 10 tps: 7.00 qps: 93.00 (r/w/o: 79.00/0.00/14.00) lat (ms,95%): 1973.38 err/s: 0.00 reconn/s: 0.00
[ 297s ] thds: 10 tps: 4.00 qps: 93.01 (r/w/o: 85.00/0.00/8.00) lat (ms,95%): 1903.57 err/s: 0.00 reconn/s: 0.00
[ 298s ] thds: 10 tps: 8.00 qps: 91.00 (r/w/o: 77.00/0.00/14.00) lat (ms,95%): 1973.38 err/s: 0.00 reconn/s: 0.00
[ 299s ] thds: 10 tps: 5.00 qps: 94.00 (r/w/o: 83.00/0.00/11.00) lat (ms,95%): 1938.16 err/s: 0.00 reconn/s: 0.00
[ 300s ] thds: 10 tps: 7.00 qps: 93.99 (r/w/o: 79.99/0.00/14.00) lat (ms,95%): 1973.38 err/s: 0.00 reconn/s: 0.00
[ 301s ] thds: 10 tps: 4.00 qps: 77.01 (r/w/o: 72.01/0.00/5.00) lat (ms,95%): 1938.16 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 24430
write: 0
other: 3490
total: 27920
transactions: 1745 (5.78 per sec.)
queries: 27920 (92.49 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 301.8760s
total number of events: 1745
Latency (ms):
min: 1469.69
avg: 1726.06
max: 2326.61
95th percentile: 1973.38
sum: 3011979.45
Threads fairness:
events (avg/stddev): 174.5000/20.31
execution time (avg/stddev): 301.1979/0.56
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=ls-ca37e2b64fd2b1abd5bd9fced0c2e5a12e1bc754.c8ugxo23bwey.ap-northeast-2.rds.amazonaws.com --mysql-port=3306 --mysql-user=dbmasteruser --mysql-password='038%svpK_p
到这整个测试流程就结束了,大家可以根据自己的需求对比测试结果进行选择
这次测试我认为不是aws数据库的上限,因为测试主机在国内,然后实例地址应该是在首尔,所以中间很大的延时都是在网络上,本次测试就当是测试国内+国外数据库的性能了。