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