AWS RDS 痛点 - 1

AWS RDS 痛点 - 1

AWS的服务,尤其是EC2,非常非常适合个人项目和startup,性价比很高。

  • 单个个人项目可能用AWS给的free tier资源(比如每月750小时的t2.micro box)就够了。
  • 开发阶段,可以只在开发时间打开机器,用完shut down就不收费了。提一句aliyun,必须得terminate了才停止计费。

加上AWS不断地在推出为用户省钱的pricing model,startup在业务量不大的时候需要付出的$$是不多的。至于发展壮大之后,是因为自己建服务器甚至数据中心还是继续用AWS,就见仁见智了。

我的个人项目如果需要用到数据库的话,一般都是直接在EC2上安装,然后直接用。因为AWS free tier给免费1年t2.micro RDS,不用白不用,所以我就在一个项目中试了试,发现了几个痛点,这里先说第一个内存的问题。

首先RDS对于个人用户或者小startup来说很贵。t2.micro是免费1年,后面每月也才0.034 * 24 * 30 = $24.48没错,但是1G Memory实在是做不了什么。

  • 最多只允许66个connection
  • buffer pool占597M,也就是说一开始完全可用的不超过500M
mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 66    |
+-----------------+-------+
1 row in set (0.10 sec)

mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 625999872 |
+-------------------------+-----------+
1 row in set (0.10 sec)

上周我打开2-5个进程把一些数据写入到RDS里面,不到1小时,freeable memory马上掉到50M以下,理论上来讲当新的操作需要用到内存的时候RDS会自动把老的低优先级的数据从内存中清除而不影响效率,但实际上读和写都变得奇慢无比。实在无奈的时候只能靠重启来重置内存。

freeable memory graph

同期connection并不多,而且绝大多数的读都是by primary key,写都是一行一行地,峰值每秒才7个writes。

connection graph

reads operation graph

writes operation graph

查了一些资料,没找到明确的说法,一个普遍的评价是RDS MySQL对memory非常地micro-manage。现在AWS在推自己的MySQL替代产品,RDS for Aurora,最小的型号也有15G memory,购买全年合同价每月$138,按使用时间付费的话每个月大概要$200多,对startup还好,但对于个人项目来说肯定太贵了。

(本文系原创,欢迎转载,请注明出处)



Jie

Written by


全职码农,兼职吃货

Updated