云計算編程有何不同?
譯文【2011年12月21日 51CTO外電頭條】“云計算”這個標簽適用于幾項技術,充斥著業界和廠商的炒作。不過大多數人承認,云計算絕不是公用計算(utility computing)和XX即服務這么簡單。
這種區別對于軟件開發人員來說尤為重要;他們知道,這下一大熱門技術很可能會給自己的飯碗帶來影響。頭腦聰明、關注職業發展的編程人員總是在千方百計提升技能,為下一項不可或缺的技術作好充分的準備。
與“普通的”Web開發相比,云計算開發到底有什么不同?如果編程人員想準備好充分利用任何一種云計算:軟件即服務(SaaS)、平臺即服務(PaaS)或基礎架構即服務(Iaas),那么他應該關注哪些技術呢?如果貴公司之前一向從事Web開發,但現在打算大規模采用云計算,那你又應該關注哪些獨特的技能呢?由于SaaS開發人員操心的問題可能與使用虛擬開發環境的人員操心的問題全然不同,而業界把“云計算”視作是一種整體式技術,所以學習過程可能會更讓人暈頭轉向。
我請教了經驗豐富的開發人員和開發商(因操心這些問題而夜不能寐的技術人員,而不是營銷人員),聽聽他們有何高見。
“在云計算環境開發應用程序就有點像是從美國到訪加拿大。幾乎每個方面都一樣,但是你會注意到存在一些細小的差異,必須顧及到。”--Standing Cloud公司的David J. Jilk
因而,下面概述了你在探索云計算時需要關注的幾個方面,包括工具、可擴展性、安全性、架構設計以及不斷增加的基礎架構知識。
了解你的工具
我們不妨先把簡單的部分搞定。向云計算遷移可能需要你學習新的應用編程接口(API),比如面向谷歌應用引擎、SalesForce.com或者你的應用程序將來依賴的任何軟件的API。對于大多數開發人員來說,學習新的API、研究新的數據庫工具或者探究新的開源平臺是很平常的事,不過你的確需要為此留出時間。
另外,雖然一些開發工具擁有允許部署在云計算的插件,但是編程人員必須學習那些功能特性。Ektron公司的工程主管Alpesh Patel說:“以微軟SQL Azure為例,存在‘普通的’Web開發環境沒有的技術障礙。”你可能只好盡快熟悉稀疏列(sparse column)、擴展存儲過程(extended stored procedure)、服務代理(Service Broker)或通用語言運行時環境(CLR)和CLR用戶定義類型。
這些工具或升級版有許多比較新穎,所以你可能要注意它們存在的局限性。Patel說:“根據我本人的經驗,微軟Windows Azure平臺不允許在網站中使用混合語言。網站模板、控件、應用程序代碼及其他幾種組件都必須作為單一語言來運行。我們只好把原先基于SQL服務代理的隊列技術改成自定義的隊列解決方案。”#p#
為可擴展性而設計
“云服務的可擴展性完全取決于底層的Web應用程序。如果Web應用程序本身就存在編程方面的瓶頸,那么把該應用程序遷移到云計算環境無助于事。”--rackAID公司的Jeffrey Huckaby
云計算承諾的一個優點是,基礎架構很容易擴展。于是,一些開發人員誤以為“所以開發人員沒必要再考慮擴展性,”但是經驗豐富的技術人員對此持有不同的看法。
Marc LaFleur是提供具有語音功能的通訊應用軟件的托管服務提供商Parlance Corporation的首席架構師,他解釋:“云計算不是相當于用更多的硬件來解決問題。沒錯,云計算提供了看似沒有限制的可擴展性,但是前提是設計的系統其架構采用了可以充分利用可擴展性的方式。如果你的應用程序依賴存儲在內存中的會話數據,你很快會發現面臨重大瓶頸。”
為更高的可擴展性設計應用程序需要你了解更多的知識,而不是更少的知識。rackAID公司首席執行官Jeffrey Huckaby說:“我在與許多剛創辦的SaaS提供商和社交網站類型的網站合作時,經常遇到并不明白可擴展性概念的開發人員。云服務的可擴展性完全取決于底層的Web應用程序。如果Web應用程序本身就存在編程方面的瓶頸,那么把該應用程序遷移到云計算環境無助于事。”
他建議,應該學會在職能部門之間合理分配工作負載,并且對代碼進行正確的分析。Huckaby說:“當你為比較小的負載編寫應用程序或者慢慢擴大用戶群時,有時間來逐步改進。不過當你推出Facebook應用程序時,可能沒有時間來排除故障和困難。使用XDebug之類的代碼分析工具,就能收到奇效。”
正如別以為你的代碼天生就很安全,同樣別以為你的代碼具有可擴展性。Servoy公司首席執行官Jan Aleman說:“你開發的應用程序會比之前開發的任何應用程序都來得龐大。你的應用程序一定要有擴展性。與有著這方面經驗的人交流交流;搞技術的都喜歡交流。”#p#
安全性
另一個明顯的顧慮就是云應用程序及其依賴的數據具有的安全性。
如果使用云計算,你那些內部的安全技術突然用在公司防火墻的外面。Parlance公司的LaFleur說:“當你面對貴公司里面的業務應用程序時,常常使用一種相對簡單的安全模式就應付得了。”你的內部系統通常內置了一些集成安全功能,可能還使用活動目錄。他說:“然而一旦到了云計算環境,情況就大不一樣了。開發人員在開發過程的早期階段,既要考慮身份驗證(‘我就是我所說的那個人’),還要考慮授權(‘我可以訪問哪些數據/系統’)。還要了解你的數據可能受制于哪些法律——比如《健康保險可攜性及責任性法案》(HIPPA)和《薩班斯-奧克斯利法案》(SOX),這很重要。”
“云計算開發本身與傳統開發沒有任何不同。不過,它不大容忍得了糟糕的開發方法。”--Parlance公司的Marc LaFleur
ICF國際公司的高級分析師Kevin McDonald著有《認清云計算:管理云計算領域的風險》一書。他說:“這些問題并不是云計算開發所固有的,但是在云計算環境會被放大,這是一種意料之外的影響。”他建議,開發人員應該熟悉美國國土安全部的全國網絡安全部門等組織機構,該部門在推廣內置數據安全性(Build Security In)倡議,并且列出了25個最危險的常見缺陷列表(Top 25 Common Weakness Enumerations)。
對于開發人員來說,云計算安全還意味著要考慮數據安全性,并且選擇同時符合貴公司的技術要求和業務要求的提供商。就拿咨詢公司TeamEXtension首席執行官Bienvenido David III的經歷來說吧,“面臨的問題更多地涉及配置和策略,而不是軟件開發。”比如說,TeamEXtension將經過AES加密的信用卡號碼保存在其數據庫中。如果發生了安全泄密事件,支付卡行業數據安全標準(PCI DSS)審計人員需要訪問服務器,但是亞馬遜的彈性計算云(EC2)不允許訪問。他說:“我們無法做到PCI與亞馬遜EC2實現一級符合。我們可以把信用卡號碼保存在別處,但是這么做帶來的問題會多得多。Rackspace Cloud也存在與亞馬遜EC2同樣的PCI問題,所以它同樣沒戲。”#p#
重新考慮你的軟件架構
盡管開發人員預計部署到云計算“就像”任何一種類型的Web開發,你的確需要認識到架構方面的差異。Standing Cloud公司首席執行官David J. Jilk解釋:“在云計算環境開發應用程序就有點像是從美國到訪加拿大。幾乎每個方面都一樣,但是你會注意到存在一些細小的差異,必須顧及到。”他表示,大多數差異與基礎架構和技術堆棧層有關,而不是與應用程序代碼本身有關。
Heavy Water軟件公司的首席開發人員Anthony Eden表示,內部托管環境往往很穩定,基本上不受外界因素的影響。但是由于資源共享,云計算環境(以及在一定程度上的所有虛擬化環境)顯得很混亂。Eden指出:“整個系統的運行可能受到完全不受你控制的因素的影響,而且常常是這樣。”他給出的解決辦法就是:采用大猩猩工程(gorilla engineering),這是應對不斷變化的環境的一種做法。
LaFleur提醒,不要把可擴展性誤認為是系統性能。設計應用程序時要考慮到網絡延遲。可擴展系統在負載狀態下更可靠,而且可以保持相對一致的性能;但是也要承認到這一點:如果遷移到云計算,性能會受到影響,而且還會出現間歇性故障。你的應用程序應該能從容處理中斷問題。
“想真正將Web服務適當地實施到云計算中,開發人員就要著眼于‘函數方面’,而不是著眼于‘對象方面’。”--Limewire公司的John Pavley
LaFleur說:“云計算中的數據庫也許能夠以異常快的速度從存儲系統中獲取數據,但是這些數據仍得傳送到客戶端應用程序。”他發現,盡量減小傳送的數據量常常會給性能帶來重大影響。如果你只需要100個記錄中的三個字段,就要確保你獲取的僅僅是這些內容;他表示,更好的做法是,分成每批25個獲取并顯示那些記錄。
這可能要有不同的理念。Limewire公司的工程副總裁John Pavley說:“想真正將Web服務適當地實施到云計算中,開發人員就要著眼于‘函數方面’,而不是著眼于‘對象方面’。函數式編程意味著動態定義針對沒有狀態的數據執行操作的函數,可以根據需要,將函數均勻地分發到任何數量的云服務器。遺憾的是,至少大多數開發人員一貫以來著眼于‘對象’,對象是指將數據綁定在單一Java類或C#類里面的有狀態實體。很難針對對象實行負載均衡,它們到頭來給你的云計算環境帶來了人為的限制。”
這給你選擇的工具和語言帶來了影響(前面關于學用新工具的第一點有所提及)。Pavley說:“通過Perl、Python和JavaScript等編程語言,使用無狀態函數進行擴展要容易得多。”但是其他開發人員向我詳細解釋了他們選擇的編程語言為什么是最佳選擇,他們致力于Java、開源環境或微軟開發環境。我得出的結論是,你也許可以使用自己青睞的任何一種環境,不過一些云計算開發工具的早期版本可能會帶來諸多局限性。#p#
為動態的基礎架構而設計
對于許多Web開發人來說,與服務器有關的任何工作都交給運營部門處理。不過你進入到云計算環境后,預計要比以前更深入地了解系統管理員面臨的問題。甚至出現了一個新的術語來形容關注數據中心的編程人員:dev-op。
“以亞馬遜EC2為例,你需要根據帶寬、內存和處理器來付費,所以開發人員在開發應用程序時,要關注這些因素。”--Ektron公司的Alpesh Patel
云基礎架構從諸多方面告訴了你應該如何設計軟件、編寫代碼,其中一個方面是你如何付費給云平臺提供商。SunGard可用性服務公司企業云基礎架構服務部門的首席架構師Chip Childers指出:“你在云計算環境中使用的基礎架構的每一個部分都需要你付費。”
Childers表示,為了降低成本,“開發人員應該在‘少就是多’開發方面加強技能,比如在減少內存和處理器使用量等方面。認真分析你應用程序的性能,檢查有無資源泄漏的現象,并且建立模型,弄清楚每一個服務器實例可以支持多少個用戶。”
這種做法適用于大多數云計算平臺。Ektron公司的Patel說:“以亞馬遜EC2為例,你需要根據帶寬、內存和處理器來付費,所以開發人員在開發應用程序時,要關注這些因素。”相似的是,微軟Windows Azure按照計算實例和資源使用量來收費。Patel解釋:“這些都被計量;要是提供商發現某個應用程序在大量消耗資源,那么該應用程序會被隔離起來。我們在內存和處理器使用方面進行了全面的測試,以避免應用程序被隔離以及支付不必要的費用。”
據Huckaby聲稱,云計算開發新手還在為數據一致性概念而糾結。他說:“你開始有多個應用服務器和云計算實例時——它們可以根據負載大小來啟用或停用,你就得確保應用程序能夠合理地傳送和獲取數據。你不希望應用程序實例關閉后,被剝奪了數據或者丟失了數據。”
這些工作有一些側重于技術和設計,但是專業云計算環境還需要開發人員更加關注流程、流程和策略。Solutionary公司的行業解決方案副總裁Pamela Fusco還是云安全聯盟(Cloud Security Alliance)的創始成員,她建議開發人員要列出應用程序的重要級別(很重要、比較重要、不大重要),從而確保云服務提供商可以滿足所需的服務級別協議(SLA)。
這不僅僅是數據中心工作人員的問題,不過許多開發人員習慣于這么認為。你的應用程序將駐留在網絡上的什么地方?Fusco表示,自定義應用程序需要自定義的支持和關注,所以云計算環境中太多的特別定制會導致SLA問題。她說:“不僅僅要了解如何編寫、編寫什么,還要了解基本的業務要求、云服務提供商支持合同和SLA。你要更深入地了解業務和云計算用戶環境。”#p#
“不僅僅要了解如何編寫、編寫什么,還要了解基本的業務要求、云服務提供商支持合同和SLA。你要更深入地了解業務和云計算用戶環境。”--Solutionary公司的Pamela Fusco
服務是關鍵
“普通的”Web開發人員在某種程度上也許可以忽視Web服務,但是云計算開發會讓你極其熟悉這些概念。
這是企業開發人員可能比新興公司的開發人員更有優勢的一個方面。據LaFleur聲稱,“如果開發人員深入了解面向服務的架構(SOA),那么他面對云計算環境時要得心應手得多。把整體式應用程序分解成獨立服務的意義不僅僅在于方便重復使用(重復使用是SOA支持者通常大力吹噓的優點)。合理實施的SOA系統讓你可以充分利用云計算的可擴展性。”
Java企業架構師Alexander Katrompas說:“Web應用程序與任何企業應用程序(包括云計算環境中的企業應用程序)最大的區別在于,業務邏輯層與Web服務層實現了嚴格分離。典型的Web應用程序更關注交付內容,而企業應用程序關注的是處理和持久性。”他表示,從企業環境遷移到云計算環境需要了解大規模分布式計算和負載均衡,這需要嚴謹的企業架構。Katrompas補充說:“雖然大多數人認為云計算是一場‘革命’,但是完全是營銷炒作。云計算其實是企業模式的一種演進,它本身是Web應用程序模式的擴展而已。”
LaFleur表示,最終,“云計算開發本身與傳統開發沒有任何不同。不過,它不大容忍得了糟糕的開發方法。”多年來,開發人員一直被告知要注意可擴展性和安全性等方面。他說:“實際情況是,大多數開發人員依賴通過隱藏手法來改進硬件和安全的做法。云計算毫不留情地揭露了這些糟糕做法的真面目。”
原文鏈接:http://www.itworld.com/career/121228/programming-cloud-computing-whats-different