Ruby語言的雲端運算平台:Heroku
你的網站是否曾經遇過下列狀況?
- 面對突如其來的流量,主機一時承受不了便導致服務中斷、當機,錯失許多寶貴的商機。
- 為了應付各種可能的狀況,公司幫你的部門準備了很好的機器,但平常使用率極低
- 已經預料到下個月要進行的行銷活動將會帶來大量訪客,但卻無計可施,到底是要從程式優化做起還是調整架構、採購設備做起?
涉及採購的話又要看有沒有預算,即使有預算,為了一次活動添購機器,結束後機器使用率是非常低的,不如把這些錢當成IT人員的績效獎金。
如果你曾經遇過上述情況,或許你需要的就是這個年代最熱門的名詞:雲端運算。雲端運算沒有唯一解,也未必是最佳解(尤其在某些廠商打著雲端運算的旗號但實際上根本沒做到雲端)。今天筆者要分享的是眾多雲端運算架構的其中一個選擇:Heroku(根據官方網站的解釋,Heroku發音是Her-O-Koo)。
筆者曾在過去的幾篇文章提過Heroku這個有趣的平台:
Heroku:提供給Ruby/Rack相容的雲端技術平台,可輕易做到延展性架構,目前是許多Ruby on Rails開發人員喜愛的平台
網路創業實例:意外起飛、24小時累積10,000名用戶的Rapportive
Rapportive的服務是放在知名廠商Heroku上,對於突然湧進的流量只需要增加Dynos的數量(Heroku提供服務的基本單位),基本上你是不需要修改你的程式的;當然,程式的優化、調整可以在同樣能耐的硬體等級上容納更多人。
使用Heroku、不需要調整程式、只需要增加Dyno數量?真的有這麼美好嗎?事實上Rapportive就是這麼辦到的,在來自全世界的流量突然湧進時,Rahul Vohra手邊沒有電腦,於是他隨即拿起iPhone並且利用Nezumi這個設計來管理Heroku的應用程式,將Rapportive的Dynos增加到20個,就這麼簡單,可能不到一分鐘吧?!系統的能耐馬上就提昇了。
Cardinal Blue的Facebook應用程式開發經驗分享:使用Ruby on Rails與Heroku
使用Ruby on Rails並搭配知名的Ruby雲端運算平台:Heroku,特色是應用程式隨著流量的成長,無需擔憂系統管理(System Administration)或是硬體水平擴展的問題,Heroku提供了優越的Scalability能耐,透過簡單的應用程式指令或是Web介面便可依照需求調整所需的硬體資源。(類似Amazon EC2 Instance的計費方式,每小時有一定額度的費用)
以上三段介紹點出了Heroku的兩個重點:
- Heroku是提供給Ruby語言的平台,簡單來說如果你使用Ruby撰寫了Rack-based的應用程式,就可以部署到Heroku上(包括知名的Ruby on Rails,或是Sinatra、Merb、Ramaze與Camping)
- Heroku提供了易於設定的雲端架構,即使應用程式的流量、效能需求突然成長,也可直接透過簡單的介面來強化服務的能耐
Heroku目前不僅是全球知名的雲端服務提供商,也經常是被人們拿出來談論的YCombinator成功案例(Heroku是YCombinator的創投、育成團隊)。
Heroku服務起源
Heroku最早在2007年產品上線並且開始提供服務,當時提供的服務定位與現在非常不同,筆者曾在2007年底撰寫過一篇Heroku:線上撰寫Rails程式初體驗,你可以發現當時Heroku的產品訴求為提供一個可以讓程式設計師直接在網頁介面中撰寫Rails程式的平台(雲端Coding),然而當時使用的印象並不十分良好,綁手綁腳的開發環境,實際上一個複雜的Web application大概很難在那樣的環境達成;如果不用Heroku提供的開發環境,只是單純使用Hosting的話,實際上也不是挺好用。也因此,在這個階段,Heroku對於許多使用Ruby/Rails的應用程式開發者來說,就是一個免費的主機環境。
從上圖(這是2008年到2009年,在Heroku上的應用程式數量)我們可以發現Heroku的應用程式數量有著穩定的成長,在2009年的一月份,Heroku部落格上發表了一篇重要的公告,上面提到Heroku平台上已經有超過20,000個應用程式,從企業用軟體到Web 2.0網站、iPhone應用程式的後台等各種用途的應用程式都有,各式各樣的應用程式都在Heroku平台上持續穩定的提供服務,這同時也是給Heroku經營團隊最好的測試環境。
在這段期間,Heroku團隊發現人們要的其實是一個穩定的商用平台(免費、付費似乎沒那麼重要),同時間Heroku也發現他們還要持續開發更多大家想要的功能,當然也必須移除一些根本用不到的功能。Ruby on Rails的線上開發環境顯然就是被移除的功能,當時Heroku將原有的線上開發環境移到HerokuGarden(目前已經不存在),也就是說,當初Heroku認為最重要的功能之一在歷經了一年多的努力後,市場證明了這其實是不需要的。
筆者在關於創業,你必須知道的13件事曾經提到:
「產品上線後才是另一個開始」、「產品上線後才是真正的開始」,事實上,在我們尚未真正推出產品前,我們做的事情很簡單:關在會議室中假設人們應該會喜歡什麼功能、不喜歡什麼功能。如果能盡早推出產品、持續調整路線,可以讓我們少走些冤枉路,即使是推出產品來證明自己想法錯誤,也是一種收穫、一種讓想法進化的方式。
顯然,Heroku在產品上線後,發現提供一個免費的Ruby on Rails線上開發環境並不重要,大家感興趣的是雲端的平台、方便的部署以及可以讓大家付錢買到更多資源的服務,對Heroku團隊來說,這肯定是在正式上線前都沒有機會的。記住:產品上線後才是真正的開始。
Heroku平台現況
Heroku本身是架構在Amazon所提供的雲端架構上,對於不想將心思或人力投入在系統管理、架構上,但又希望可以使用Amazon EC2雲端服務的團隊來說,Heroku是個很好的選擇,你可以將心思專注投入在應用程式開發上,而不用擔心如何去處理Amazon雲端架構的設定與管理。
目前Heroku上共有超過85,000個應用程式,許多知名的服務都在上面運作,包括:
- BestBuy
- CardinalBlue(台灣之光,您可以在這邊看到他們的辦公室照片)
- ELC Technologies
只要你是開發Ruby on Rails或是其他Rack-based的應用程式,你就可以將服務部署到Heroku上,簡單易用的後台可以讓你輕鬆的調整服務目前分配到的資源,畫面如下:
只要滑鼠輕鬆點個幾下、拖曳畫面右方的Dynos設定(這是Heroku提供運算資源的基本單位),就可以完成資源的調整;畫面上也會即時算出目前所分配到的資源預估的每月花費。然而,以Dynos、Workers來說,都是以「每小時計價」的,也就是說當服務的流量已經撐過高峰並開始下滑,可以視預算或實際資源的需求,隨時調整Dynos、Workers的設定來控制每月的成本。
持續進步的Heroku
Heroku在早期提供的服務還不多,例如想要發送郵件、進行排程作業、連接自有的資料庫(Heroku預設是本身提供的PostgreSQL),不過顯然隨著募資、營收增加,Heroku已經有越來越棒的服務,舉例來說,在Heroku Add-ons可以看到以下服務:
- websolr:這是基於Apache Solr打造的企業級搜尋引擎,如今在Heroku上你可以輕易地整合websolr的服務在你的Rails應用程式,提供全文檢索的功能給使用者
- New Relic:New Relic是一家專門提供應用程式監控的廠商,可以即時掌控應用程式的效能、執行狀況、錯誤、資料庫分析等等,目前Heroku上也直接提供New Relic的整合服務
- Amazon RDS:使用Amazon RDS作為應用程式資料庫
- Cron:在Heroku上進行排程作業
- Deploy Hooks:每次部署新版應用程式後都可以透過Email hook, basecamp hook, IRC hook, Campfire hook, HTTP Post hook來發送訊息給團隊成員,告知有新版程式部署完成
- Hoptoad:Hoptoad是專門提供給Rails程式的應用程式例外監控工具,可以在程式發生例外的時候第一時間通知維護團隊,並且有專屬的網頁介面來追蹤例外發生時的所有環境變數、相似的錯誤以及目前處理的狀況。目前在Heroku上也可以輕易地整合這個服務。
- Mamcache:如果有些特定的資料需要放在記憶體裡面來達到最佳的存取效能,memcache是你最好的選擇之一,目前Heroku上也開始提供Heroku的容量租用。
- Moonshado SMS:國外的簡訊服務提供商,Heroku可直接整合
- Sendgrid:國外的電子郵件提供商,如今在Heroku上可輕易地整合
- Custom Domains:自定域名(通常預設是 you-app-name.heroku.com)以及子網域wildcard(例如 *.your-domain-name.com)
持續進步的Heroku,在最近還推出了各種NoSQL的服務,包括:
- CouchDB
- MongoDB
- Redis
另外也有像Nezumi這樣的應用程式,可以協助你在僅有手持裝置(iPhone)
的時候,快速改變服務資源配置的iPhone應用程式:
誰適合採用Heroku?
- 已經使用或是正在評估採用Ruby on Rails作為主要開發框架的團隊
- 想要採用雲端技術,卻沒有相關經驗或資源,也沒有專職系統管理人員的團隊
- 單純想要一個免費的主機空間的團隊(不過免費的用起來個人認為經驗不是挺好)
你可以試算看看,自己要提供的服務規模、長期的主機成本與維護成本,以及在流量成長過程中將心力投入在調整機器架構、效能的成本,有些人或許會覺得Heroku乍看之下很貴,但筆者認為如果在人力有限的情況下,應該讓人力投入在真正重要的事情上,Heroku或許是個不錯的選擇。



Pingback: {|ihower.tw| blog } | Heroku: Ruby 社群的雲端平台
Pingback: Salesforce收購雲端服務提供商Heroku:宣告Java與Ruby才是「雲端2.0語言」 - Inside
Pingback: 想要創業?可以從學寫程式開始,以及10個給網站開發初學者練功的點子 - Inside
Pingback: Heroku 雲端運算平台
Pingback: 「iCook 爱料理」如何善用云端服务,加速网站产品开发 - Tech2IPO
Pingback: 「iCook 爱料理」如何善用云端服务,加速网站产品开发 | Stay
Pingback: 在线学习的风潮,让我们一起在线上学习硅谷的创业及技术 - Tech2IPO
Pingback: 在线学习的风潮,让我们一起在线上学习硅谷的创业及技术 | 新大脑