當我向HTTP://www.aliyun.com/zixun/aggregation/7155.html">開發人員談及將應用程式作為產品開發與作為服務開發之間的區別時,他們紛紛投來異樣的目光。 您在本地編寫的應用程式將寫入您所購買且已在您個人所有的電腦硬體上安裝和配置的軟體中。 而在雲中編寫的應用程式將寫入一系列可供您和公眾使用的服務中。 現在我們來探討一下這兩者之間有何不同。
當您為本機伺服器編寫應用程式時,您對此硬體和軟體集滿懷期待。 您期望每次登錄都能成功連接。 您掌控著此伺服器上運行的應用程式,因此您期望其性能水準保持不變。 您瞭解並掌控著資料的資訊安全內容。 您親手配置軟體和硬體,因此您期望在出現問題時,只需看一下事件記錄便可大概猜出原因。 在大多數情況下,您對您個人所有、管理和維護的伺服器上應用程式的行為瞭若指掌。 而另一方面,您也清楚,如果超出此伺服器的計算能力,則必須轉向其他能力更強的系統組態。 相反,如果事實證明伺服器的計算能力比應用程式實際需要的大,則說明您浪費了計算能力,需要將其他工作負荷遷移到該伺服器上,以便更好地利用您所擁有的計算能力。 最後,如果容量全部得到利用並開始運行,則需要維護硬體和軟體。 由於這些原因 - 當然這並非全部原因 - 當您希望降低整體計算成本時,您可能會考慮雲計算。
現在,您決定遷移應用程式或在雲中構建應用程式。 您在雲中具有的功能與在本地相同,例如:身份驗證服務、應用程式服務(緩存、消息傳遞等)、資料庫服務和可用性服務等等。 與此同時,您還擁有巨大的新機遇,例如,您可以按需擴展,並享受硬體商品即付即用帶來的成本效益。 如果需要,您還可按照類似于編寫本地應用程式的方式將這些應用程式作為服務開發,這在大多數情況下均行之有效。
但是,構建強大的雲應用程式還得多花點功夫。
要最大限度地提高為 Windows Azure 編寫的雲應用程式的性能、可擴充性和可管理性,需精心構造和編碼,以利用雲平臺的獨特功能。 例如:
•在編碼過程中始終捕獲應用程式遠端控制資訊,以便主動即時回應應用程式行為。
•利用計算和存儲節點的擴展功能擴大規模,或利用多個資料中心提高可用性。 如果將應用程式設計為在部署新「規模單元」(計算、存儲和資料庫組)時增長,即可配置計畫內和計畫外的增長。
•在確保應用程式可繼續運行的前提下,容許任何單個元件故障。 世界上最出色的雲應用程式可以做到這一點,但還需要您在編寫應用程式時牢記以下理念,即能夠預測潛在元件故障並在不對最終使用者造成嚴重影響的情況下即時回應停機情況。
•盡可能利用緩存來檢索資料,並通過在多個單獨的資料庫(碎片)之間分散處理資料庫請求來支援可擴充性,並最大程度地提高性能。
為了説明大家快速開始學習如何編寫強大的雲應用程式,本博客將介紹七個可複用雲元件,並提供示例代碼和文檔。 這些元件幾乎適用于在 Microsoft Windows Azure 平臺上開發的任何 PaaS 應用程式。
我們做了什麼: AzureCAT(Microsoft 客戶工程諮詢團隊)參與了成百上千個 Azure PaaS 應用程式的設計、構建和部署工作。 我們從中受益良多,並決定編寫和分享以下七個可複用元件,讓其他人明白我們所說的作為服務編寫是什麼意思。 我們將這些元件作為一整個端到端應用程式來編寫,確保它們能夠無縫工作。 這個應用程式本身相當簡單,即讓使用者註冊、登錄併發表評論。 它已經過需要添加遙測功能和分區代碼規模的構建和測試,以保證良好性能。
編寫 PaaS 應用程式的人都可從這七個可複用元件的示例代碼和文檔中受益。 這些元件包括:
1.配置 – 設定檔是實現應用程式無縫管理的關鍵
2.記錄 - 記錄應用程式、事件和性能遙測
3.資料訪問 – 這實際上是兩個元件:a) 資料庫命令和連接重試邏輯;b) 使用自訂雜湊演算法進行分區
4.緩存 – 將使用者資料寫入緩存/從緩存中讀取使用者資料
5.調度 - 即時收集遙測資料並將其移至 SQL Azure 中自訂 ops 資料庫的後臺worker role
6.報告 – 報告 SQL Azure ops 資料庫中收集的遙測
7.應用程式要求路由 (ARR) – 用於將使用者路由到多個託管服務(應用程式工作負荷平衡)的 IIS 技術
以下是此材料的連結 – 應用程式代碼已發佈到 MSDN 代碼庫:
•Windows Azure 中的雲服務基礎:
•HTTP://code.msdn.microsoft.com/Cloud-Fundamentals-in-1a3ab1bd
總結:本博客僅介紹了基本資訊,之後將發佈另外幾篇博客,更詳細地介紹各個元件。 如果您閱讀本博客後認識到編寫強大的雲應用程式需要編寫代碼,以充分利用雲服務,本博客便達到目的了。 這些示例代碼是真實存在的且可正常工作(即共同發揮作用)。 這些示例代碼源自真實世界中的實現,並已經過大規模測試。