yygame有自己的CloudMysql服务,可以通过API和命令行工具一键创建Mysql实例组。每个实例组由位于不同物理机的2个实例组成,它们之间是master to master的复制关系。由keepalive管理的VIP对外提供服务,如果一端挂掉,VIP自动切换到另一端,提供了高可用保障。
测试情况:同时在2个实例各写入500万数据(先写100万,后写400万),由于是双向复制关系,因此共产生了1000万数据。Mysql实例是1GB内存的InnoDB引擎,存储介质是SSD。
表结构定义如下:
CREATE TABLE `ttt` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
写入的SQL如下:
insert into ttt (content) values ('$string')
$string是固定长度64字节的串。
完成后两台机的写入耗时情况(各400万数据),第一台为:
$ time perl inst.pl 4000000 real 17m43.803s user 4m49.706s sys 2m3.396s
第二台为:
$ time perl inst.pl 4000000 real 19m18.197s user 4m49.801s sys 2m1.554s
对如上执行,我们取总时间37分钟,总数据量800万,计算出CloudMysql集群每秒写入的TPS为:3600个。
执行过程中观察到的物理机对应的磁盘IOPS如下:
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sdb 0.00 25431.00 0.00 1181.00 0.00 212888.00 180.26 0.81 0.69 0.14 16.40
每秒写入1000次左右,每秒写入数据100MB左右。数据库访问是随机读写。
测试过程中Mysql运行正常,数据复制正常,全部写入成功。
CloudMysql支持分表吗?
测试运行时间,用Time::HiRes模块会更灵活一点
没有做协议级proxy.所以不支持分表 :p
YY的RDS支持.