Windows Azure 计算服务中的服务角色

       通常在构建一个大型应用时,我们需要对应用进行面向服务和模块化设计,对应用的层次和功能进行划分。在应用部署时,我们会根据负载的类型和多少为不同层次配置相应的服务器硬件,然后在不同的服务器上安装对应的软件环境如Web服务器软件、中间件以及数据库软件等,最后再部署应用程序代码极其配置。在Windows Azure中,应用服务器也遵循类似设计原则。但是为了简化应用服务器的部署,Windows Azure根据应用功能和各自运行特点提供了不同种类的运行环境模版,这些不同的运行环境模版就对应Windows Azure中不同的计算角色。用户Windows Azure服务角色是在其对应服务模型中定义的,每个服务可以根据实际需要的定义一个或多个服务角色。每个服务角色的定义中会包含角色类型、虚拟机大小、通信端点、本地存储信息等。从开发人员角度,我们可以认为Windows Azure的服务角色由服务定义、服务配置、服务代码组成。Windows Azure在刚发布时提供了Web Role和Worker Role,后来为了降低旧应用迁移的难度又增加了第三种角色VM Role。对VM Role来说,它的服务代码是通过包含应用的VHD镜像来体现的。

        为了简化开发人员开发Windows Azure应用,在Visual Studio中安装相应的开发插件之后,新建项目模版中的云计算选项下会出现不同角色的模版,如下图所示


下面进行详细介绍

1、ASP.NET Web Role。这个角色模版主要用来创建一个基于ASP.NET Web的应用。

2、ASP.NET MVC Web Role。这个角色模版用来创建一个ASP.NET MVC 的 Web 程序。

3、WCF Service Web Role。这个角色用来创建一个托管的WCF服务。

4、Worker Role。这个角色模版用来创建一个基于Worker Role 的应用。如果要开发的应用服务不适合前面的角色模版,那么Worker Role一般可以实现这个需求。因为Worker Role在设计上非常灵活,开发人员几乎可以在这里编写任何代码。

       上面列出的四种角色模版从本质上看都是针对Web Role的模版,但是通过分类让应用开发变得更为简单。通过这些角色模版开发完成的应用程序最终都会做为Web Role 实例运行在Windows Azure环境中。

角色实例

       在面向对象编程中,开发人员通过类规定了对象所需要的基本属性和动作要求,这是一种静态的描述。然后在应用程序运行过程中再根据类生成一个个具体的动态对象。一个类可以根据需要生成一个或多个对象。应用程序具体功能都是由不同对象之间相互痛心和调用方法来实现的。

       在概念理解上,我们可以把服务角色和实例类比面向面向对象编程中类和对象的关系。如果把角色看成是一个运行环境的模版或类型,那么角色实例就是根据这个模版生成的实例。用户的应用服务最终是以一个个角色实例运行在Windows Azure之上的,而用户的请求都是交由这些角色实例来处理完成的。Windows Azure 中的应用服务可以包含一个或多个服务角色,每个角色可以有一个或多个实例。

       Windows Azure 中的角色实例是用户服务的独立运行单元。虽然这些角色实例与底层虚拟机没有直接绑定的关系,但是在Windows Azure目前的实现中,无论是Web Role、Worker Role还是VM Role,他们的每一个实例都对应一个具体的虚拟机,也就是说,实例与虚拟机具有一一对应的关系。因此,一个角色实例目前就是一个部署了用户服务代码、服务配置和本地数据的虚拟机。

      每个发布的服务都会有一个映射到*.cloudapp.net域名的虚拟IP地址,然后由负载均衡器把用户请求分发给不同的实例处理。那负载均衡器是如何把外部用户访问分发到每个实例的呢?实际上每个服务实例都有自己的IP地址,这个IP地址称为直接IP地址,这是私有的IP地址,也就是说,window azure数据中心之外是访问不到这个地址的。它们的作用主要在于内部通信用,包括不同实例之间的通信、负载均衡器和实例之间通信等。负载均衡器的分发规则就是主要基于虚拟的IP地址和直接IP地址之间的映射关系来进行的。如果服务代码需要具体的地址,则可以通过专用的编程接口来获取。

       既然实例与虚拟机存在一一对应的关系,因此实例大小也就是虚拟机的大小。如下面设置就指定WebRole1使用超大规模实例即虚拟机配置。

       <webRole name="webRole1" vmsize="ExtraLarge">

角色的生命周期

      角色实例在Window Azure上有自己的生命周期,其主要可以分为三个阶段:从启动到运行再到停止。无论是Web Role 还是Worker Role,他们在实现上都继承了共同的基类RoleEntryPoint.

        RoleEntryPoint有三个与状态有关的方法。

        1、public virtual bool OnStart();

        这个方法由Windows Azure 在初始化角色实例时调用,如果初始化成功则返回True,否则返回False。开发人员可以覆盖这个方法,把自己初始化代码添加进去。

        2、public virtual void Run();

        如果这个角色实例成功初始化了,那么Windows Azure 将调用这个方法来启动运行角色实例。该方法中应该实现一个长时间的运行现成来实现角色的操作。默认实现是无线循环的睡眠操作。角色实例在这个方法运行过程中的状态为“就绪”,也就是说,可以正常处理请求。如果角色执行从Run()方法返回了,那么这个实例将被Windows Azure回收。

       3、public virtual void OnStop();

       这个方法由Windows Azure在停止实例前调用。如果在停止前需要做一些清理工作,那么开发人员可以覆盖这个方法,把自己的清理代码放在这个方法中。这个方法必须在一定时间内(目前是30秒)返回,否则Windows Azure将强行停止实例。对于ASP.NET的Web Role来说,这些清理代码也可以写在ASP.NET的Application()方法中,这个方法在OnStop()方法之前调用。

发布了93 篇原创文章 · 获赞 58 · 访问量 19万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章