Microsoft Azure 云端服务

来自维基百科,自由的百科全书

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核心数 ...
规格 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核心数 ...
规格 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核心数 ...
规格 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>

参考

Wikiwand - on

Seamless Wikipedia browsing. On steroids.