Microsoft Azure 云端服务

Microsoft Azure 云端服务 (Cloud Service) 是 Microsoft Azure 最早开始供应的服务之一，它提供了抽象化的运算资源给云端应用程式 (Cloud Application) 使用，开发人员可以部署云端应用程式到 Azure 云端服务，以获取所需的执行环境与运算能力，是一种 PaaS 服务，而它也是 Azure 供应的 PaaS 服务中弹性最大，客制能力最高的服务。
它也是早期Azure虚拟机器所使用的逻辑管理单位，Azure虚拟网路的原型 Azure Connect 服务也是由云端服务所起，因此它被称为 Azure 运算与网路服务的源头也不为过。
架构与开发方法.
云端服务一开始的设计是给开发人员部署其云端应用程式为概念，因此设计上较针对开发人员的需求，使得 Azure 虚拟机器服务在推出时就有一些不便性存在，但这是云端服务本身的限制使然。
角色类型.
云端服务提供了两种服务角色：
另外，早期还没有虚拟机器服务时，云端服务有提供另一个角色，称为 VM Role，它可以产生可用远端桌面控制的虚拟机器，是虚拟机器服务的原型实作，后来 VM Role 演化成虚拟机器服务。
开发支援.
云端服务由于需要较多的组态设定，因此无法以很简单的方式开发与部署，微软在早期就开始提供 Azure SDK 以及云端服务的模拟器 (包含运算模拟器与储存模拟器，早期名称为 Development Fabric 与 Development Storage，后来定名为 Compute Emulator 与 Storage Emulator)，以及 Microsoft Azure Tools for Visual Studio，给 Visual Studio 的开发人员充分的支援。
但随著 Azure 平台的开放程度愈来愈高，PHP 、node.js 以及 Java 的开发人员也可以使用云端服务来代管其应用程式。
运算资源.
云端服务的运算资源是由虚拟机器提供，虚拟机器依照运算能力区分为数种类型 ，共分为一般性运算能量的 A 类型、经效能提升的 D 类型以及拥有最强运算效能的 G 类型，未来也会推出使用GPU运算的 N 类型。
不过云端服务可用的虚拟机器类型只有 A 类型和 D 类型。
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 则无。
D 类型.
D 类型是 Azure 在 2013 年推出的类型，它使用比 A 类型更好的 CPU，并且在实体伺服器上使用固态硬碟 (SSD)，以加速在本地运算时的 I/O 速度，另外，为满足提升虚拟机器本身的 I/O 量的需求，微软开发了高阶储存体 (Premium Storage) 用来保存虚拟机使用的 VHD (称为 OS Disk)，而使用高阶储存体的 D 类型虚拟机器，称为 DS 类型。
2015年，微软利用新的 Intel Xeon E5-2673 v3 CPU 的伺服器组建了 D 类型的第二版，称为 Dv2，可获取 D 类型虚拟机高 35% 的效能。
作业系统.
云端服务提供的虚拟机器都是标准的作业系统虚拟机，其可用作业系统称为客座作业系统 (Guest Operating System, Guest OS)，依照作业系统世代不同分为四个版本 (后续 Windows Server 2016 推出时也会新增 5.0 版) 。
云端服务使用的客座作业系统能在服务组态档中的 osFamily 项设定版本 (例如 osFamily="4" 表示使用第四版的客座作业系统)，osVersion 设定版本号 (或是 "*"，表示直接用取新版本)。
组态架构.
云端服务使用两个主要的设定档来组态服务功能，一个是服务定义档 (ServiceDefinition.csdef)，它定义了一个云端服务要使用到的云端基础资源，包含使用的虚拟机器角色类型 (Web Role 或 Worker Role)、虚拟机器的大小、使用的网路组态、负载平衡器组态、凭证资讯、使用的组态项目、IIS 使用的网站系结资讯等，这些资讯在部署云端服务之后不可改变。例如下列 XML：
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;ServiceDefinition name="AzureWebFarm.Example.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8"&gt;
 &lt;LoadBalancerProbes&gt;
 &lt;LoadBalancerProbe name="WebDeploy" protocol="http" port="80" path="Probe.aspx" intervalInSeconds="5" timeoutInSeconds="100" /&gt;
 &lt;/LoadBalancerProbes&gt;
 &lt;WebRole name="AzureWebFarm.Example.Web" vmsize="Small"&gt;
 &lt;Runtime executionContext="elevated" /&gt;
 &lt;Sites&gt;
 &lt;Site name="Web"&gt;
 &lt;Bindings&gt;
 &lt;Binding name="HttpIn" endpointName="HttpIn" /&gt;
 &lt;Binding name="HttpsIn" endpointName="HttpsIn" /&gt;
 &lt;/Bindings&gt;
 &lt;/Site&gt;
 &lt;/Sites&gt;
 &lt;Endpoints&gt;
 &lt;InputEndpoint name="HttpIn" protocol="http" port="80" localPort="80" /&gt;
 &lt;InputEndpoint name="HttpsIn" protocol="https" port="443" localPort="443" certificate="HTTPS" /&gt;
 &lt;InputEndpoint name="Microsoft.WindowsAzure.Plugins.WebDeploy.InputEndpoint" protocol="tcp" port="8172" localPort="8172" loadBalancerProbe="WebDeploy" /&gt;
 &lt;!-- unused, just there so instance discovery works --&gt;
 &lt;InternalEndpoint name="UnusedInternal" protocol="http" port="88" /&gt;
 &lt;/Endpoints&gt;
 &lt;Imports&gt;
 &lt;Import moduleName="Diagnostics" /&gt;
 &lt;Import moduleName="RemoteAccess" /&gt;
 &lt;Import moduleName="RemoteForwarder" /&gt;
 &lt;Import moduleName="WebDeploy" /&gt;
 &lt;/Imports&gt;
 &lt;LocalResources&gt;
 &lt;LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="2500" /&gt;
 &lt;LocalStorage name="TempSites" cleanOnRoleRecycle="true" sizeInMB="2500" /&gt;
 &lt;LocalStorage name="Execution" cleanOnRoleRecycle="true" sizeInMB="2500" /&gt;
 &lt;LocalStorage name="Config" cleanOnRoleRecycle="true" sizeInMB="10" /&gt;
 &lt;/LocalResources&gt;
 &lt;ConfigurationSettings&gt;
 &lt;Setting name="DataConnectionString" /&gt;
 &lt;Setting name="SyncEnabled" /&gt;
 &lt;Setting name="SitesContainerName" /&gt;
 &lt;Setting name="DirectoriesToExclude" /&gt;
 &lt;Setting name="SyncIntervalInSeconds" /&gt;
 &lt;/ConfigurationSettings&gt;
 &lt;Certificates&gt;
 &lt;Certificate name="HTTPS" storeLocation="LocalMachine" storeName="My" /&gt;
 &lt;/Certificates&gt;
 &lt;/WebRole&gt;
&lt;/ServiceDefinition&gt;
另一个是服务组态档 (ServiceConfiguration.cscfg)，用来设定使用的 VM 作业系统类型与版本、虚拟机器数量、角色的设定值、凭证的使用等，这些设定在服务部署后仍然可以修改。如下列XML：
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;ServiceConfiguration serviceName="AzureWebFarm.Example.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8"&gt;
 &lt;Role name="AzureWebFarm.Example.Web"&gt;
 &lt;Instances count="2" /&gt;
 &lt;ConfigurationSettings&gt;
 &lt;Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" /&gt;
 &lt;Setting name="DataConnectionString" value="UseDevelopmentStorage=true" /&gt;
 &lt;Setting name="SyncEnabled" value="true" /&gt;
 &lt;Setting name="SitesContainerName" value="sites" /&gt;
 &lt;Setting name="DirectoriesToExclude" value="App_Data/TEMP;TEMP" /&gt;
 &lt;Setting name="SyncIntervalInSeconds" value="60" /&gt;
 &lt;Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" /&gt;
 &lt;Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="admin" /&gt;
 &lt;Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="MIIBnQYJKoZIhvcNAQcDoIIBjjCCAYoCAQAxggFOMIIBSgIBADAyMB4xHDAaBgNVBAMME1dpbmRvd3MgQXp1cmUgVG9vbHMCEEF7rZmMJyaEREi+EJC4WpUwDQYJKoZIhvcNAQEBBQAEggEAQrruo8G67TRXvYsMWJQsLywZTz1X7KvEeyrCH2OtgmAzw/LoNrrD8xZMCuTcExlueCsiMjCn1utf3/Zvs+6CnyeZCpRfE3Px8giMEg2qDLJYY9Q85qnSYaU8Z1VEwZLtWH2FG9lgsXYaGyd2/GWeITCFOiPjBvRheB6dfG2LMXaj7gYe0MOinqqTpAbsdE1yRsU55iUmCpTbuGjXpQzUsOQtW5ZriQR3JfSEtXVWBhWnRVRVInCtxI/vlAHiLbtjwOiyCQOTlgjOvnz2ovb1Ykzi9dzrLGEMYTldeJffKD/OzJHdGBIkdjW/4BJORc7ZO4+7tLXqe7h9MBzaw2AEATAzBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECDHnafJ4LBBbgBBpTi79EDhW34Woo0JED7Xx" /&gt;
 &lt;Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2013-01-30T23:59:59.0000000-08:00" /&gt;
 &lt;Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" /&gt;
 &lt;/ConfigurationSettings&gt;
 &lt;Certificates&gt;
 &lt;Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="B6E8A99CB3B0174C053DAF5A48DACB504C5889EC" thumbprintAlgorithm="sha1" /&gt;
 &lt;Certificate name="HTTPS" thumbprint="B6E8A99CB3B0174C053DAF5A48DACB504C5889EC" thumbprintAlgorithm="sha1" /&gt;
 &lt;/Certificates&gt;
 &lt;/Role&gt;
&lt;/ServiceConfiguration&gt;