《Windows Azure Platform 系列文章目錄》html
本文是對Windows Azure Platform (六) Windows Azure應用程序運行環境內容的補充。前端
咱們知道,在Windows Azure PaaS,有一個很是重要的概念,就是Web Role和Worker Role。windows
在建立Azure Cloud Service的時候,會提示以下的選項:後端
-Web Role是響應客戶端的HTTP請求緩存
-Worker Role則是在後臺執行的應用程序,概念上相似於Windows Service。服務器
-Web Role能夠經過Azure Storage中的Queue,向Worker Role發送隊列消息 (Queue.AddMessage()),以便讓Worker Role在後端執行本身須要的邏輯。架構
注意:上圖中Worker Role分爲三類。本章會介紹PaaS Worker Role。異步
有關Cache Worker Role的詳細信息,請參考:分佈式
Windows Azure Cloud Service (42) 使用Azure In-Role Cache緩存(1)Co-located Role函數
Windows Azure Cloud Service (43) 使用Azure In-Role Cache緩存(2)Dedicated Role
有關Worker Role with Service Bus Queue,請參考:
Windows Azure Service Bus (2) 隊列(Queue)入門
Windows Azure Service Bus (3) 隊列(Queue) 使用VS2013開發Service Bus Queue
爲何微軟要有Web Role/Worker Role?它的好處在哪裏?在這裏我舉個例子您就能明白,好比咱們有一個信息管理系統,須要上傳Excel文檔來進行解析和處理,從軟件設計的角度來講有2種方法來解決
(1)在ASP.NET應用程序裏新建個upload control,在upload control裏面寫函數:一旦Excel文件上傳完畢,則在.cs文件執行對於Excel的處理工做。
但這樣會有一個缺點,若是Excel文件裏包含的內容很是大的話,須要時間來處理這些內容,因此前臺的ASP.NET的頁面會停滯或者無響應。雖然咱們也能夠經過增長progressbar或者loading圖片來加強用戶的體驗,可是從軟件設計上來講不是最好的。
(2)前端仍是用原來的處理方式,使用upload control。服務器端增長一個Windows Service,時序的查詢某一個文件夾,一旦發現前端頁面上傳了一個Excel文件,則Windows Service執行處理Excel的工做。這樣前端的頁面會及時的響應而且獲得更好的用戶體驗。
可是這仍是有一個缺陷,前端的頁面和windows service是一對一的關係,若是附件上傳的數量很大的話會出現Windows Service來不及處理的狀況。
(3)有了Worker Role,咱們可讓一個ASP.NET頁面後端有多個Worker Role來進行分佈式的計算,是一對多的關係,可以有效的利用雲上的計算資源,Worker Role能夠處理高負載的數據訪問。
這樣的架構好處有兩點:
1.異步處理,Web Role只響應客戶端的HTTP請求,進行快速的響應。而Worker Role在後端處理Web Role發送過來的消息(Queue),二者是鬆耦合的。
在傳統的Web應用中,若是咱們把複雜的處理邏輯寫在ASPX頁面,則ASPX頁面可能會停滯,形成的用戶體驗很差。Windows Azure PaaS使用Web Role和Worker Role,Web Role只關注於響應客戶端的HTTP請求;而Worker Role能夠在後端處理業務邏輯,進行異步處理。
2.Web Role和Worker Role的關係是多對多的,好比我能夠在Web Role的配置中,設置Instance count爲10。以下圖:
在Worker Role的配置中,設置Instance count爲3
這種架構就比如一個餐廳,裏面有10個服務員(Web Role)和3個廚師(Worker Role)。
- 服務員(Web Role)只負責招待客人(響應客戶端請求),並將客人的點菜信息經過隊列消息交給廚房(Queue.AddMessage())
- 廚師(Worker Role)讀取點菜信息(Queue.GetMessage),隨後負責燒菜作飯(進行後端邏輯),當飯菜準備完畢後,則刪除點菜信息。
- 若是前端壓力過大(客戶端請求過多),則Web Role能夠橫向擴展
- 若是後端壓力過大(後端邏輯處理過多),則Worker Role也能夠橫向擴展
- 這種鬆耦合,多對多的關係很是適合企業級應用架構
能夠看到,Web Role和Worker Role的進行通訊的重要途徑是經過Queue,瞭解Queue對於Azure PaaS架構設計很是重要。