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架构设计很是重要。

相关文章
相关标签/搜索