Microsoft Azure 雲端服務

Microsoft Azure 云端服务 (Cloud Service) 是 Microsoft Azure 最早开始供应的服务之一，它提供了抽象化的运算资源给云端应用程序(Cloud Application) 使用，开发人员可以部署云端应用程序到Azure 云端服务，以获取所需的执行环境与运算能力，是一种PaaS 服务，而它也是Azure 供应的PaaS 服务中弹性最大，客制能力最高的服务。
它也是早期Azure虚拟机器所使用的逻辑管理单位，Azure虚拟网络的原型Azure Connect 服务也是由云端服务所起，因此它被称为Azure 运算与网络服务的源头也不为过。

架构与开发方法

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

开发支援

云端服务由于需要较多的组态设定，因此无法以很简单的方式开发与部署，微软在早期就开始提供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 类型。

组态架构

云端服务使用两个主要的设定档来组态服务功能，一个是服务定义档(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>