云计算之路系列博文分享的是我们将网站从IDC机房迁移至云计算平台(阿里云)的实际经历,目前处于准备阶段,这次分享的是我们选择数据库服务器面临的权衡与取舍。
在阿里云上,数据库服务器有两个选择:云服务器与RDS(关系型数据库服务)。这两者的主要区别是什么呢?
先打个比方,选择云服务器,就如同租毛坯房,你得自己装修、自己置家具、自己打扫。。。;而选择RDS,就如同住五星级酒店。
云服务器简单来说是运行在集群上的虚拟机。阿里云的虚拟化技术用的是Xen。云服务器用的是SATA硬盘(现在主流服务器一般用SAS硬盘),由SATA硬盘构成网络存储集群,每次写入数据时会同时保存3份(用性能换取更高的可靠性)。阿里云客服提供的磁盘性能数据:写速度一般在15MB/s,读速度一般在70MB/s,IOPS在500~700左右。所以,硬盘写入速度是云服务器的硬伤,也是云服务器成本低的主要原因所在。
RDS(关系型数据库服务)简单来说是跑在物理服务器上的数据库实例。比如针对SQL Server的RDS,阿里云会在服务器上安装好SQL Server,然后把其中的一个SQL Server数据库实例出租给你,并限定该实例所能使用的硬件资源。跑RDS的物理服务器都是强劲的服务器,硬盘性能会比云服务器高很多,并且由阿里云的DBA负责维护。所以,硬盘读写速度快、维护成本低是RDS的优势,带来的问题是成本高、限制多。
开始我们不知道有RDS,所以不存在选择问题。后来,我们把“找找看”的索引放在云服务器上建的时候发现了云服务器硬盘写入速度慢的问题,然后从阿里云客服那里得知RDS,被RDS卓越的硬件性能所吸引,于是倾向于用RDS,对它进行了评估。
如果选择与我们现有数据库服务器差不多的硬件配置(8G内存、400G硬盘空间),成本是3870元/月,硬盘读写性能肯定会比我们的现有数据库服务器要高,但是有以下一些限制:
1、无法远程控制数据库服务器,只能通过SQL Server管理工具连接数据库实例。
2、一个数据库库实例支持的数据库数量有限制(好像是7个)。
3、SQL Server版本只能用SQL Server 2008。
4、数据库最大连接数有限制,我们的这个配置的最大连接数限制是800。
这些限制可以克服,总体上评估下来RDS是有吸引力的选择,于是我们准备用RDS。接下来必然要考虑如何将数据迁移至RDS上?
阿里云网站上只提供一种迁移方案——导出目标数据库的生成脚本(详见SQLServer迁移方案 › 导出步骤),而且在适用场景中说明只适用于“数据文件总大小在10G以内”,却没有提供大于10G的数据文件的迁移方案,而我们其中一个数据库的数据文件就有70G大小。我们很纳闷,既然使用RDS,多数是因为数据量大、性能要求高,迁移方案应该首先考虑大数据文件的情况,现在怎么抓小放大,很不理解。于是,咨询阿里云客服,对于这么大的数据文件如何进行迁移?客服竟然还是让我们采用适用于10G以下数据文件的导出脚本的方式。导出70G的数据库的脚本,这事还真没干过;然后再把大于70G的脚本文件导入到远程的数据库,这事更没干过。当时有点气愤,第一次给了阿里云客服一个差评。
气愤事件发生之后,并没有让我们陷入困境,反而让我们冷静思考——一定要用RDS吗?购买RDS的费用如果买云服务器可以买到很高的配置,可以用内存弥补硬盘速度的问题。于是计算了一下,买8G内存的RDS需要3870元/月,而买一台顶级配置的云服务器(8核CPU,32G内存)只需2779元/月,少了1000元/月,多出了24G内存,整体性能上相差多大很难说。而且有Memcached与NoSQL两个级别的缓存帮助减轻数据库的压力。
于是,我们改变了方案,先用云服务器跑数据库,即使到时云服务器的性能跟不上,也可以再去选择RDS。而且可以把数据库分在多台云服务器上跑。
这就是我们的选择——舍RDS取云服务器。先够用,不够再改进;而且够不够用,用了才知道。