zoukankan      html  css  js  c++  java
  • 第三章 设计程序架构 之 设计实现Windows Azure 角色生命周期

    1. 概述

      Windows Azure 是微软的云计算平台。用于 在微软数据中心 通过全局网络 生成、发布和管理应用程序。

      本章内容包括 startup tasks 以及  实现 Start, Run 和 Stop 事件。

    2. 主要内容

      2.1 Windows Azure

        ① 提供 PaaS 和 IaaS 两种服务。

        PaaS 提供一个实际的计算平台,包括 操作系统、程序执行环境、数据库 和 web服务器。

        IaaS 是提供虚拟的机器。

        ② Windows Azure 有三种类型的解决方案:虚拟机器、web站点 和 云服务。

        虚拟机器:使用方式类似本地的机器,可以进行开发测试和部署。

        web站点:单纯的web站点寄宿。可以方便的部署和运行ASP.NET MVC4站点。

        云服务:直接的PaaS模式,是Windows Azure的初始发布模型。

      2.2 Startup tasks

        2.2.1 Windows Azure中有三种角色:Web、Worker 和 VM。

          Web一般用于执行IIS。Worker一般用于执行中间层的程序。而VM角色可以完全的访问虚拟机。

        2.2.2 通过 Startup tasks,可以 注册COM组件、安装组件或者设置注册key。Startup tasks仅对Web和Worker角色可用。

          Startup tasks 在 Task元素中定义,Task元素是 ServiceDefinition.csdef文件中的Startup元素的一个节点。

          一个标准的Startup tasks是一个命令行程序或者一个批处理文件。

        2.2.3 当一个角色启动,Windows Azure中,后续的过程如下:

          ① 实例被标记为Starting,不再接收通知。

          ② Startup tasks 根据taskType属性开始执行。。(简单任务以同步方式,后台和前台任务以异步方式。)

          ③ 角色寄宿过程启动,站点在iis中被创建。

          ④ 调用 Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart 方法。

          ⑤ 实例被标记为Reader并开始接收通知。

          ⑥ 调用  Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run 方法。

        2.2.4  AppCmd.exe命令行工具用于在Windows Azure中,启动时管理IIS设置。

        2.2.5 Startup tasks 可以被执行多次。忘记配置AppCmd.exe工具会导致运行时错误。

        2.2.6 可以把一个任务标记为后台执行。

    <Startup> 
        <Task commandLine="StartupExecWithRetries.exe  
                  &quot;/c:StartupAzureEnableWarmup.cmd&quot;  
                  /d:5000 /r:20 /rd:5000 &gt;&gt; c:enablewarmup.cmd.log 
                  2&gt;&gt;&amp;1" 
              executionContext="elevated" taskType="background" /> 
    </Startup>

        2.2.7 Windows Azure 虚拟机是无状态的。

      2.3 实现  Start, Run 和 Stop 事件

         OnStart 方法和 Startup tasks有许多概念上的相似点:

        ① 有相同的超时机制。

        ② 角色被回收时都会被再次执行。

        ③ 都可以配置先于角色处理。

         OnStart 方法和 Startup tasks 的不同之处包括:

        ① Startup tasks 运行在不同的进程中。适用于需要独立运行过程的软件和平台。

        ② 状态信息可以在OnStart方法和Run方法中共享,因为这两个方法在同一个应用程序域中。

        ③ Startup tasks可以被配置为后台或者前台任务,并且可以并发运行。

        当所有配置好的Startup tasks完成后,Window Azure角色开始运行。有三个主要的事件可以重写:OnStart、Run、OnEnd。

    public class WorkerRole : RoleEntryPoint 
    { 
        public override bool OnStart() 
        {  
           try 
           { 
              // Add initialization code here 
           }  
           catch (Exception e)  
           { 
              Trace.WriteLine("Exception during OnStart: " + e.ToString()); 
              // Take other action as needed.  
           }  
           return base.OnStart(); 
        } 
    }
    public override void Run() 
    { 
        try 
        { 
           Trace.WriteLine("WorkerRole entrypoint called", "Information"); 
           while (true)  
           { 
              Thread.Sleep(10000);  
              Trace.WriteLine("Working", "Information"); 
           } 
           // Add code here that runs in the role instance 
        } 
        catch (Exception e)  
        { 
           Trace.WriteLine("Exception during Run: " + e.ToString()); 
           // Take other action as needed.  
        } 
    }
    public override void OnStop() 
    {  
        try 
        { 
           // Add code here that runs when the role instance is to be stopped 
        }  
        catch (Exception e)  
        { 
           Trace.WriteLine("Exception during OnStop: " + e.ToString()); 
           // Take other action as needed.  
        } 
    }

        OnStop方法有5分钟强制限制。确保程序被彻底的清理。

    3. 总结

      ① Windows Azure 是一个基于云的,给公司和开发者提供高度可配置、灵活部署的服务环境。

      ② Azure是无状态的。每次运行之间的数据不能被保存和共享。

      ③ 开发者可以给一个角色一系列Startup tasks去运行。这些Startup tasks可以实现 安装附加软件和第三方工具,修改注册信息以及满足Asp.Net MVC程序的其他需求。 可以使用AppCmd.exe工具去管理这些Startup tasks。

      ④ Startup tasks完成后,OnStart方法就会被调用。可以重载OnStart方法去实现其他功能。记得要返回true,否则将启动失败。

      ⑤ OnStart方法返回后(返回true),Run方法就会被调用。Run方法是void方法,可以重载它和主程序并发执行。

      ⑥ 程序结束前,会调用OnStop方法。这个方法也是一个void方法。用于清理前面两个方法的资源。

  • 相关阅读:
    Integer.highestOneBit(int i)方法的作用与底层实现
    一文搞明白位运算、补码、反码、原码
    Zookeeper如何解决脑裂问题
    Zookeeper请求处理原理分析
    Linux 设备驱动之 UIO 机制
    virtio guest side implementation: PCI, virtio device, virtio net and virtqueue
    DPDK之(八)——vhost库
    Red Hat OpenStack 10的新特性
    探秘DPDK Virtio的不同路径
    2017版:KVM 性能优化之内存优化
  • 原文地址:https://www.cnblogs.com/stone_lv/p/4602938.html
Copyright © 2011-2022 走看看