論壇文章
【特別企劃】Let's Talk About Cloud Technology

最近這幾年,似乎只要聽到任何東西扯上“雲端"二字都不足為奇了,就連補習班都要叫做雲端補習班,房屋建案要叫做雲端住宅,而李家同教授曾經對學生開玩笑地說:「雲端就是,你死了之後就在雲端」。和沛科技總經理翟本喬在「什麼不是雲端運算?」一文中用逆向思考的方式度提出了簡單的判斷原則:「如果你把一份企劃案上所有的「雲端」兩個字都改成「網路化」、「電子化」、「e化」、或「m化」,而整份企劃案看起來還是一模一樣的話,那它就不是一份雲端運算的企劃案」

那到底什麼是雲端運算呢?我想試著總結上述說法簡單地解釋為,雲端運算就是提供用戶某種網路服務,但與傳統網路服務的差別在於,用戶可以彈性地依據需求自助地調配服務,不必了解詳細技術細節,擔心伺服器負載不足或軟體升級等等的問題,話說到此,相信大家都能初步了解什麼是雲端運算了,接下來我們再來談談雲端服務。

站在巨人的肩膀上

美國國家標準局界定了三種雲端運算的服務模式:分別為IaaS(架構即服務),PaaS(平台即服務)及SaaS(軟體即服務),請參見上表。

一般而言,PaaS 及 IaaS 的服務模式,已經有像是 Amazon、Google、Microsoft 等大規模的公司在維運了,所以現在我們談的雲端服務開發,通常指的會是 SaaS 雲端軟體服務的開發,但是在開發過程中,其實也可以使用既有 IaaS或 PaaS 的服務來協助我們開發,以節省自行建置底層架構或平台的時間。

雲端技術漸進式遷移

隨著近年來許多雲端服務的發展,許多雲端儲存技術因應而生,像是 Redis、MongoDB、Cassandra、Hadoop 等等,若只是要開發一個新的雲端服務,那直接採用雲端儲存技術自然不在話下,但若已經有個一個採用傳統資料庫的舊系統,想要朝雲端服務的方向邁進,或許並不建議直接就採用這些新技術來開發,因為這些新興的雲端儲存技術都有其優缺點,不是每種服務或資料型態都適合,最好實際使用過再慢慢採用,建議可以先進行的是將你的舊系統以 JSON+RESTful Web API 的形式包裝起來,再漸進式地將部份資料遷移至新的雲端儲存技術,同時,這也有利於提供接下來我們要提到的跨平台與裝置(傳統網站、行動裝置app )的前端技術開發。許多著名的雲端服務,例如 Dropbox、Google Drive都有提供 RESTful WEB API 可以供利用,建議在設計自已的 RESTful Web API 時也可以觀摩看看。

在行動裝置上也能使用雲端服務

隨著行動裝置普及率大幅成長,現在幾乎人手一支智慧型手機,甚至是平板電腦,雲端服務的使用範圍不再受限於電腦桌前,我們要讓使用者能隨時隨地透過手機、平板電腦來使用我們的服務。最簡單的方式是設計適合行動裝置的網頁,透過 Responsive Web Design (自適應網頁設計)使網頁能自動適應不同尺寸的螢幕,使用者更有效率地用手機瀏覽器閱讀、操作。這個方式開發成本最低,但是卻不能充分利用手機照相、錄音等原生功能。另一種方式是開發 Native app (原生應用程式),可以完整地使用手機的原生功能,效能最好,而且操作介面最貼近該平台的使用習慣。但是不同平台間程式碼不能共用,每當要移植到另外一個平台的時候,就要為該平台重新寫一次 app。也就是說,如果想要運行在現今市佔率最高的Android、iOS 兩大平台上,我們就必須維護兩份不同的程式碼。

開發跨平台Hybrid app

所以我們採用第三種方式,Hybrid app,用 HTML5 技術開發,然後再包裝成一個原生的app,透過行動裝置上的瀏覽器引擎(WebView)來運行,並透過特定框架提供的API 來呼叫原生功能,最後還能上架到不同平台的市集上。由於是使用 HTML5 開發,所以開發出來的app是跨平台的,這樣不但只要維護一份程式碼,而且有網頁開發經驗的人員能更容易地上手。Javascript 還有很多現成的函式庫及框架可以使用,善用這些資源不但能減少重複製造輪子的時間,還能寫出易維護、有彈性的程式碼。

我們選擇 PhoneGap 來開發跨平台的 Hybridapp。PhoneGap 是一個 Open Source 的開發框架,他提供一系列API讓開發者能用 Javascript呼叫原生功能, PhoneGap 能將 Webapp 包裝成不同平台的專案,開發者再用該平台的SDK 來編譯成原生的 app。此外 PhoneGap 還有雲端編譯的服務(PhoneGap Build),只要將 Webapp 上傳,就能自動編譯出不同平台的app。目前 PhoneGap 支援包括 Android、iOS、WindowsPhone、Blackberry 等多種主流的平台。

並不能完全消彌不同平台的差異

一切看似很美好,只要寫一份程式碼,而且還是類似網頁的開發方式,就可以發佈到不同的平台上,實際開發起來卻沒有那麼順利。由於每個平台的 WebView 實作不盡相同,所以往往會發生在 Android 上已經調好的版面,怎麼到了 iOS 上就跑掉了的狀況。另外,Hybrid app的效能和 Native app 相較之下是比較差的,尤其是在 Android 環境下很容易因為太多的特效或太複雜的畫面而影響 app 的流暢性。這時除了要熟悉不同平台的特性,更需要耐心地在不同的裝置做測試及優化。

開發 Hybrid app 不只是寫網頁

近來使用者體驗也是很熱門的話題,好的使用者介面更是決定一個 app 優秀與否的關鍵因素。雖然 Hybrid app 使用 Web 技術,但是開發 app 和開發傳統網頁卻有很大的區別,如果只是單純將傳統網頁包裝成 app,想必使用者不會給予好的評價。

以下幾種方法可以提供更好的使用者體驗:

  • 使用SPA(Single Page app)開發方式
  • 消除行動裝置 300毫秒的點擊延遲時間
  • 善用 touch 事件做出滑動選單或列表的功能
  • 專門為行動裝置螢幕量身訂做的介面

最後,開發者應該要抱持著,我正在開發 app而不是寫網頁的想法,並以 Native app 的標準來檢視自己的 app,才能開發出好的 app。

結語

有人比喻軟體開發像是蓋大樓,而開發人員就像是設計師或工程師,有另一個好比喻說軟體開發像是園藝設計,而開發人員像是園丁,因為大樓一旦蓋好就很難變動設計了、而園藝需要會隨著季節、環境及花草特性等等不同隨之漸漸地調整設計,如何做個好園丁其實不難、好好了解你的工具與客戶需求、做好應變彈性、相信春天來臨時、庭園的花草也能生機勃勃、枝繁葉茂。