開發雲計算應用從何入手?

來源:互聯網
上載者:User

雲計算2009年仍然延續了它在2008年的熱度,不難預料,運行在雲上的應用(以下簡稱雲應用)肯定會越來越多,隨之而來的是,肯定會有越來越多的開發人員不得不考慮或者參與雲應用的開發。

雲計算的本質是通過互聯網訪問應用和服務,這些應用或者服務通常不是運行在自己的伺服器上而是由協力廠商提供。 對雲的開發者而言,在雲計算模式下,儘管部署應用時無需關心基礎設施方面的問題,但同時也帶來了一些新的問題,比如開發員不能用以前熟悉的方式調用資料庫、應用程式呈無狀態特性以及必須採用不同的開發框架等。

無狀態應用和伺服器宕機

「開發雲應用最大的挑戰是,軟體必須能根據應用的需求自己調整和提供所需要的資源。 」Sun雲計算部門CTO Lew Tucker說,幸運的是,借助雲平臺提供的API,雲應用的開發人員可以從雲的提供方申請更多的資源。

開發人員還必須進行冗余設計,要認識到很有可能在「雲」中的伺服器只是普通的伺服器,微軟Azure雲平臺副總裁Amitabh Srivistava說,「很有可能伺服器會出問題,因此,你必須在開發雲應用時考慮冗余。 」

開發雲應用時還必須考慮到Web應用的無狀態特性(無狀態性是指用戶端和伺服器端不必保存對方的詳細資訊,伺服器只需要處理當前請求,而不必瞭解所有的請求歷史—編者注),Srivistava說,「如果你的程式要求保留狀態資訊, 程式在運行過程中肯定會出問題。 雲計算的模式是,如果什麼地方出了問題就終止它,然後另外再啟動一個程式。 只有保證每個應用程式的運行都是相對獨立的,也就是狀態無關,才能達到這一目標。 」

Srivistava進一步解釋說,例如,在雲中沒有本地磁片這個概念,也沒有註冊,在無狀態的應用中,這些參數都要被封裝起來打包在調用的參數中。

Sun公司Tucker提醒說:「無狀態保證了應用程式簡單,但是,要開發出真正有趣而且好用的應用又需要一些狀態資訊,比如我們必須保存使用者的資訊以免要求使用者不停地登錄, 這就是為什麼我們仍然需要資料庫或者其他一些什麼東西來保存狀態的原因。 」但是,有部分雲上的應用(如Web的前端)需要根據訪問量動態地進行調節,必須是無狀態的。

雲應用的另外一個特點是:應用程式的不同部分可能分別運行在雲的不同地方。 例如,一個應用程式的表現層可能運行在Facebook,而其存儲部分可能運行在亞馬遜的彈性存儲服務(S3)上,其應用程式的邏輯部分又可能運行在另外一個完全不同的地方。

「而以前程式師開發的程式都運行在自己的伺服器上。 」 Tucker說,「這就意味著,開發雲應用時必須重新考慮系統的架構,特別是要考慮雲應用的大規模特性,不僅是使用者數量大,而且計算資源分佈也很分散。 」

Tucker補充說:「也不要把雲應用想得多麼神秘。 其實沒有什麼訣竅,要開發可擴展的雲應用,需要仔細地設計和規劃。 」

不過,雲平臺可以給我們提供一些説明。 在某些情況下,比如使用Google App Engine來開發某些特定的應用時,程式自然就具有了可擴充性,無需開發人員考慮。 有時候,我們可以使用某些設計模式,這些設計模式可以用來為應用程式提供擴展能力。 例如,亞馬遜彈性計算雲(EC2)的Multiple Availability Zones,開發人員在這裡可以把一個應用部署到多個地方運行。

「以前,只有大公司能做到這一點。 」 Kay Kinton公司的發言人說。 EC2有一種稱為彈性IP的功能,它能快速建立一個互聯網位址的映射,把準備發送給失敗的應用實例的請求轉給一個有效的實例。

不同類型的資料庫

在雲應用中,抽象和無狀態在對資料庫的訪問時也同樣適用。 「例如,Azure就給程式師開發人員提供了一種與訪問標準的關聯式資料庫完全不同的方式。 」Benjamin Day諮詢公司總裁Ben Day說,「Azure的儲存引擎也沒有使用關係資料庫,因此以前開發應用時所採用的很多方法在開發雲應用時就行不通了。 」

他還以關聯式資料庫中的預存程序為例來說明,在關聯式資料庫中,查詢邏輯與實際的資料位置很近,程式設計者可以明確知道資料在哪裡、保存在哪些設備上,而在Azure雲中,這個前提不再存在。

「雲應用在訪問資料庫時的困難在於,無法保證你要讀取的資料庫在某一指定的位置或者資料中心或者某一指定的設備上,」Day說,「因此,最終你只能使用最基本的SQL查詢語句,而很多預存程序由於與資料庫的具體類型密切相關而不能使用。 」

另外,Day補充說,Azure的儲存引擎也與微軟規劃中的SQL Server的雲版本SQL資料服務(SQL Data Services)有很大區別,因此,開發人員需要瞭解自己到底是在使用哪個資料庫引擎。 例如,Azure把一個1MB的檔作為一個Blob類型的資料保存,而SQL Server中會把這個檔保存在一張表(table)中。

開發雲應用與普通應用在訪問資料庫時有明顯區別的並不僅僅只有Azure,使用Google App Engine時也有同樣的問題。

Google的App Engine產品經理Pete Koomen介紹說:「Google App Engine不僅對實際的物理硬體進行了抽象,而且對關於設備的所有概念都進行了抽象。 」這保證了開發人員把代碼上傳到Google以後,Google可以把這些代碼和資料庫分開管理。 「因為Google把其中的很多流程都實現了自動化,因此,開發人員必須遵循一定的規則,這些規則與我們以前在傳統的SQL模式下的規則有很大區別。 」

在使用App Engine時,開發人員把那些要長期保存的資料存儲在Google的大表(Big Talbe)。 「大表不是SQL資料庫。 我們之所以使用大表而不用SQL資料庫,原因在於SQL資料庫要支援很多功能(例如Join功能),這使得我們要把一個資料庫放到多台伺服器上運行非常困難。 」

「在使用我們的系統開發雲應用時,我們會提供一個程式設計模型,並從一開始就鼓勵程式師們採用一些反常規的方式,比如,開發人員會在一次預存程序中把資料分散保存在多個位置。 」他說,這樣做的好處是保證應用程式在執行查詢時效率非常高。

Koomen對在雲環境中使用關聯式資料庫持反對態度。 他說:「我們發現在訪問量很大的情況下,關聯式資料庫非常難於管理,為了解決高訪問量帶來的一系列問題,程式師不得不投入大量的時間和精力。 」

必須習慣于變化

諮詢公司Model Metrics曾説明客戶在Salesforce.com和其他一些平臺上部署了雲應用。 它們發現雲應用開發和B/S應用開發的一個主要區別是,「雲上的應用改變要快得多。 」 Model Metrics的CTO John Barnes說,「例如,Salesforce.com一年要出好幾次新的版本,每個新版本中很可能都會有值得一用的新功能和新特性。 」

Barnes建議,「作為一名雲應用的開發人員,你必須在技術上與雲平臺保持一致,必須關注很多技術博客,也要積極參加一些網路研討會。 」

開發人員還應該瞭解不同的設計模式,例如最終一致性(Eventual Consistency,最終一致性是一種一致性的模型,用於並行程式設計,例如分散式共用記憶體和分散式交易。 最終一致性指的是,在一個較長的時間內,如果沒有更新的話,所有的更新都會在系統內部進行傳播,最終保證所有資料的拷貝都是相同的—編者注)。 採用這種設計模式時,如果程式對資料進行了修改,也許要在幾毫秒之後才能在資料庫中反應出來,「這種設計模式帶來的結果是,很可能從資料庫中取出的不是最新的值,」Barnes說,「由於諸如此類的原因, 程式師開發雲應用時程式設計方式會有一些不同。 」

 系統管理變簡單

對程式師而言,並不是說雲只是帶來麻煩,在雲環境中,也有些事情變得簡單了。

Barnes說:「比如,雲提供的利用Web服務來組裝應用程式的松耦合方法就把雲變成了一個相對輕鬆的開發平臺。 」

這保證了開發人員可以把精力集中在創新和業務邏輯上,而不用像以前一樣,要在一些基礎性和輔助性的工作上浪費時間(如要關心作業系統和硬體的配置等問題)。 例如,Salesforce.com的雲開發平臺Force.com就提供了安全、工作流、系統管理和負載均衡方面的功能。

Model Metrics有一個客戶最初決定在微軟的.Net平臺上開發一個大學生管理系統,後來發現如果改在Force.com上開發,其開發成本可能只需要原來的1/3~1/ 4,因為Force.com有很多現存的功能模組可以利用。

兼顧可能的遷移

無論如何,開發者必須牢記開發雲應用與傳統的套裝軟體的區別。 Barnes說,對雲的開發人員而言,還有一個值得留意的是,開發雲應用時要注意不同雲有不同的定價方法。

Salesforce.com開發者市場部副總裁Adam Gross還提醒那些準備在雲平臺上開發應用的開發人員說,需要瞭解他所選擇的平臺提供了哪些功能、有哪些特點,以便為將來的遷移做準備,「 開發人員在開發雲應用的第一天就要考慮到這個問題,應該儘量選擇雲平臺上的那些非專有的技術和功能,以保證有一天能夠順利地從這個平臺遷移到另一個雲平臺。 」

Koomen對此也表示認同,他說:「Google支援流行的Python語言和Django Web框架,這就在一定程度上保證了應用的可攜性。 不僅如此,Google現在正在開發開源的上傳和下載工具,來讓使用者方便地把資料上傳到App Engine中或者把資料從App Engine中下載下來。 」

鏈 接

Windows Azure有望今年年底上市

儘管微軟在Azure的開發進展上與人們的預期有很大差距,但是,微軟顯然正在努力。 3月初,從微軟傳出消息,Azure很有可能會在今年年末發佈。

微軟開發者平台產品管理高級經理Steven Martin日前確認了這一消息,他說有關定價等更詳細的情況也有望在近期有明確的說法。 他透露微軟在3月份舉行的MIX Web開發者大會上將會公佈Azure的一些新功能,其中包括給SQL Data Services增加支援關聯式資料庫的能力。

「關聯式資料庫是很多開發人員非常熟悉的技術,」 Martin說,「很多人掌握關聯式資料庫的相關技術,我們聽到了人們希望保持技術的連續性的回饋。 這從一個側面也反映出未來的應用可能比我們想像得要複雜。 」

目前,Azure還在緊張測試之中,有關的使用者案例還非常少,不過,微軟還是進一步豐富了開發人員和企業可能會用到Azure的一些典型應用場景。 去年秋天,微軟還曾公佈了幾個使用者案例:一個在Azure上開發了ERP系統,一個在Azure上開發了運行Cobol應用的軟體,另有一個在Azure上開發了產品召回系統。

Martin說,開發人員現在如果要將他們原來開發的應用搬到Azure上,還需要重新改寫這些程式,但是,微軟正在加緊工作,設法讓那些標準的Windows Server應用程式可以直接運行在雲上, 就像今天的Azure的應用可以順利地運行在Windows Server上一樣。

「今天,你在Azure上開發的應用程式可以在本地順利地運行,但是反過來還不行。 」他說,比較容易遷移到Azure的應用包括Web services和. Net應用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.