Amazon Web Services 之門外漢心得
雲端,雲端,大家都在講雲端,不過我這種第三類組畢業的學生,沒有什麼的理論基礎,也不喜歡講理論(不過聽李教授說人死了之後就會在雲端了),僅就我自己最近試玩幾天 Amazon 的 EC2 心得與大家分享。
以前要蓋網站,除了要找設計師來做設計、工程師來寫程式外,還要有一個網站空間可以放你做好的東西才行。而這個「空間」的來源就有很多種,一個是自己架,不管是公司內部有專線,架在自己公司裡,還是花點錢去內湖那邊的機房租個機櫃,把機器放進去住,就是所謂的「主機代管」,不管是哪一種,都至少有養一台機器跟線路的成本。另一種是「虛擬主機」,就是跟業者租用一小塊硬碟空間,把你的網頁檔案放上去。
用房子來比喻,主機代管就像獨棟的透天厝,而虛擬主機就像在社區裡租一層公寓。各有優缺點,透天厝的優點就是可以自己高興怎麼裝潢就怎麼裝潢,而社區公寓除了樓層空間大小限制外,還有一些先天的限制,例如管委會不願意讓你破壞原有的牆壁(某些元件沒辦法安裝),或是當你在你家辦 party,搞得太 high(CPU 或其它硬體使用率過高)影響到其它住戶,可能還會被管理員(主機商)來關切一下,或是狠一點直接把你趕走;相對的,透天厝的缺點就是成本比較高,而且還得自己小心會不會遭小偷,你可能得自己請一個看門的(MIS 人員)或花錢裝一些保全設備(防火牆),而社區公寓則是同個社區的人一起 share 管理人員或保全的費用,成本相對較低。
其實之前一直就知道 Amazon Web Services(AWS)很強大,但因為自己已經有在內湖養自己的主機所以一直沒去試試看,直到最近在某次讀書會上聽了前輩們的介紹,聽起來相當心動,反正現在有第一年免費的優惠,就註冊了個帳號上去玩。註冊過程其實不會太難,就是步驟有點多,然後都是英文介面,感覺 AWS 真的是另一個世界..沒聽過的資訊名詞多到爆炸 :) 。在你註冊新帳號的時候,會需要你的聯絡電話跟信用卡號做驗證。
那 AWS 的Elastic Compute Cloud(EC2)跟前面提到的透天厝或社區公寓有什麼不同? 簡單的說,它可以同時有上述兩種方案的優點,而且成本還相當便宜。有這麼好康的事? 以下就以功能面跟成本面來說明:
以功能面來看:
EC2 有好幾個等級的機器,可以依照不同的需求及預算來租用,從最便宜的 Micro 等級到 High-Memory Instances 等級(68.4 GB RAM),如果你是要大量運算的,也可以考慮 High-CPU Instances。其實你在 EC2 啟用一個 instance 就等於你就擁有一台VPS了。
VPS?簡單的講,這就跟一般把機器放到機房代管差不多,只是這台機器是「虛擬」的,你摸不到也看不到,但這台虛擬的主機跟一般獨立主機一樣可以 SSH 登入,要裝什麼軟體都可以裝,而且有擁有完整的 root 操作權限。
EC2 的安裝也很方便,你可以用 AWS 提供的 Image 檔(Linux 跟 Windows 平台都有),也可以找一些社群熱心人士貢獻的。安裝時間也是出乎意料的短,只要點幾下滑鼠,系統就整個裝好了!! 我自己是習慣 FreeBSD,所以找了 FreeBSD 8.2 Release 版本的 Image 來裝,不過那個 Image 還滿「乾淨」的,Apache、PHP、Python、Ruby、MySQL 都沒有,連 /usr/ports
也是空的,所以我自己花了點時間,把基本環境建好之後再做成自己的 Image 檔。
做自己的 Image 檔要幹嘛?以前當過網管或是管過電腦教室的人應該都對 Ghost 這個軟體不陌生,通常會在系統最完美(或乾淨)的狀態把它 ghost 起來,然後如果要重灌或是灌其它台電腦的時候,只要一下子的時間就可以把那個乾淨的環境裝到新的電腦裡了,省時省力。而在 AWS 上做自己順手的 Image 也差不多是這個道理,只要在管理後台點幾下,下次要開新的 instance 的時候只要選用自己做的 Image 就可以很快的再開一個新的 instance 起來,而且還是你習慣的作業環境。
想想以前想要學 Linux/FreeBSD 的話,可能得自己想辦法從網路或光碟來安裝,再快也差不多得要半小時才能裝好,現在有現成的 Image,只要滑鼠點幾下,幾分鐘就搞定,如果不想要或是被玩爛了,隨時可以砍掉重練,EC2 真的是練功的好地方..
EC2 有提供「Security Group」的功能,其實就是防火牆啦,你可以只限定某些 IP 或某些 Port 的連線才能存取資源,設定也相當簡單。如果在自己的機房自己弄,這可能還得花點錢買一台實體的防火牆來設定,而且要搞懂那些防火牆的 rule 設定也挺煩人的。
雖然 micro instance 的等級並不高,但放一些簡單的網頁或是基本的服務(例如 DNS 管理),是相當足夠的。像我就是把它拿來管理我手上的一些 domain name,還有放一些簡單的 HTML 頁面。
AWS EC2 的 instance 的 IP 預設是浮動的,如果重新啟動後,它的 IP 可能會變動,你可以跟 EC2 要固定的 IP,並把它掛上到你指定的 instance 上。要注意的是,申請固定 IP 不用另外收費,但如果要了 IP 卻沒有掛到任何一個 instance 上,會被額外收費,免得大家亂要 IP,佔著不拉屎。(IPv4 已經發光了,請大家好好珍惜)
對我來說的另一個重點,是因為我近來喜歡用Ruby on Rails(RoR)來做網路活動的後端,原因請見另一篇門外漢心得。不過國內虛擬主機很少支援 RoR,又加上我喜歡每次都放一些新玩意進來做實驗,虛擬主機限制太多,所以這也是我自己養機器的最主要原因。
以成本面來看:
錢很重要,所以先來看一下價目表。
它的計價單位是”小時”,主要有兩種租用方式,一個是 On-Demand Instances,一個是 Reserved Instances。On-Demand 就是要的時候租,不要的時候就退還,Reserved 則是一次租比較長的一段時間(1 年或 3 年)。
On-Demand 的 micro instance 的一個月算下來才 18 塊美金(第一年免費),等級稍微好一點的 standard instance 是 33 塊/月。
因為我的工作大部份是跟網路活動相關的,而且網路活動的特性就是「時間短、流量會忽大忽小、下線之後就撤掉了」,所以 On-Demand 的計費方式就很適合,案子下線之後直接到後台把它停掉,就不會繼續算錢了。而如果是長期維護的的網站的話,就可以考慮 Reserved 的方式,一次買 1 年或買 3 年,價格更便宜,1 年期的 micro instance 只要 54 塊美金。
這樣的價錢貴嗎? 以我現在養在內湖機房的 12U 機櫃費+頻寬費來算(不含主機跟其它硬體),一年差不多是 2,100 美金,如果換到 EC2 的話可以買到相當不錯的規格。那像智 X 的 VPS 方案呢? 一年約 650 美金(規格),戰國 X 的 VPS 的費用也差不多(規格) 。
比較起來 EC2 的價錢是真的不貴,而且 EC2 現在第一年還免費。那一年後怎麼辦? 真的覺得用得不錯的話,就付費吧。
其實雲端主機最重要的是它的 scalability。
這讓我想到年輕時的一個故事,2005 年 Yahoo!有一個叫做”咖啡聽“的網路活動(已下線,僅剩網頁備份),那是個滿特別的網路行銷案例,目的是為了證明「網路廣告是有效的」,所以虛擬了一個罐裝咖啡的品牌,沒有在一般的電視或平面媒體打廣告,只在 Yahoo!的首頁買了好幾百萬的網路廣告(都是雙星那種很貴的版位)。那案子的程式是我寫的,第一次遇到這麼大流量的案子,結果還是有幾次被衝到掛點。
再假想今天如果你蓋了一個線上購物的網站,一開始可能會想只買一台主機來放,但隨著會員越來越多,當你發現你的主機的硬碟燈閃不停、已經負荷不了,為了提供更好的網站瀏覽品質,也許你會想再加幾台機器來幫忙。即使如此,你可能得找人來想辦法新的主機跟原來的機器”串”起來(這個”串”其實挺複雜,這又是另一個故事了),這過程還是免不了得停機休息一下。但如果今天用的是雲端服務,通常只要刷卡付錢就可以”無痛”的馬上切換或擴充成高檔設備,來應付更多的需求,這點自己弄主機是很不容易辦到的。
突然想起以前我老闆給過我的一句話:「錢能解決的事都是小事」。
這樣講起來好像真的上了雲端就變神仙一樣了,真的這麼好,那生意就全部給它做就好了! 其實 AWS 還是有些我擔心的問題的,最主要的就是因為台灣沒有 AWS 的機房,亞太地區的機房目前只有新加坡跟最近新開的東京,畢竟還是得出國,反應速度就是比台灣本地的會慢了那麼一些些。
有個檢測的工具叫做CloudPing,可以測試不同地區 AWS 的 Latency,我在台北用中華電信的線路測試,新加坡 133ms,日本 75ms。真希望 AWS 也來台灣開個機房啊..機會好像不大就是了。
AWS 也沒這麼弱,也是有一些配套的解決方案,例如可以用AWS Simple Storage Service (Amazon S3)搭配 CloudFront 服用來改善速度,把靜態檔案放在 S3 上,然後 CloudFront 會找到離使用者最近的機房,並從那邊丟檔案出來。例如我常逛的天瓏書局網站就是個很成功的例子。
AWS 的另一個問題,就是使用者的技術能力最好得有一定的網管基礎,不然玩起來會有點辛苦。另外就是因為台灣沒有 AWS 的客服,所以萬一有問題可能得打越洋電話或是英文書信往來,這也是另一個小小的門檻。
這就是我個人最近試玩的一些簡單心得,目前還沒有真正拿客戶或自己的案子在上面實戰過,應該不久的將來就會有了。
以上,才疏學淺,若內容有誤還請多多指教 :)
參考資料:
- 在 Amazon EC2 安裝 Ubuntu 10.10,Kiang 有佛心的把 EC2 的設定過程畫面拍下來
- Ernest 大大的 blog 有一些相關文章可以參考