Home » Featured, Headline, 雲端運算

Ruby語言的雲端運算平台:Heroku

Lawrence Lin 20 September 2010 9:00 am

image

你的網站是否曾經遇過下列狀況?

  1. 面對突如其來的流量,主機一時承受不了便導致服務中斷、當機,錯失許多寶貴的商機。
  2. 為了應付各種可能的狀況,公司幫你的部門準備了很好的機器,但平常使用率極低
  3. 已經預料到下個月要進行的行銷活動將會帶來大量訪客,但卻無計可施,到底是要從程式優化做起還是調整架構、採購設備做起?
    涉及採購的話又要看有沒有預算,即使有預算,為了一次活動添購機器,結束後機器使用率是非常低的,不如把這些錢當成IT人員的績效獎金。

如果你曾經遇過上述情況,或許你需要的就是這個年代最熱門的名詞:雲端運算。雲端運算沒有唯一解,也未必是最佳解(尤其在某些廠商打著雲端運算的旗號但實際上根本沒做到雲端)。今天筆者要分享的是眾多雲端運算架構的其中一個選擇:Heroku(根據官方網站的解釋,Heroku發音是Her-O-Koo)。

筆者曾在過去的幾篇文章提過Heroku這個有趣的平台:

育成創投先鋒:Y Combinator

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,或是SinatraMerbRamazeCamping
  • Heroku提供了易於設定的雲端架構,即使應用程式的流量、效能需求突然成長,也可直接透過簡單的介面來強化服務的能耐

Heroku目前不僅是全球知名的雲端服務提供商,也經常是被人們拿出來談論的YCombinator成功案例(Heroku是YCombinator的創投、育成團隊)。

Heroku服務起源

Heroku最早在2007年產品上線並且開始提供服務,當時提供的服務定位與現在非常不同,筆者曾在2007年底撰寫過一篇Heroku:線上撰寫Rails程式初體驗,你可以發現當時Heroku的產品訴求為提供一個可以讓程式設計師直接在網頁介面中撰寫Rails程式的平台(雲端Coding),然而當時使用的印象並不十分良好,綁手綁腳的開發環境,實際上一個複雜的Web application大概很難在那樣的環境達成;如果不用Heroku提供的開發環境,只是單純使用Hosting的話,實際上也不是挺好用。也因此,在這個階段,Heroku對於許多使用Ruby/Rails的應用程式開發者來說,就是一個免費的主機環境。

image

從上圖(這是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個應用程式,許多知名的服務都在上面運作,包括:

只要你是開發Ruby on Rails或是其他Rack-based的應用程式,你就可以將服務部署到Heroku上,簡單易用的後台可以讓你輕鬆的調整服務目前分配到的資源,畫面如下:

image

只要滑鼠輕鬆點個幾下、拖曳畫面右方的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應用程式:

image

誰適合採用Heroku?

  • 已經使用或是正在評估採用Ruby on Rails作為主要開發框架的團隊
  • 想要採用雲端技術,卻沒有相關經驗或資源,也沒有專職系統管理人員的團隊
  • 單純想要一個免費的主機空間的團隊(不過免費的用起來個人認為經驗不是挺好)

你可以試算看看,自己要提供的服務規模、長期的主機成本與維護成本,以及在流量成長過程中將心力投入在調整機器架構、效能的成本,有些人或許會覺得Heroku乍看之下很貴,但筆者認為如果在人力有限的情況下,應該讓人力投入在真正重要的事情上,Heroku或許是個不錯的選擇。

Lawrence Lin

致力於將資訊管理及服務營運的能力與經驗,投入在與人們生活緊密相關的領域。目前於 Polydice 擔任 iCook 愛料理食譜社群網站的大廚。聯絡信箱: Lawrence [at] Polydice.com

More Posts - Website