網路城邦
回本城市首頁 資策會 科技化服務(ITES)
市長:Champion  副市長:
加入本城市推薦本城市加入我的最愛訂閱最新文章
udn城市資訊科技網路分享【資策會 科技化服務(ITES)】城市/討論區/
討論區雲端運算 字體:
上一個討論主題 回文章列表 下一個討論主題
【轉載】RUN!PC:從開發人員的角度看雲端運算
 瀏覽896|回應0推薦0

Champion
等級:6
留言加入好友
http://www.runpc.com.tw/content/main_content.aspx?mgo=189&fid=E10

雲端運算的開發技術
從開發人員的角度看雲端運算
文/圖 黃忠成.責任編輯/洪羿漣

去年Google在台啟動雲端運算學術計畫。今年6月,鴻海將與資策會攜手布建雲端運算軟體計畫;今年8月,網通國家型計畫辦公室與微軟簽訂3年的合作案,在台灣成立亞洲第一個雲端運算通訊應用平台展示中心;工研院也與IBM簽約合作,將於9月成立「雲端運算科技中心」。就幾家技術提供大廠陸續與國內產官學界合作的動作來看,沒有人敢忽視雲端運算的重要性。

從2007年雲端一詞被提出後,資訊界對如何定義雲端的討論便如火如涂的展開,各大資訊產業更在雲端的正身未明情況下,於2008年紛紛宣誓加入雲端戰場。

霎那間,雲端這個名詞充斥在報章雜誌及電視上,彷彿資訊界的未來都繫在雲端上了。但事實上,對於一般使用者而言,可能連雲端是什麼都搞不清楚,只感覺到,好像什麼東西扯上雲端後,就會變的很厲害的樣子。

雲端其實是台灣對於Cloud Computing的翻譯,就英文字義來說,應該稱為雲運算才對,其中的雲指的是以往繪製網路圖時,習慣上都會將廣域網路(也就是Internet)畫成一朵雲的樣子。而端指的便是使用者所用來連上網的電腦或是智慧型手機。

Cloud Computing指的是將使用端所送上來的要求,交由位於雲中的一群電腦進行處理,這個處理過程是以平行運算方式進行,所以我們可以想像成,使用端的一個要求,由數百、甚至是數萬台電腦一起完成,最後將結果送回給使用端,此運作模式即為典型的Cloud Computing(雲端運算/雲運算)概念。


雲端運算歸類
單以概念而言,我們實在很難看出這樣的運作模式,能對現今的網路環境產生多大的影響,這也是為何現在諸多資訊產業會形成,一個雲概念各自表述的情況。還好從2007年雲端概念被提出後,經過不斷的討論及實踐,到目前為止,我們大概可以將諸多資訊產業對於雲的描述歸納為三大類型。


Infrastructure as a service (IaaS)

這是由傳統的虛擬主機演化而來的雲應用模式,有別於以往的虛擬主機服務,IaaS提供的不是實體的主機,而是一個一個的VM(virtual machine),這些VM執行於IaaS提供者的機房某台電腦中,當企業要求更多的CPU或是儲存空間時,IaaS會視實體電腦負載情況,選擇於目前電腦開另一個VM,或是在另一台實體電腦開另一個VM來提供服務,由於CPU數及儲存空間升級無限制的特色,因此IaaS被認定為是雲端的一種實現模式。

舉個例來說,我有一個網站位於IaaS提供者的機房中,開始時我申請的是單一CPU及500GB的空間,因此IaaS提供者將我的VM放在一台8 CPU的機器中與其它租用者的VM一起執行,不過此時我的VM被設定成只能使用1顆CPU。

當業務量爆增,單CPU已不足以處理我的業務,此時我向IaaS提供者提出升級成2 CPU的需求,對IaaS而言,如果這台機器的CPU使用率尚未滿載,他可能會將原本的VM所能使用的CPU設為2顆。假設原來機器的CPU使用率已達極限,就將我的VM移到另一台可以分出2顆CPU的機器中運行。實務上最常見的應用就是Amazon的EC2及S3,一個是提供運算資源,一個則是提供儲存資源。

從IaaS的實現雲概念中,我們可以察覺到,以往用來裝載多種OS於同一台電腦的virtual machine技術,現在因為多核心CPU及多CPU平台的成本降低,而被運用來裝載伺服器。

另外值得一提的是,Oracle已經宣佈提供Oracle資料庫給Amazon的使用者所使用,這也代表著Oracle暫時似乎不想自己吃下雲端這塊餅,而是聯合Amazon來打這場雲端戰爭。


Platform as a service (PaaS)

PaaS也是由虛擬主機而演化來的一種雲服務,實體運作模式類似於IaaS,但PaaS較特殊之處在於限制用戶使用特定的作業系統及開發語言。簡而言之,PaaS提供的是一個開發平台,在這個開發平台上執行何種作業系統、使用何種程式語言、資料儲存於何種資料庫中,完全由PaaS提供者所掌控,用戶沒有選擇的權利。和IaaS的實際運行模式相同,PaaS的網站一樣是運行在VM中,對於運算資源及儲存資源的收費也大致與IaaS類似。

就個人而言,如果滿足一個前題,也就是開發平台所提供的基礎服務位置是在PaaS所提供的大朵雲中,我倒是覺得PaaS比較貼近於雲運算的基本概念。

舉例來說,我的網站進行一個很複雜的圖形辨識工作,雖然我要用來辨識的圖形庫是位於向PaaS所購買的空間中,但這個辯識的服務是由PaaS所提供,假設辨識的運算過程不是使用我向PaaS所購買的運算資源,而是由PaaS內的大朵雲所提供,那麼我的程式只要呼叫這個服務就可以完成工作。而且因為是由PaaS內的大朵雲所完成的,因此速度會變的非常快。

當然!這只是我理想化的思考,現實情況很難達到這樣的應用,畢竟對於PaaS廠商而言,運算資源的計費方式比開發平台特定服務的計費來得簡單且有利。PaaS的廠商目前以Microsoft的Windows Azure Platform、Google的Google App Engine及Salesforce.com所提供的諸多服務為指標廠商。
Software as a service (SaaS)

與IaaS及PaaS截然不同,SaaS著重在提供軟體給用戶使用,用戶透過瀏覽器或其它特定工具連上網際網路,進而使用SaaS廠商所提供的軟體。簡單的說,是軟體租賃的另一種模式。目前較著名的SaaS指標就是Salesforce.com的CRM、Google的Google Docs及Gmail,還有Microsoft的Live Mail及Live Mash。

那SaaS與雲端怎麼會扯上關係呢?主因在於這些軟體的提供者如何處理軟體所引發的運算,例如Google Docs,用戶利用瀏覽器來建立及修改文件,其間有很多運算發生,而這些運算將由Google的雲端運算中心所完成,而非客戶端的電腦。

就我個人的看法,SaaS其實是軟體租賃的進化版,透過瀏覽器,可以讓不同作業系統的使用者使用同一種軟體,這間接讓軟體成為跨平台,進而透過軟體的用戶群擴大來增加提供者的收入,至於跟雲扯上關係,純粹只是為了解決使用者一多時,所造成的主機負載問題而已。SaaS目前的提供者較著名的有Salesforce.com、Google、Microsoft、IBM…等。


造雲產業

除了前述這三類雲模式外,還有另一種雲模式的應用,也就是協助企業創造自己的雲運算機房的產業,這裡的指標廠商就是IBM。此類型的雲又分成兩大類,一類是公有雲(Public Cloud),一類是私有雲(Private Cloud),IaaS、PaaS、SaaS都是屬於公有雲,而針對有能力、有規模的企業而言,把自身的資料及應用程式放在公有雲中是具風險的,這些企業真正需要的,是創造自己的雲運算機房,IBM就是提供這類服務。
雲的創意大於定義
當然,從廣義而言,雲的定義其實很簡單,就是一群電腦進行平行運算來處理使用端的需求,只要符合這點,都可以稱得上是雲運算的實作體。這其中有些是創意、有些則是不得已的結果,例如搜尋引擎。受惠於網路的發達,搜尋引擎得到了許多使用者的青睞,但在獲利的同時,也因為網路的發達,使得搜尋的資料量日益龐大,此時若不藉助於雲運算,那麼要在一秒內找出使用者所要的資料將是件不可能的任務,Google Search及Microsoft的Bing便是這類型的雲實現者。

同理,防毒軟體廠商在幾年前也開始走向同樣的道路,由於病毒及木馬程式的不停誕生,使得其資料庫也日益龐大,若再不藉助雲運算,那麼掃毒及防毒的動作將會越來越牛步化。因此,我們可以得出一個結論,由於網路的發達,使用者的不斷增長,雲運算會逐漸的出現在不同的領域,例如入口網站、購物網站、部落格提供者等等,遲早都會有雲運算的身影出現。


安全方面的隱憂
經過了一年多的沉澱與討論,各大資訊產業都已經有了自己所認知,也認為能由此獲利的雲應用。但對於我這種缺乏創意的開發人員而論,PaaS大概是最接近雲運算概念的實作體,相較於PaaS,SaaS在我看起來有點虛浮。

由於資安意識的上升,我想使用者大概不會想把自己私密、敏感的資料放在網路上,也無力承受當網路出問題,無法使用SaaS所提供軟體時的後果。但IaaS又太過於極端,雖然其擁有PaaS所沒有的,不受限於開發平台及程式語言的特色,但也因此失去了PaaS會提供的基礎服務,這將使得建立網站時必須耗費更多的時間與精力。

但同時我也必須承認,假設我是一個大企業的負責人,也可能會頃向於使用IBM這類廠商所提供的Private Cloud服務,因為除非IaaS或是PaaS廠商能白紙黑字寫下當資料外洩時的賠償條款,否則我不敢將自己的資料放在他們那裡。

就資料隱私這部份,其實Microsoft的Windows Azure Platform服務群中,有一個有趣的東西:Service Bus,就目前規格看來,Service Bus目的是讓企業將一個服務送上雲端,但這個服務真正的運算及資料是儲存於企業內部而非雲端,意思是,Service Bus只是提供一個透通管道,讓外部的使用者可以看到原本在企業內部的服務,但當使用者使用該服務時,Service Bus會將使用者的要求轉向到企業內部的服務。這對於想提供服務但不想因此在防火牆上開個洞的用戶而言,是個不錯的選擇(當然,這就不叫雲運算了)。


企業採用的影響因素
相對於各資訊產業對於雲的樂觀態度,也有一些人傾向悲觀態度,因為雲是否成功,取決於企業是否接受此概念,而不是使用者(註:SaaS類的雲應用較特別,是否成功取決的是使用者及企業兩者)。

對於企業來說,IaaS、PaaS都只是過往ASP的演化,同樣的資料隱私問題並不會因為運算及儲存搬到雲上而消失。說實話,當初ASP的盛世之所以凋零的主要原因有兩個,一是運算資源、儲存資源及網路資源的成本問題;另一個就是資料隱私問題了。

當時的結果,ASP最大的提供者變成了ISP,因為只有這些ISP才能負擔這些成本。到了雲時代,由於目前有能力建造雲架構的都是超大型國際企業,在資源上雖然不成問題,但在隱私上要如何處理,可能有待商榷。

Microsoft認為,Windows Azure Platform可以做為企業創始初期的選擇,可以節省創業成本,不需在一開始就投入那麼多的硬體設備。等到中後期獲利穩定時,就可以選擇繼續相信Microsoft,持續使用Azure服務,或是將原本位於Azure Platform上的程式搬回企業內部,自己購買設備來維持運作,意思其實就是創造自己的小雲朵。

除了資料隱私處理問題外,影響雲是否成功的另一要件是開放性,以目前PaaS的發展情況來看,當我們選定一個PaaS廠商並開發程式後,如果改天因為特定原因想轉移到另一家廠商時該怎麼辦?目前這點似乎是無解的,因為這些雲並沒有互通機制,一定得重寫是目前的現況。

同樣,從開放性角度來看,PaaS的魅力應該來自於其提供平台的特定服務,例如驗證服務,如指紋辨識運算、圖形辨識運算、甚至是未來的臉部辨識等。倘若我所使用的PaaS並沒有這個服務,我是否依然可以使用別的PaaS所提供的服務。也就是雲連結雲成為一朵更大的雲。


駕馭雲朵的程式設計師
至此,我已經把雲端出生到現在的發展做了一個簡略的介紹,或許大家都快忘了我其實是個寫程式的程式設計師,對於我這種人而言,IaaS、PaaS、SaaS等策略型問題其實並不重要,我只想知道,雲端在我未來的程式設計路上會產生什麼影響?

就現況來看,雲運算的推出,對於設計師會有幾個影響,其一:設計師必須要了解平行運算,因為以IaaS來說,就算其提供了100個CPU,如果我們寫的程式只用到1個CPU,那也是白搭;其二:不要以為PaaS就會改善這個情況,因為就算是PaaS,平台也不見得會聰明到幫你的程式進行平行運算,如果一不小心,自動平行運算把你的程式給弄掛了,他不是賠死了,所以不會有PaaS肯做這件事的(前題是,你得自負結果);其三:就目前的戰況分析來看,熟悉平行運算與各PaaS提供的平台,是未來設計師是否能在雲運算時代中屹立不搖的要點。


PaaS!程式設計師的下一個開發平台
在雲時代,我認為對程式設計師而言,最值得投資並試用的雲應用應該是PaaS,因為這與我們本來程式寫法的差異最大,SaaS離我們太遠,而IaaS又離我們太近(近到我想大家都知道怎麼寫在上面跑的程式,當然!平行運算課題也是不可缺的技術)。所以熟悉PaaS是當前唯一可以為雲時代預作準備的投資。

如前面所述,目前PaaS最夯的提供者便是Microsoft與Google,本文先對這兩個PaaS進行簡略的介紹。


Microsoft Windows Azure Platform

Microsoft於2008年開始將其雲的實作體,Windows Azure Platform釋出給眾多開發人員進行測試,與其它PaaS廠商相同,Windows Azure提供的是以Windows為作業系統,以.NET Language為開發語言的開發平台,不過在2009年中,Windows Azure除了.NET Language外,也開始接受PHP語言,因此現在設計師可以自由的選擇是要以.NET Language(VB.NET、C#...),或是PHP來開發Windows Azure應用程式。

Windows Azure大概可以區分為兩個區塊,一個是Azure平台本身,這個平台允許設計師撰寫ASP.NET網站並發佈到雲上,這意味著你的使用者都將連上Microsoft所提供的雲,而你的ASP.NET網站程式也將執行於雲內的IIS 7。

另一個區塊是屬於平台提供的服務,例如用來儲存大量、複雜資料的Microsoft SQL Data Services、用來與Windows Live結合的Live Services,提供Azure上程式特定服務,如使用者認證、Service Bus的Microsoft .NET Services。

需注意的是,Azure Platform與其它PaaS相同,將運算資源及資料服務分開計費,因此當在申請試用時,我們也得先至[http://www.microsoft.com/taiwan/azure/default.htm]申請Azure的試用帳號,然後再申請Microsoft SQL Data Services的帳號。

Windows Azure將應用程式分成兩個角色,一個是接受外部連入的Web role,也就是大家熟知的ASP.NET網站應用程式,與以往的ASP.NET網站應用程式不同,Web role的ASP.NET應用程式是執行在雲中的。

另一個角色是Worker role,這種應用程式並不接受外部連入,純粹是個背景執行的應用程式,舉例來說,我們可以用一個Web role來接受使用者連入,在需要進行月結或是出貨流程時,啟動一個Worker role來進行背景處理。

不過以上所提均是由軟體角度出發,不管是Web role或是Worker role都得執行在某一台電腦上,但就雲概念而論,雲擁有負載平衡、平行運算、錯誤回復等能力,為了達到這點,雲必須具備能在必要時間,動態移轉Web role、Worker role至另一台電腦中執行的能力,Azure Platform解決此問題的技術就是Fabric Controller。

Fabric Controller可以動態的增加Web role、Worker Role所能使用的運算資源,還能在錯誤出現時,即時的將應用程式移到另一台電腦上執行。開發人員同時也可利用較熟悉的開發環境:Visual Studio 2008,其提供的Azure Tools for Visual Studio 2008,快速地開發出Azure的應用程式。

由於篇幅有限,關於Windows Azure Platform開發相關技術,接下來在RUN!PC的[技術專欄]中會有較深入的探討。


Google App Engine

Google App Engine也是一種PaaS的雲實現體,其規定開發者使用Phyton或是Java語言。目前Google App Engine有開放免費試用,因此讀者們可先行至[http://code.google.com/intl/zh-TW/appengine/]進行註冊並下載SDK來試用。

在功能面上,處於Google App Engine上的應用程式可接受外來的HTTP/HTTPS連線,但連出時受限於沙箱,只能透過Google App Engine所提供的URL擷取及電子郵件服務才能連到網路上其它的電腦。在開發工具上面,Google允許程式設計師使用知名的Eclipse來開發Google App Engine應用程式,讀者們可於[http://code.google.com/intl/zh-TW/eclipse/docs/download.html]取得Google App Engine的Eclipse Plug-In安裝網址。

相對於Azure的Web Role、Worker Role分界,Google App Engine目前並未有相等的明確規範,以Java環境而言,目前均以Servlet/JSP為主,如需要執行定期等背景工作,可透過Cron技術來排程執行特定的Servlet/JSP。



【原文刊載於RUN!PC雜誌:2009年10月號】
回應 回應給此人 推薦文章 列印 加入我的文摘

引用
引用網址:https://city.udn.com/forum/trackback.jsp?no=54653&aid=3725109