論壇文章
【技術e專欄】漫談雲端運算 對企業應用系統開發的影響

筆者這學期在學校開了一門新課:「雲端應用程式設計」,內容包含虛擬化(virtualization)、分散式系統的延展性 (scalability)與資料儲存一致性議題(the CAP conjecture, NoSQL)、雲端服務的主要類型(IaaS, PaaS, SaaS)以及MapReduce 平行運算。在程式設計實務方面,學生使用了四種不同的平台:Heroku、AWS EC2、Google App Engine (GAE) 以及 Hadoop (MapReduce)。過程中有一些發現與心得,可以跟企業應用系統的發展趨勢連結上,遂借此園地與大家分享。

企業朝向私有 PaaS 方向發展

雲端運算透過網路提供服務,一般將服務依內容分為三大類:基礎設施視為服務(infrastructure as a service,IaaS)、平台視為服務(platform as a service,PaaS)、軟體視為服務(software as a service,SaaS)。因為這門課的主題是關於雲端程式設計,所以我們聚焦於PaaS 和IaaS。在PaaS 方面,主要以Heroku 為主,GAE 為輔;至於IaaS,則完全以Amazon Web Services (AWS) 為主。這些服務都是所謂的公共雲(public cloud)服務,而非專屬於某個組織的私有雲(private cloud)服務。從這些服務的教學與使用心得中,我們連結到一個正在發展中的企業應用系統架構的新趨勢:採用Private PaaS。簡言之,我們的公共Paas 的使用經驗,讓我們感受到企業應用系統的平台將朝向私有PaaS 的方向發展,以下將詳細說明。

我們的課從Heroku 這個以Ruby 起家的公共 PaaS 開始練習雲端程式開發。它跟版本管理系統 git 充分整合,當程式開發完畢後,只要執行git 的「推撥push」指令,就可輕鬆將開發好的Ruby 程式佈署(deploy)到Heroku 平台上。程式中所用的一些程式庫,Heroku 都會透過相依性分析,找到引用到的程式庫,匯入佈署,大幅地簡化了佈署的工作。此外,Heroku 提供應用程式伸縮自如(elastic)的執行環境,以所謂的dyno 為服務的基本單位,對於突然湧進的客戶流量,只需要動態 增加dyno 的數量,不需要修改程式就可以自動延展;當然,一旦流量減少,平台提供的dyno 數量 就會跟著減少,充分反應了雲端運算的特色。

在應用程式所需的服務方面,Heroku 提供了快取記憶(memcache)、記錄(logging)與關聯式資料庫(PostgreSQL)等常用的服務。透過開放的介面,Heroku 以addon 方式,提供了許多豐富的第三方服務,例如:MongoDB, Amazon RDS, MoonShado SMS 等等。最後,在程式語言方面,除了Ruby 以外,Heroku 也陸續支援Java, PHP, Python, Scala 等語言與一些常用的應用程式框架,例如:Ruby on Rails, Django 等。

公有PaaS 三大隱憂

雖然像Heroku 這樣的公共PaaS 非常容易上手,也可以減少維護管理系統底層的成本,非常利於初創業的團隊組織。但我們也觀察到一些不盡理想之處與一些問題,如果大型應用程式或大型企業組織要使用,恐怕會因這些問題而怯步。

這裡面有對公共PaaS 的一般性擔憂,也有實 際接觸久後才會有的經驗。

隱憂一:鎖定(lock-in)的問題

一旦你採用一個公共的PaaS,你就會被鎖定。因為要從一個供應商將應用程式搬移到到另一個,勢必需要大量的改寫。如果PaaS 供應商的服務有一些關鍵性變化,尤其是與定價有關的規則,鎖定也可能導致嚴肅的成本問題(Google 最近針對GAE 的價格增加就是一例)。更別提如果供應商破產,對客戶業務所造成的傷害。此外,開發所使用的程式語言有時候也會成為客戶對鎖定的擔憂,PaaS 勢必要朝提供多語言的平台服務發展。上述Heroku 的多語言服務以及微軟的Azure 雲端平台開始支援 Java,就是這樣的發展趨勢之例證。

隱憂二:排除問題或程式除錯的複雜度比較高

因為PaaS 提供應用程式各種平台性的服務,關係密切。應用程式出問題時,必須提供足夠且清楚的資訊以利客戶對症下藥排除問題。這方面PaaS 要比IaaS 與SaaS 來得麻煩:IaaS 以虛擬化服務為主,其他都交由客戶自主掌握,問題較為單純;SaaS 管理一切,必須全權負責,也較好問責。但PaaS 處在中間,問題歸屬的判斷相對複雜。這也是為什麼Heroku 要提供詳細的記錄服務,來協助客戶辨識應用程式的問題所在,以利程式除錯的工作。找到問題後,如果是PaaS 方面的疏失,供應商是否能提供即時的客戶服務,也會是用戶的一大關切。

隱憂三:PaaS 的版本維護問題

任何服務性的軟體,或是因為嚴重的瑕疵,或是應客戶要求,都免不了要定期改版。公共PaaS 因必須同時滿足眾多客戶的需求,更是有可能因為某些(重要)客戶的要求而改版。但改版的結果,很可能導致另一群客戶的應用程式出問題,無法順利運作。偏偏公共PaaS 很難依個別客戶的需要而改變它的改版計畫,因此對企業用戶而言,既要擔心所使用的公共PaaS 無法配合自己的改版時程要求,也要面對因PaaS 改版造成原有應用程式無法順利運行的頭痛問題。

最後,應用程式所需的服務設施非常多,公共 PaaS 不見都能提供,即使有,可能還有版本匹配的問題。針對此點,Heroku 以開放的API,跟其他的服務提供商合作,讓客戶可以輕鬆使用第三方的服務。這樣開放式設計的出發點很好,但是實務上有一些狀況,會讓客戶無法充分掌控自己應用系統的服務品質,而可能考慮放棄使用公共PaaS。舉一實例說明如下,某小型軟體服務廠商使用Heroku 開發與佈署它的電子商務網站應用程式,同時也採用了其他三個服務提供商的服務。可是這三個服務廠商與Heroku 各有個的維護期間,所以廠商的網站就必須配合它們的時程,在不同時段暫停自己的服務。如此一來,這網站就會有過多的服務中斷時程,造成大大的不便。最後,這家廠商決定將網站移往亞馬遜提供的公用IaaS 平台,自己建立各種所需要的平台與服務。

這裡就帶出企業在將應用系統往雲端平台搬移時所要考量的一些議題,其中基本的重點就是:如何在控制與生產力之間取得平衡。目前大多數已開始往雲端發展的大型企業,都只是採用虛擬化技術來降低基礎建設(主要是硬體設備,如伺服器與大 量資料儲存設備)的成本,尚未建置如IaaS 或是 PaaS 私有雲。這個階段,內部的IT 管理人員的適應上應該比較容易,因為只是少了實體設備,對於各種系統面的控制還是可以充分掌握。但是,當真的往IaaS 或是PaaS 方向發展時,就可能因為這些新的系統運作模式在可控制性上有大幅度的差異而會感到遲疑,甚至抗拒。公有雲的服務對這些大企業的IT 人員而言,第一個反應可能就是對無法充分控管而感到不安,所以必然多半會朝私有雲發展。

PaaS 開發快彈性高

接著就是要選擇IaaS 或是直接朝PaaS 邁進? 根據我們使用PaaS 的經驗,應用系統開發人員應該是會偏向PaaS,因為開發與佈署都變得容易多了;但是IT 管理人員可能就會先選擇IaaS,因為可以有比較多的控制。此外,既有程式的搬移, IaaS 也相較容易。不過,從應用系統的使用單位(往往是付費者)來看,開發快速加上機動與彈性的調整可能才是價值所在,因此,我們認為雖然兩 者還是會並存,但是PaaS 的發展更具爆發力。尤其PaaS 可以視為市場上眾多應用伺服器必然要發展的下一步,在這些廠商的激烈競爭下,私有的 PaaS 應該很快就會有成熟的產品推出。