本文章是由機器翻譯。

深入瞭解 Windows Azure

Windows Azure 網站:以服務形式簡單快速地託管

Bruno Terkaly
Ricardo Villalobos

下載代碼示例

Bruno Terkaly and Ricardo Villalobos
Windows Azure 網站 (WAWS) 是 Microsoft 雲平臺的一個引人注目的功能。WAWS 是在 Windows Azure 平臺即服務 (PaaS) 框架基礎上構建的服務,該框架簡化了與託管雲應用程式相關的部署、管理和可擴充性任務。如果這使您認為 WAWS 只是另一個更重要的託管解決方案,那就錯了。它們的區別在於 WAWS 提供的可擴充性和高可用性的級別、由世界各地的多個資料中心支援以及從 PaaS 元件繼承的容錯移轉機制。此外,Windows Azure 平臺提供很多超出 WAWS 範圍的功能,允許開發人員隨著需求增長增強其應用程式,其中包括對大量資料、標識、移動服務等的支援。

資料中心部署模型

圖 1 中所示的分類顯示了與在公共資料中心中部署 Web 應用程式有關的各種模型。我們可以通過委託給平臺或供應商的層數區分以下術語:基礎結構即服務 (IaaS)、PaaS 和軟體即服務 (SaaS)。

Taxonomy for Cloud Deployment Models
圖 1 雲部署模型的分類

您委託給供應商的層越多,線上部署解決方案就越容易,儘管針對委託的層的自訂級別通常會下降。Windows Azure 提供了 IaaS 和 PaaS 部署模型,這些模型與其他服務結合,使公司可以創建可擴充性強的複雜雲體系結構。那麼,我們應將 WAWS 放置在何處呢?

為什麼您會喜愛 Windows Azure 網站

如前文所述,WAWS 是建立在 Windows Azure PaaS 框架基礎上,這意味著您只需要負責維護部署堆疊的應用程式層和資料層。與 Windows Azure 提供的傳統 PaaS 模型的最大區別在於它大大簡化了一些部署和配置任務。這可能要歸功於基礎 WAWS 的配置過程,基礎 WAWS 基於無狀態的輔助角色、存儲二進位大物件 (BLOB) 和關係資料庫的組合。

圖 2 顯示支援 WAWS 的體系結構。這是為託管 Web 應用程式提供多租戶環境的可靠方法。其工作原理非常簡單:

  1. 用戶端發出託管 HTTP://foo.azurewebsites 的請求。淨。
  2. 該請求穿過 Windows Azure 網路負載平衡器到達相應的部署。
  3. 應用程式要求路由 (ARR) 模組從運行時資料庫獲取有關 foo.com 的資訊,確定哪個 Web 服務器應託管或當前正在託管該網站,然後將請求轉發到相應的伺服器。
  4. 如果正在讀取或寫入資料,則該請求由 Web 服務器處理並在存儲控制器的説明下到達 SQL Server 的特定實例。
  5. 處理該請求後,將回應資訊發回用戶端。

Windows Azure Web Sites Under the Hood
圖 2 深入瞭解 Windows Azure 網站

在每個 Web 服務器內,承載多個 W3WP.exe 進程或網站,它們由監視資源使用方式、錯誤和日誌的特定進程監視。而且,動態 Web 啟動服務負責應用程式檔的網站啟動和停用、配額實施和部署。兩個額外元件提供圖中功能:部署伺服器承載 FTP 和 Web 部署引擎,API 前端則提供用於自動執行操作的介面。

此體系結構可以實現近似即時部署的體驗,在需要時可以向外擴展。

考慮採用 WAWS 有很多原因。其中一個原因是此服務提供對用戶端標記和腳本的強力支援,其中包括內置連接到 SQL Server 和 MySQL 資料庫。這意味著您不必擔心有關實現後端 Web 服務和伺服器邏輯的問題。考慮採用 WAWS 的另一個原因是它可以靈活擴展,以支援最忙和最空閒時段內的 Web 使用者。

因為您僅為所用的資源付費,因此可以在成本不高的情況下提供較快的回應使用者體驗。WAWS 服務還支援連續部署方法,因此您可以使用用戶端上的 Git、GitHub、CodePlex、Bitbucket 或 Team Foundation Server (TFS) 直接從原始程式碼存儲庫部署。可以即時上載新代碼或不斷與線上存儲庫集成。由於其配置模型,WAWS 服務提供對 WordPress、Joomla!、Drupal、DotNetNuke、Umbraco 等的內置支援。這些範本在 WAWS 庫中分類,包括博客、內容管理、電子商務、論壇和 wiki。

使之變為現實

與簡化問題的任何技術一樣,它也要付出一定代價。例如,WAWS 不支援用於測試的臨時環境,也不支援通過網路隔離將雲應用程式與內部網路(包括 Windows Azure Connect 或 Windows Azure 虛擬網路)橋接。但是,使用者可以選擇使用「服務匯流排中繼」服務跨越與公司資源的鴻溝。此外,您不能在部署期間對計算實例運行遠端桌面或執行啟動任務。即使這樣,WAWS 仍不失為開發和部署不需要高層次自訂的 Web 應用程式的一個理想解決方案。

動手操作

現在讓我們演練一下簡單教程中的步驟。當我們這樣做時,您將會發現自己無需再學習有關雲的任何新知識了。您可以集中精力創建自己的 Web 應用程式和資料,就像往常一樣。該服務提取了遷移到雲的詳細資訊,使您可以順利進行部署。您甚至可以編寫在 1996 年生成的相同典型 ASP 代碼並在 WAWS 中運行它。

我們將使用 SQL Server 作為後端創建簡單實用的 ASP.NET MVC 4 應用程式,通過它來認識 WAWS 服務的基本元素。這個簡單的應用程式將支援創建、讀取、更新和刪除 (CRUD) 操作,幾乎不需要編寫任何代碼。配置 WAWS 並生成 ASP.NET MVC 4 應用程式後,我們將使用 Visual Studio 2012 中的「Web 部署」來部署它。唯一的開支是 SQL Database - 在 WAWS 內運行 ASP.NET MVC 4 應用程式是免費的。您可以無限期免費運行多達 10 個網站。

啟動 Visual Studio 並創建 MVC 專案

要開始操作,請以管理員身份打開 Visual Studio 2012 並按一下「檔」|「新建」|「專案」。從「已安裝的範本」選擇「Web」,然後選擇「ASP.NET MVC 4 Web 應用程式」。將專案命名為 MVCAzure.Website,然後按一下「確定」(參見圖 3)。接著您需要選擇專案範本。在此處選擇「Internet 應用程式」。視圖引擎將是 Razor。

Creating a New ASP.NET MVC 4 Web Application Project
圖 3 創建新的 ASP.NET MVC 4 Web 應用程式專案

代碼優先

「代碼優先」方法意味著您在 Visual Studio 中創建的類將定義 SQL Server 中的基礎資料表。在 ASP.NET MVC 4 應用程式中,這意味著我們將在 Visual Studio 解決方案資源管理器中在 Models 資料夾下添加一些類別模組,如圖 4 中所示。在類別模組中定義的屬性將成為 SQL Database 表結構。此方法的效率很高,因為您不必擔心將您的 C#/Visual Basic 物件映射為關係資料結構的問題。我們將利用實體框架來簡化這個物件-關係映射。實體框架是一個物件-關係映射器,它使得與關係資料庫交互變得更容易。有了它,您可以對物件執行 CRUD 操作而無需編寫複雜的 SQL 語句。

Adding a Class to the Models Folder
圖 4 將類添加到 Models 資料夾

首先請從解決方案資源管理器中選擇 Models 資料夾。從「專案」功能表中選擇「添加類」。將該類命名為 Person。將以下屬性粘貼到 Person 類(這些屬性將成為 SQL Server 中 Person 表的列):

public class Person
{
  public int PersonID { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

ASP.NET MVC 4 應用程式需要一個控制器類來作為視圖和模型之間的橋樑。您可以將視圖視為使用者介面,將模型視為資料。添加控制器後,Visual Studio 自動生成所需的視圖類。

不過在添加控制器類前,您需要生成解決方案以便該專案添加在後續步驟中所需的相應類型資訊。從「生成」功能表選擇「生成解決方案」。在解決方案資源管理器中,您可以按右鍵 Controllers 資料夾,然後選擇「添加」|「控制器」。將顯示圖 5 中所示的「添加控制器」對話方塊,您將需要使用以下值設置基架選項:

  1. 在「範本」下拉清單中,選擇「具有讀/寫操作和視圖的 MVC 控制器,使用實體框架」選項。
  2. 在「模型類」下拉清單中,選擇 Person 類。
  3. 在「資料上下文類」清單中,選擇「<新建資料上下文...>」。在顯示的對話方塊中,將名稱設置為 Person­CoNtext,然後按一下「確定」。
  4. 在「視圖」下拉清單中,確保選擇了 Razor。
  5. 按一下「添加」以完成此過程。

Adding an MVC Controller Class
圖 5 添加 MVC 控制器類

將控制器添加到專案將生成所有所需的 Web 基架,因此可以針對 SQL Server 資料庫執行 CRUD 操作,這會導致添加幾個檔(如圖 6 中所示)。如果您打開 PersonController 類,將可以查看支援「創建」、「編輯」、「刪除」和「列出」操作的所有操作方法。

圖 6 添加的檔

Controller 資料夾 PersonController.cs
Models 資料夾

Person.cs

PersonCoNtext.cs

Views/Person 資料夾

Create.cshtml

Delete.cshtml

Details.cshtml

Edit.cshtml

Index.cshtml

下一步 — — 部署

如前文所述,您可以使用連續傳遞框架(如 Git 或 TFS)或簡單工具(如 FTP 或「Web 部署」)來部署網站。在本文中,我們將使用 Visual Studio 中的「Web 部署」,但是您可以在 Windows Azure 培訓包 (bit.ly/Wb0EKZ) 中瞭解有關其他部署方法的資訊。

第一步是登錄到 Windows Azure 監管中心。為此,請在 bit.ly/azuretestdrive 上註冊以獲得 90 天的試用期。設置您的帳戶後,登錄到此 URL:manage.windowsazure.com。然後按一下瀏覽器視窗左側的「網站」連結。接著,按一下「新建」|「計算」|「網站」|「快速建立」,鍵入所需的 URL,如圖 7 中所示。我們使用了 msdnmagazine,這意味著我們的網站位於 HTTP://msdnmagazine.azurewebsites.net。您還應選擇一個區域。

Quick Provisioning of a Windows Azure Web Site Deployment
圖 7 Windows Azure 網站部署的快速配置

此時,您的網站幾乎可以部署內容了。完成配置過程所需的時間很短。當顯示「正在運行」狀態時,您可以按一下該網站名稱並開始管理它。門戶上還有一個儀表板,它顯示 CPU 時間、請求、輸出資料量、輸入資料量和 HTTP 伺服器錯誤等資訊。

部署應用程式的關鍵步驟是獲取發佈設定檔,該檔包含 Visual Studio 將用於執行部署的設置。根據您所用的瀏覽器,您也許可以下載發佈設定檔。您應在本地保存一個副本,供以後在 Visual Studio 中使用它。

配置資料庫伺服器

在使 ASP.NET MVC 4 應用程式投入運行前,您需要如圖 8 中所示設定資料庫。您應該記得,此專案使用的是「實體框架代碼優先」模式,這意味著您不必擔心創建和初始化關係資料結構通常所需的所有資料管理命令問題。實體框架將處理此類問題。

Adding a Server to Host SQL Database
圖 8 將伺服器添加到主機 SQL Database

按一下「添加」時,系統將要求您提供登錄名和密碼,以及希望您的 Windows Azure SQL Database 部署所在的區域。強烈建議您選擇在其中運行 WAWS 的同一資料中心,以最大限度減小延遲時間和避免頻寬費用。在我們的示例中,登錄名為 DBAdministrator。如果您以後要遠端進行操作或需要生成連接字串,這可能很重要。還要注意為您配置了伺服器名稱(示例中為 ccek4yihqf)。您可以按一下該伺服器名稱以從門戶獲取更多詳細資訊(參見圖 9)。

圖 9 伺服器詳細資訊

伺服器名稱 ccek4yihqf
伺服器狀態 已啟動
管理員登錄名 DBAdministrator
URL HTTPs://ccek4yihqf.database.windows.淨額

此處的一個重要目標是保護您的資料庫伺服器資訊,只允許特定的 IP 位址建立入站連接。按一下螢幕頂部的「配置」。您將看到當前的 IP 位址,您可以使用它創建一個規則並直接從該 IP 位址連接到伺服器。

從 Visual Studio 執行 Web 部署

我們現在可以部署此專案並同時在剛剛配置的伺服器上創建資料庫,以完成此專案。返回 Visual Studio 並選擇「視圖」|「解決方案資源管理器」。按右鍵 MVC­Azure.WebSite 並選擇「發佈」。將顯示「發佈 Web」對話方塊。此過程通過嚮導來完成,其中第一步是將發佈設定檔載入到 Visual Studio,這樣您可以大大簡化部署過程。您將執行幾個步驟,用於為 ASP.NET MVC 4 應用程式指定發佈設定檔的詳細資訊,提供有關您要如何在 Microsoft 資料中心內部署應用程式的資訊,其中包括 Windows Azure SQL Database 伺服器的目標 URL 和位置。

您可以通過以下方式指定 ASP.NET MVC 4 應用程式將使用的 Windows Azure SQL Database 伺服器:按一下對話方塊左側的「設置」,然後按一下 PersonCoNtext 旁邊的省略號,如圖 10 中所示。

Configuring the Database Connection
圖 10 設定資料庫連接

現在您將需要使用在創建資料庫伺服器時從門戶收到的資訊。在我們的示例中,伺服器為 tcp:siqxqgihiy.database.windows。net,如圖 11 中所示。請注意,我們在伺服器名稱前面追加了 tcp。您還需要輸入管理員名稱(我們在前面的步驟中輸入了 DBAdministrator)和密碼。

Connecting to the Server and Creating the Database
圖 11 連接到伺服器並創建資料庫

按一下「確定」後,會在您輸入的伺服器上實際創建 SQL Database。系統將要求您確認此步驟。創建資料庫後,您可以從「發佈 Web 應用程式」對話方塊選擇「發佈」。要確切查看部署期間發生了什麼事件,可以在 Visual Studio 中選擇「視圖」|「輸出」視窗。

現在整個應用程式就完成了,您可以在 msdnmagazine.azurewebsites.net/Person 上查看我們的版本。請記住我們幾乎不需要編寫任何代碼 - 只需要幾分鐘就可以完成必要的修改工作。

部署後幹些什麼?

部署應用程式後,可以輕鬆執行監視、擴展或升級網站等任務。首選方法是使用 Windows Azure 門戶,該門戶提供可從多個設備訪問的便於使用的儀表板。從 Windows Azure SDK 版本 1.8 開始,使用 Windows PowerShell Cmdlet 或直接進行具象狀態傳輸 (REST) API 呼叫也可以自動執行一些任務,其中包括管理連接字串和應用程式設定、更改實例數或下載最新日誌。

總結

WAWS 為您提供了幾乎可以即時部署 Web 應用程式的一個方法 - 需要很少或無需雲經驗。隨著需求的增加,您可以加入 Windows Azure 雲技術的其他方面,如緩存、服務匯流排、存儲和其他增值服務。由 Windows Azure PaaS 元件提供支援,沒有比這更簡單的方法來在雲中託管可擴展、高度可用的 Web 應用程式了。通過將這些功能與預置的框架(如 WordPress、Drupal、DotNetNuke 和 Umbraco)結合使用,開發人員可以專心致力於構建豐富的 Web 應用程式和資料存儲庫,而將基礎結構任務委託給 Windows Azure 平臺來執行。

Bruno Terkaly* 是 Microsoft 的開發推廣人員。他的知識深度來源於多年來相關領域以及使用大量平臺、語言、框架、SDK、庫和 API 編寫代碼的經驗。他不辭辛苦,就有關構建基於雲的應用程式(特別是使用 Windows Azure 平臺)編寫代碼、發佈博客並給予現場演示。*

Ricardo Villalobos 是一名資深的軟體設計師,具有 15 年為供應鏈管理行業設計和創建應用程式的經驗。他持有幾個不同的技術證書,並獲得了達拉斯大學商務管理專業的碩士學位。他是 Microsoft 的 Windows Azure CSV 孵化團隊的雲架構師。

衷心感謝以下技術專家對本文的審閱:近紅外 Mashkowski