Azure PaaS – Cloud Service服务架构及快速调试

开发Windows Azure云服务(Cloud Service)过程中,难免会出现一些代码异常或者部署失败,对于Azure开发者,有必要了解一下Azure云服务在云端的实际服务架构,并借此来调试和诊断Azure云服务,快速找出已有云服务中存在或隐藏的问题。本篇将覆盖以下两方面的内容: 1.了解Azure云服务的服务架构 2.了解云服务的快速调试方法   博主有幸在2013年的微软TechED会议(北京-上海) 上对本主题进行了讲解,本篇在之前的研究基础上,进行了部分更新。   1.  了解Azure云服务的服务架构 Microsoft Azure托管服务(Cloud Service)的启动和运行过程如图所示。                   „ RDFE:Azure平台对外统一接口。图中步骤1表示开发者发起操作请求到RDFE,如上传发布包、更新托管服务配置、管理证书等。操作可以通过Azure管理门户来完成,也可以通过Visual Studio、PowerShell等工具完成。FFE模块将外部请求转成内部命令,模块查找到目标计算机群,开始与集群总控通信。 „ Fabric Controller:集群总控,维护和监控数据中心的所有计算资源。集群总控寻找可用的计算资源(CPU、Memory等),并与相应的Host Agent进行通信,将发布包和配置文件等信息复制到目标宿主服务器。 „ Host Agent:存在于Host OS中,负责准备Guest OS,并与Guest OS通信(WaAppAgent),10分钟无信号即重启Guest OS。 „ WaAppAgent:安装、配置、更新WindowsAzureGuestAgent。 „ WindowsAzureGuestAgent:配置Guest OS,包括防火墙、本地缓存、发布包、执行账号等;与集群总控Fabric Controller保持心跳同步;启动WaHostBootstrapper。 „ WaHostBootstrapper:读取配置,执行启动任务和部署发布包,监测所有子进程并汇报StatusCheck结果。 „ IISConfigurator:适用于SDK 1.2以上的发布包部署(非HWC模式),负责安装IIS并清空IIS下默认的Application Pool,待Startup Task执行完后,IISConfigurator完成网站部署和配置等。 „ Startup Tasks:预启动任务,包括用户自定义的依赖任务和角色需要的预装服务,以三种模式运行。对于background模式的预启动任务,被启动之后,WaHostBootstrapper不等待其返回值直接进入下一个Startup Task或后续工作流。其他两种模式的预启动任务,WaHostBootstrapper需要等待其返回值,确认预启动任务正确执行后,进入下一个流程。 „ WaWorkerHost:Worker Role程序的宿主进程,所有Worker Role相关的DLL和EntryPoint代码运行于此。 „ WaWebHost:适用于SDK 1.2等HWC(Hostable…


Azure PaaS 快速实践 2 – 设计实现第一个集成应用(托管服务/预启动任务)

本节中,我们会设计并实现第一个基于Azure的云服务,该实现中会使用到Azure公有云中的存储服务(Azure Storage),关于 Azure Storage详情,请了解:http://www.windowsazure.cn/zh-cn/manage/services/storage/what-is-a-storage-account/ Windows Azure Storage(WAS)存储提供持久的、可持续的、易扩展的存储空间,并且提供基于Internet的多种访问方式。包含3种类型的存储服务: „ 二进制大对象(Binary Large Object(Blob)Storage)服务,主要用于存储文件或二进制数据,用于文件存储分发、流媒体库存储、数据备份等。存储的文件提供对外的HTTP(s)访问地址。 „ 队列(Queue Storage)服务,用于存储实时消息数据,确保应用程序之间可靠的、持久的消息传递。 „ 表(Table Storage)服务,用于可被查询的动态结构化数据存储。与SQL Server等传统数据库中数据表不同的是,同一个Table Storage表中的数据实体可以拥有不同的数据结构,如学生成绩信息和客户联系信息,而SQL Server中同一个数据表内不可能同时含有学生成绩信息和客户联系信息。 在本节实践中,你需要使用你的Azure Storage存储来实现数据交互和存储,因此在本实践之前,请参考以下步骤创建一个属于你的Azure Storage帐号,并查看到帐号名和密码。 如何创建你的Azure Storage存储:http://www.windowsazure.cn/zh-cn/manage/services/storage/how-to-create-a-storage-account/ 如何查看你的存储帐号及密码:http://www.windowsazure.cn/zh-cn/manage/services/storage/how-to-manage-a-storage-account/#regeneratestoragekeys 进一步单独了解WAS提供的编程接口和访问方式,请参考: 如何编程访问Blob存储:http://www.windowsazure.cn/zh-cn/develop/net/how-to-guides/blob-storage-v17/ 如何编程访问Table存储:http://www.windowsazure.cn/zh-cn/develop/net/how-to-guides/table-services/ 如何编程访问队列存储:http://www.windowsazure.cn/zh-cn/develop/net/how-to-guides/queue-service/   提示:开发者可以使用Global Windows Azure中的WAS帐号或者China Azure中的WAS帐号来完成本实践,具体WAS连接字符串稍有不同,如下: 如开发者使用China Azure时,WAS连接字符串类似以下样例: CloudStorageAccount storageAccount = CloudStorageAccount.Parse(“BlobEndpoint=https://portalvhds88zyhq6kndn2p.blob.core.chinacloudapi.cn/;AccountName=portalvhds88zyhq6kndn2p;AccountKey=tbLt4dmW0vJFFYobuBvpN2RB6On63XjwKDkoxD/v7Hg1vkeS3y3FJ+BK0MT6Q1MYXCWbKOJSM8+9mUrHUzrLDg==”); 如开发者使用Global Windows Azure,WAS连接字符串类似以下样例: CloudStorageAccount storageAccount = CloudStorageAccount.Parse.(“DefaultEndpointsProtocol=https;AccountName=mytest3939393;AccountKey=sZjfJiETVsXC****&&$$$m4yfjdajf*****%%U3fvxVHqGmJhIcaVaX3g==”);   除此之外,开发者若单独进行WAS实践,可以使用本地模拟器中的WAS帐号进行测试,连接方式为:CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;   步骤六:深入集成应用 这一步,我们将尝试一个较综合的集成应用,架构图如下:  …