Windows Azure Cloud Service (11) PaaS之Web Role, Worker Role(上)

  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架構設計很是重要。

相關文章
相關標籤/搜索