近幾個月來簡單體驗了Amazon AWS大部分服務,現在分享一下使用感受。
Amazon EC2
從各方面來看,EC2應該算是Amazon的王牌產品。EC2功能全面,它可以在數分鐘內launch一個實例,可以(理論上)自動提升/降低機器性能配置,可以綁定EBS成為具有高可用性特質的計算核心,可以搖身一變成為ELB成為一個load balancer。這些功能非常實用,特別適合針對國外市場且快速增長的小網站,可以在前期完全不受機器約束。
EC2機器的內核在申請時指定,有很多選擇,如果有閑心,還可以做一個自己專用的,我們沒用這個功能,實在太繁瑣了。EC2提供了完全的root權限,可以隨意安裝軟件,由于EC2一般帶有足夠的硬盤空間(Large Instance就自帶850GB磁盤空間),裝個mysql當數據庫機器也完全沒有問題。
EC2最大優勢是靈活,最大劣勢則是性能。EC2的IO性能欠佳,當EC2機器作為mysql數據庫時,系統吞吐量只能到3~10 MB/s,相比而言,在同樣數據同樣程序條件下,使用真實機器則能輕松達到30MB/s。EC2的CPU是多個實例共享的,一般stolen的CPU都在10%左右,對于nginx+php-cgi這樣的組合,EC2高端配置也不太能撐住壓力,總是CPU吃緊。
雖說EC2劣勢明顯,但由于互聯網應用一般都很容易做到水平擴展,它的靈活性可以很大程度緩解這個劣勢,不會有太大問題。不過最終我們還是放棄了EC2,主要因為今年5月Amazon云計算服務出了大量的事故,僅5月頭兩周,在同一個機房就出了5起大事故,我們在3起事故中受影響,每次都很不幸的都是單點EC2出問題,最長的一次在高峰期中斷了6個小時服務,損失巨大。最郁悶的是,到了5月下旬,有一臺跑數據庫的EC2機器莫名奇妙磁盤損壞,還有一臺莫名其妙的無法ssh,讓我們感覺越來越不靠譜,于是決定逃離。云計算的可用性始終值得擔心。
EC2的價格相對傳統IDC要貴不少,按高端機器High-Memory Double Extra Large每小時1.2US$來算,每月就要花864US$,再加上流量費,很容易達到每臺服務器1000US$的水平。
Amazon RDS
RDS是一種數據庫托管服務,通過RDS toolkit可以很方便的創建RDS實例并立即使用。據Amazon幫助文檔說,RDS的數據庫軟件維護、升級、優化的工作全部由Amazon負責,用戶只需要使用功能即可。
可惜,RDS純粹是一個看起來很美的東西。首先是RDS為了同時支持異構的數據庫,犧牲了很多靈活性,例如,因為無法訪問RDS的物理機器或存儲空間,使得跑著mysql的RDS實例連記錄slow log都成了難事,更別說什么err log,出了問題只能一抹瞎。如果要獲取bi/bo這樣的數據需要使用專用的RDS toolkit完成,很難集成到現成的監控工具里去。其次,RDS底層使用的是類似于EBS的網絡存儲,其IO性能差到一個令人發指的地步。一個很感性的數據是:使用RDS Double Extra Large DB Instance跑mysql時慢查詢占1%,同樣數據轉到EC2 High-Memory Double Extra Large實例后慢查詢降為0.01%。最讓人無語的是RDS價格高于同等配置的EC2+EBS價格,每小時都貴超過0.3US$,相當于貴25%,省下來的錢用來雇專業運維人員綽綽有余,而且RDS功能和靈活性還遠弱于后者,不怕折騰但怕花錢的人不建議選擇RDS。
如果執意要使用RDS,那么一定要注意RDS沒有固定IP,每次重啟實例(或過一段時間)都會變,程序連接的時候最好寫域名,當然,這會損失性能。此外,RDS可用性也沒宣傳的那么高,我們5月最先掛的就是RDS實例,一掛就是好幾個小時。
Amazon S3
S3是少有的看上去物美價廉的東西,只需要花幾美元就可以拿到幾十GB空間,對一般的互聯網應用來說綽綽有余。
S3提供豐富的API和工具上傳文件。對firefox用戶來說,有一個專門的S3擴展可用,可直接上傳本地文件。還有一個s3curl.pl工具,可以用命令行傳任意文件,可以方便的做到自動化。
S3存儲的文件可以直接通過域名從外網訪問,不過比較郁悶的是文件尾部不能帶“?“,一切基于文件名后面加隨機串的避免緩存的做法都會失效。
Amazon CloudFront
CloudFront是一種CDN,它的訪問速度據稱不錯,我們并沒有實際使用過。
我們不使用CloudFront主要是因為很難控制文件在CloudFront中失效。根據我們的程序結構,我們需要在靜態文件后面加version信息強制用戶在必要時更新到最新版,現在由于CloudFront既不能手動invalidate某個文件,也不能保證CloudFront上緩存的文件及時更新(可能更新會花24小時),我們需要修改現在的策略才能使用到它。
CloudFront是根據用戶所在網絡來收費的,對于國內,CloudFront使用的是香港價格,貴于美洲和歐洲,不太劃算。對于歐美市場,我也不清楚歐美CDN的價格究竟如何,無法比較。CloudFront在歐美的流量費用與EC2相同,不過由于沒有按小時計的租費,總體價格會比EC2提供靜態文件服務便宜很多。
Amazon CloudWatch
CloudWatch是一個性能數據監視器,對于這個東西我只能說太小兒科了,沒看出來有什么實際的用處。一旦開啟CloudWatch,Amazon就會幫忙收集開啟了這個服務的instance數據,包括CPU和IO信息等??上В瑪祿炔桓撸ù蟾攀菐追昼娨淮谓y計),數字也只是個大概值,能看的數據也很少,無論對入門者還是高手來說,都不能帶來太多價值。
CloudWatch看上去比較好的是可以配合EC2/EBS/Load Balancer toolkit做一些auto scale的事情,自動提升/降低EC2/EBS參數,還可以(理論上)自動launch新實例。這些東西我們都沒嘗試過,有興趣的同學可以試試。
CloudWatch價格不貴,一臺機器就只用0.1US$而已,不過一般還是不建議開,裝一個其他監控軟件更靠譜。
Amazon Premiun Support
Premiun Support包括即時的電話支持和一個專有的提案系統。從服務質量上來說,Amazon的客服總是很熱心,響應速度也很快,專業素質也不錯,很不錯。
Premium Support非常貴,簡直是搶錢。它是按照每月總花費來算價格的,最多增加總花費的16%,最少為無限接近于10%,代價十分明顯。
結語
Amazon AWS提供豐富功能,還有不少toolkit和API,適合小應用使用。對于要求較高性能或較低成本的應用來說則不太適合,折騰一下IDC應該達到更好效果。