用户:小朱/沙盒/Microsoft Azure Cloud Service

Microsoft Azure 云端服务 (Cloud Service) 是 Microsoft Azure 最早开始供应的服务之一,它提供了抽象化的运算资源给云端应用程序 (Cloud Application) 使用,开发人员可以部署云端应用程序到 Azure 云端服务,以获取所需的执行环境与运算能力,是一种 PaaS 服务,而它也是 Azure 供应的 PaaS 服务中弹性最大,客制能力最高的服务。

它也是早期Azure虚拟机器所使用的逻辑管理单位,Azure虚拟网络的原型 Azure Connect 服务也是由云端服务所起,因此它被称为 Azure 运算与网络服务的源头也不为过。

架构与开发方法

云端服务一开始的设计是给开发人员部署其云端应用程序为概念,因此设计上较针对开发人员的需求,使得 Azure 虚拟机器服务在推出时就有一些不便性存在,但这是云端服务本身的限制使然。

角色类型

云端服务提供了两种服务角色:

  • Web Role: 用来代管以 HTTP/HTTPS (SSL) 为主的服务,包含网站、Web Service、WCF HTTP Service 或 Web API 等,早期以 Hosted Web Component (HWC) 为主 HTTP 服务,2011年起回归到IIS
  • Worker Role: 用来处理背景工作,它也可以利用 WCF 或 Web API Self-hosting Service 挂用 HTTP 的服务,没有 IIS,因此可用的系统资源比 Web Role 要多。

另外,早期还没有虚拟机器服务时,云端服务有提供另一个角色,称为 VM Role,它可以产生可用远端桌面控制的虚拟机器,是虚拟机器服务的原型实作,后来 VM Role 演化成虚拟机器服务。

开发支援

云端服务由于需要较多的组态设定,因此无法以很简单的方式开发与部署,微软在早期就开始提供 Azure SDK 以及云端服务的模拟器 (包含运算模拟器与储存模拟器,早期名称为 Development Fabric 与 Development Storage,后来定名为 Compute Emulator 与 Storage Emulator),以及 Microsoft Azure Tools for Visual Studio,给 Visual Studio 的开发人员充分的支援。

但随着 Azure 平台的开放程度愈来愈高,PHP [1]node.js [2] 以及 Java [3] 的开发人员也可以使用云端服务来代管其应用程序。

运算资源

云端服务的运算资源是由虚拟机器提供,虚拟机器依照运算能力区分为数种类型 [4],共分为一般性运算能量的 A 类型、经效能提升的 D 类型以及拥有最强运算效能的 G 类型,未来也会推出使用GPU运算的 N 类型。

不过云端服务可用的虚拟机器类型只有 A 类型和 D 类型[5]

A 类型

A 类型是 Azure 一开始就提供的标准虚拟机器类型,使用 AMD 的 CPU 以及传统 SATA 界面的硬盘,提供最标准不需太高运算能量的应用,早期是以五种规格推出,分别是 Extra Small (XS)、Small (S)、Medium (M)、Large (L) 以及 Extra Large (XL) 五种,除了 XS 记忆体使用 0.75GB 记忆体外,其他是以 1.75GB 记忆体,每晋一级就会加倍,可作为衡量运算资源与成本的标准之一。不过在虚拟机器种类愈来愈多的情况下,A 类型也做了扩充,现在除了原有的五类外,还多加了 A5~A7、A8~A11等七种规格。

A5~A7 与 A8~A11 均使用 Intel Xeon E5 系列 CPU,但 A5~A7 的记忆体量比 A2~A4 高;A8~A9 与 A10~A11 规格相同,但 A8~A9 有支援 HPC 的 InfiniBand 网络界面与 RDMA 技术,A10~A11 则无。

规格 CPU核心数 记忆体量 暂存硬盘大小 (SATA) 可用网卡数 可用资料磁盘数 最高IOPS 说明
Standard_A0 1 0.75GB 20GB 1 1 1x500 Extra Small
Standard_A1 1 1.75GB 70GB 1 2 2x500 Small
Standard_A2 2 3.5GB 135GB 1 4 4x500 Medium
Standard_A3 4 7GB 285GB 2 8 8x500 Large
Standard_A4 8 14GB 605GB 4 16 16x500 Extra Large
Standard_A5 2 14GB 135GB 1 4 4x500
Standard_A6 4 28GB 285GB 2 8 8x500
Standard_A7 8 56GB 605GB 4 16 16x500
Standard_A8 8 56GB 382GB 2 16 16x500 支援 InfiniBand 与 RDMA
Standard_A9 16 112GB 382GB 4 16 16x500 支援 InfiniBand 与 RDMA
Standard_A10 8 56GB 382GB 2 16 16x500
Standard_A11 16 112GB 382GB 4 16 16x500

D 类型

D 类型是 Azure 在 2013 年推出的类型,它使用比 A 类型更好的 CPU,并且在实体服务器上使用固态硬盘 (SSD),以加速在本地运算时的 I/O 速度,另外,为满足提升虚拟机器本身的 I/O 量的需求,微软开发了高阶储存体 (Premium Storage) 用来保存虚拟机使用的 VHD (称为 OS Disk),而使用高阶储存体的 D 类型虚拟机器,称为 DS 类型。

规格 CPU核心数 记忆体量 暂存硬盘大小 (SSD) 可用网卡数 可用资料磁盘数 最高IOPS 最高IOPS (DS类型)
Standard_D1
Standard_DS1
1 3.5GB 50GB 1 2 2x500 3,200
Standard_D2
Standard_DS2
2 7GB 100GB 2 4 4x500 6,400
Standard_D3
Standard_DS3
4 14GB 200GB 4 8 8x500 12,800
Standard_D4
Standard_DS4
8 28GB 400GB 8 16 16x500 25,600
Standard_D11
Standard_DS11
2 14GB 100GB 2 4 4x500 6,400
Standard_D12
Standard_DS12
4 28GB 200GB 4 8 8x500 12,800
Standard_D13
Standard_DS13
8 56GB 400GB 8 16 16x500 25,600
Standard_D14
Standard_DS14
16 112GB 800GB 8 32 32x500 50,000

2015年,微软利用新的 Intel Xeon E5-2673 v3 CPU 的服务器组建了 D 类型的第二版,称为 Dv2,可获取 D 类型虚拟机高 35% 的效能。

规格 CPU核心数 记忆体量 暂存硬盘大小 (SSD) 可用网卡数 可用资料磁盘数 最高IOPS 说明
Standard_D1_v2 1 3.5GB 50GB 1 2 2x500
Standard_D2_v2 2 7GB 100GB 2 4 4x500
Standard_D3_v2 4 14GB 200GB 4 8 8x500
Standard_D4_v2 8 28GB 400GB 8 16 16x500
Standard_D5_v2 16 56GB 800GB 8 32 32x500
Standard_D11_v2 2 14GB 100GB 2 4 4x500
Standard_D12_v2 4 28GB 200GB 4 8 8x500
Standard_D13_v2 8 56GB 400GB 8 16 16x500
Standard_D14_v2 16 112GB 800GB 8 32 32x500

操作系统

云端服务提供的虚拟机器都是标准的操作系统虚拟机,其可用操作系统称为客座操作系统 (Guest Operating System, Guest OS),依照操作系统世代不同分为四个版本 (后续 Windows Server 2016 推出时也会新增 5.0 版) [6]

版本 基础操作系统 现行客座操作系统的版本
4.x Windows Server 2012 R2 4.29 (.NET Framework 4.5.2)
3.x Windows Server 2012 3.35 (.NET Framework 4.5.2)
2.x Windows Server 2008 R2 2.48 (.NET Framework 3.5 & 4.5.2)
1.x Windows Server 2008 with SP2 已淘汰 [7]

云端服务使用的客座操作系统能在服务组态档中的 osFamily 项设定版本 (例如 osFamily="4" 表示使用第四版的客座操作系统),osVersion 设定版本号 (或是 "*",表示直接用取新版本)。

组态架构

云端服务使用两个主要的设定档来组态服务功能,一个是服务定义档 (ServiceDefinition.csdef),它定义了一个云端服务要使用到的云端基础资源,包含使用的虚拟机器角色类型 (Web Role 或 Worker Role)、虚拟机器的大小、使用的网络组态、负载平衡器组态、凭证资讯、使用的组态项目、IIS 使用的网站系结资讯等,这些资讯在部署云端服务之后不可改变。例如下列 XML:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AzureWebFarm.Example.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
  <LoadBalancerProbes>
    <LoadBalancerProbe name="WebDeploy" protocol="http" port="80" path="Probe.aspx" intervalInSeconds="5" timeoutInSeconds="100" />
  </LoadBalancerProbes>
  <WebRole name="AzureWebFarm.Example.Web" vmsize="Small">
    <Runtime executionContext="elevated" />
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
          <Binding name="HttpsIn" endpointName="HttpsIn" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" localPort="80" />
      <InputEndpoint name="HttpsIn" protocol="https" port="443" localPort="443" certificate="HTTPS" />
      <InputEndpoint name="Microsoft.WindowsAzure.Plugins.WebDeploy.InputEndpoint" protocol="tcp" port="8172" localPort="8172" loadBalancerProbe="WebDeploy" />
      <!-- unused, just there so instance discovery works -->
      <InternalEndpoint name="UnusedInternal" protocol="http" port="88" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
      <Import moduleName="WebDeploy" />
    </Imports>
    <LocalResources>
      <LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="2500" />
      <LocalStorage name="TempSites" cleanOnRoleRecycle="true" sizeInMB="2500" />
      <LocalStorage name="Execution" cleanOnRoleRecycle="true" sizeInMB="2500" />
      <LocalStorage name="Config" cleanOnRoleRecycle="true" sizeInMB="10" />
    </LocalResources>
    <ConfigurationSettings>
      <Setting name="DataConnectionString" />
      <Setting name="SyncEnabled" />
      <Setting name="SitesContainerName" />
      <Setting name="DirectoriesToExclude" />
      <Setting name="SyncIntervalInSeconds" />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name="HTTPS" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
  </WebRole>
</ServiceDefinition>

另一个是服务组态档 (ServiceConfiguration.cscfg),用来设定使用的 VM 操作系统类型与版本、虚拟机器数量、角色的设定值、凭证的使用等,这些设定在服务部署后仍然可以修改。如下列XML:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="AzureWebFarm.Example.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">
  <Role name="AzureWebFarm.Example.Web">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
      <Setting name="DataConnectionString" value="UseDevelopmentStorage=true" />
      <Setting name="SyncEnabled" value="true" />
      <Setting name="SitesContainerName" value="sites" />
      <Setting name="DirectoriesToExclude" value="App_Data/TEMP;TEMP" />
      <Setting name="SyncIntervalInSeconds" value="60" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="admin" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="MIIBnQYJKoZIhvcNAQcDoIIBjjCCAYoCAQAxggFOMIIBSgIBADAyMB4xHDAaBgNVBAMME1dpbmRvd3MgQXp1cmUgVG9vbHMCEEF7rZmMJyaEREi+EJC4WpUwDQYJKoZIhvcNAQEBBQAEggEAQrruo8G67TRXvYsMWJQsLywZTz1X7KvEeyrCH2OtgmAzw/LoNrrD8xZMCuTcExlueCsiMjCn1utf3/Zvs+6CnyeZCpRfE3Px8giMEg2qDLJYY9Q85qnSYaU8Z1VEwZLtWH2FG9lgsXYaGyd2/GWeITCFOiPjBvRheB6dfG2LMXaj7gYe0MOinqqTpAbsdE1yRsU55iUmCpTbuGjXpQzUsOQtW5ZriQR3JfSEtXVWBhWnRVRVInCtxI/vlAHiLbtjwOiyCQOTlgjOvnz2ovb1Ykzi9dzrLGEMYTldeJffKD/OzJHdGBIkdjW/4BJORc7ZO4+7tLXqe7h9MBzaw2AEATAzBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECDHnafJ4LBBbgBBpTi79EDhW34Woo0JED7Xx" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2013-01-30T23:59:59.0000000-08:00" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="B6E8A99CB3B0174C053DAF5A48DACB504C5889EC" thumbprintAlgorithm="sha1" />
      <Certificate name="HTTPS" thumbprint="B6E8A99CB3B0174C053DAF5A48DACB504C5889EC" thumbprintAlgorithm="sha1" />
    </Certificates>
  </Role>
</ServiceConfiguration>

参考

  1. ^ How to create PHP web and worker roles
  2. ^ Build and deploy a Node.js application to an Azure Cloud Service
  3. ^ How to Migrate Java Applications to Azure Cloud
  4. ^ 虚拟机器的大小
  5. ^ Sizes for Cloud Services
  6. ^ Azure 客体 OS 版次与 SDK 相容性矩阵
  7. ^ 客体操作系统系列 1 淘汰通知