雲計算之路系列博文分享的是我們將網站從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取雲服務器。先夠用,不夠再改進;而且夠不夠用,用了才知道。