決戰云平臺之巔:Heroku VS AWS
最近在選擇部署方面有一個討論,大部分辯論集中在Heroku的相對優勢上。我們有一些使用Heroku和亞馬遜網絡服務(AWS)的體驗,讓我們深入一些對它們進行比較。
價格
對許多客戶來說,價格是比較的唯一標準,所以最好從這里開始。從價格方面比較來說,麻煩的是沒有兩項服務是完全一樣的,所以很難做一個同類的對比。接下來讓我們看看我們Heroku和AWS那分別可以得到什么。
Heroku
•免費的dyno
這是一個相當不錯的產品。Dyno可以大量運行多種應用:Brochure網站、簡單的API和博客等,這些只是這個免費dyno許多可用應用的少數。但是,為了讓這個對比公平,我們需要知道這個免費dyno包含什么,以及由哪些字符串連接。
•RAM:512MB
•交換空間:最大1GB
•存儲空間:最大100MB
•計算能力:未知,但感覺就像一個衛星和小型EC2實例之間的東西。
缺點
•額外dyno/workers每月35美元
•沒有其他服務可以運行了dyno上,dyno是嚴格的應用程序。數據庫、后臺工作人員和其他服務的通常通過Heroku花費額外的插件或第三方服務。
•沒有辦法增加RAM、存儲或CPU性能。額外的存儲空間,必須通過如Amazon S3等服務單獨托管。APP性能只能通過增加運行dyno的數量來改善。
•沒有辦法安裝系統軟件。Heroku提供如Imagemagick的一些常用的包,但是如果你另外還需要些什么,你將不得不對其進行破解。
亞馬遜網絡服務(AWS)
亞馬遜彈性計算云(Amazon EC2),Heroku的dynos最相似。一個EC2微型實例在RAM和計算能力上相當于一個Heroku的dynos/workers。然而,在我們的經驗中,一個完整的堆棧的Rails應用性能在單個微型EC2實例里和Heroku dyno不太一樣。這可能是因為我們在同一個實例上運行數據庫和工作。我們可以通過刪除不必要的系統進程來縮減實例,但是我們通常會伴隨一個小的EC2實例。

正如你看到的,EC2在提前支付時還是很便宜的
•平均每月27.77美元。
•RAM:1.7GB
•交換空間:可配置(大概是存儲空間的總量減去root分區的量)
•計算能力:一個EC2計算單位
它們很難直接比較,但其中的一些數據大大高于Heroku(1600倍的存儲空間)。
缺點
•你必須自己來部署你的應用程序,無論是通過設置向導、教程還是手動添加。
•你必須自己來管理系統。EC2有機器映像的流行的發行版如Ubuntu易被啟動,而在這之后你就要來保持它的更新和安全。
•縮放水平(即啟動多個應用程序實例)不像Heroku那樣容易,Heroku只需移動滑塊在它們的web界面。如果你想頻繁的上下擴展,你最好熟悉操作流程。這似乎是一個很大的缺點,但在實踐中,我們很少調整運行一個應用程序的實例的數量。
活生生的例子
比如我們有一個應用程序需要10MB的數據庫存儲、一個工作進程和SSL。使用Heroku,將產生以下費用:
•增加數據庫存儲20美元。Heroku的免費共享數據庫僅提供5MB的存儲。它們推出了一個新的選項,但目前還不請清楚它的規格。
•SSL端點為20美元
•35美元的工作進程
總計:每個月需要75美元
使用亞馬遜則需要花費:
•一個隨需應變的小型EC2實例需要57.60美元(或者一年期27.77美元;三年期17.69美元)。
從價格角度看,亞馬遜可以很容易的添加或刪除服務。而使用Heroku,你則要每個月額外支付一筆費用。
其他注意事項
除了成本外,你要考慮是否可以在Heroku運行你的應用程序。如果你需要運行自定義的二進制文件或從源代碼編譯,你就必須弄清楚如何破解Heroku。如果你需要存儲臨時文件,你應該知道Heroku的臨時文件系統不會讓這一任務很容易。你可能會下了很大的功夫,但仍然碰壁。就個人而言,我有破解法寶可以嘗試找到許多Heroku具體問題的解決方法。
另一方面,如果你知道你的應用程序在限制范圍內,則在Heroku上部署將是輕而易舉的。web界面美觀、CLI客戶端大部分情況下運行良好(除了它不能管理多個Heroku賬戶),而且很容易通過附加軟件添加其他服務。但如果你認為你的應用程序的需求增長方式不滿足于簡單的水平擴展,那么你應該考慮AWS。當然,你可以開始使用Heroku隨后遷移到AWS,但是在這種情況下,你需要在兩個環境下配置你的應用程序,并花費時間去進行遷移。
有其他選擇嗎?
根據我的經驗,沒有其他平臺可以與Heroku或AWS競爭。有一些Heroku不錯的替代品如Dotcloud,但它們收到了Heroku的影響,減少與第三方產品的集成并只有少數的社區支持。
Rackspace是AWS最有力的競爭者,但它缺乏豐富的API和支持。我們希望有更多的競爭對手趕上Heroku和AWS,為我們提供更多的選擇。
結束語
Heroku和AWS都是優秀的平臺。它們在關鍵領域都有很大的不同,挑選適合自己的平臺才是正確的。這并沒有明確的贏家,就我個人而言,我喜歡兩個綜合起來用:小型應用Heroku,大型應用亞馬遜。最終獲勝的平臺將是那個最能幫助你實現你的目標,并可以長期負擔的平臺。