• 从Web Server向Azure WebSites迁移的利器(Migration Assistant)

     

    将Web应用迁移到云端,常见的做法是采用IaaS模式,即创建虚拟机(Virtual Machine,VM)并在上面分别部署Web Server、Database Server、Cache Server、DNS Server等;当访问负荷增大的时候,则增加虚拟机的数量来实现伸缩。

    之前曾讨论过,可以将数据库服务器(Database Server)采用Platform as a Server(PaaS)模式来提供,也有相关的迁移工具来帮助从SQL Server迁移到Azure SQL Database

    Azure网站(WebSites)是一种完全托管的平台即服务 (PaaS) 产品,便于快速高效地构建、部署并扩展企业级 Web 应用。同时,可以支持按需自动缩放(Auto-scaling),灵活支持不同时间段的并发访问负荷,特别是尖峰负荷。此外,可以显著降低运维工作量,而不必过多关注底层虚拟机、操作系统、网络、负载均衡等细节。

    对于Azure网站的更多细节,可以参考:http://www.windowsazure.cn/home/features/web-site/

    可以开发ASP.NET网站并部署到Azure网站,相关步骤可参考:http://www.windowsazure.cn/zh-cn/develop/net/tutorials/web-site-intro-tutorial/

    如果将现有Web应用迁移到Azure网站,可以使用一个开源的辅助工具:Azure Websites Migration Assistant,具体可参考:http://migrate4.azurewebsites.net/

    目前支持从IIS Server迁移到Azure WebSites,其中特别提供了技术兼容性等方面的分析,例如端口绑定(Port Binding)、IIS身份认证、GAC、缓冲池等。如下图,工具将给出分析报告。

    clip_image001

    目前,这个工具只支持从IIS server到Azure WebSites的迁移辅助,而Azure WebSites还支持Java、PHP、Node.js或Python,后续期待工具能够涵盖对这些技术的支持;当然,也可以考虑参考这个工具的思路,开发适合自己需要的迁移辅助工具。

  • SQL Database性能(Performance)的可规划性(Predictability)及度量(Measurement)

     

    性能是一个大家经常关注的问题,直接体验就是系统/应用的运行速度、响应时间、并发用户数等。从个人机(PC)、服务器(Server)、虚拟化(Virtualization)、私有云(Private Cloud)到公有云(Public Cloud),性能一直是开发/IT运营持续改进的领域。

    当然,性能也是一个需要深入的专业知识的工作,性能的度量(Measurement)、监控(Monitoring)、基准测试(Benchmarking)、调优(Tuning)/优化(Optimization)等,都需要对技术的深入理解,需要专业的工具进行辅助。

    当我们由使用SQL Server等数据库服务器,迁移到SQL Database,用PaaS方式来提供数据库服务,对于性能的监控及改进,也需要有新的工作内容及方式。

    对于从SQL Server到SQL Database的迁移,请参考:从SQL Server到Microsoft Azure SQL Database的技术迁移及利器

    早前的SQL Database,提供两个版本:Web和Business。目前这两个版本都已停用,并将最终退休。

    目前提供三个版本:基本(Basic)、标准(Standard)和高级(Premium),而对于标准Standard和高级Premium版本,还有不同的性能级别(S0/S1/S2及P1/P2/P3),可以根据不同的性能需求提供相应规格支持。其中,“基本”级别主要用于具有轻型事务工作负荷的应用程序;“标准”级别适用于事务型工作负载;“高级”级别专为任务关键型数据库设计,更好地保证高级的业务连续性。

    对于SQL Database的服务级别及定价,可以参考:http://www.windowsazure.cn/pricing/details/sql-database/

    对于先前使用Web和Business版本的数据库,可以转换为基本、标准或高级版本,具体步骤非常简单,如下图,在管理门户的”缩放”界面,选择相应的版本及服务级别、大小,即可完成转换/迁移。

    clip_image002

    此外,可以通过其他方式来调整,例如,在PowerShell中,使用Set-AzureSqlDatabase命令来完成;在REST API中,可以通过Update Database / ServiceLevelObjectiveId来调整;此外,对于DBA,可以使用ALTER DATABASE … MODIFY (EDITION = …)的T-SQL命令来完成。

    反映在上述的版本升级的背后,是一个关于性能提升及可管理性的重要改进,即SQL Database的可规划/预测性(Predictable Performance)。

    在SQL Database中有一个重要的概念DTU,如上图中所列,即Database Throughput Unit,每个DTU是针对计算(CPU)、内存(Memory)、读(Read)和写(Write)等因素进行约束的基本单元。

    所以,基于自己业务规模的统计/预测,及相关的基准测试结果,可以进行性能的规划和调优。其中重要的因素包括:

    • 版本:基本(Basic)、标准(Standard)和高级(Premium)
    • 性能级别(针对上述不同版本)及对应的DTU数量,如S0/S1/S2及P1/P2/P3等
    • 数据库大小(针对上述不同版本而不同),特别是最大值(例如500G)
    • 单位价格,即每小时/月的价格

    对于对SQL Database性能的监控(Monitoring)和度量(Measurement),可以通过很多方式或工具进行控制和管理。

    最直接、便捷的方式就是使用Azure管理门户(Management Portal),并可以根据需要增加度量指标,如下图:

    clip_image003

    对于数据库管理人员(DBA)、开发人员、IT专业人员等,可以通过查询master.sys.resource_stats和userdb.sys.dm_db_resource_stats,获得更详细的性能数据。

    更详细的信息,请参考:http://msdn.microsoft.com/en-us/library/dn269979.aspx

    此外,可以使用Visual Studio来管理,在安装Azure SDK后,即可在Visual Studio的IDE中来获得SQL Database的性能数据,如下图:

    clip_image004

  • 云集万物:支持百万级设备实时互连的Azure事件中心 (Event Hubs)

     

    之前曾探讨过一个有趣的话题,即:支撑超百万级设备互联的Windows Azure 通知中心(Notification Hub),可以支持通过Windows 推送提醒服务 (WNS)、Microsoft 推送提醒服务 (MPNS)、Apple 推送提醒服务 (APNS)、Google Cloud Messaging (GCM)、百度通知等提醒服务,向百万级以上的活动的设备(特别是移动的设备)推送通知等消息。

    有趣的是,Azure又推出了另一个支持百万级设备实时互连的服务,叫事件中心 (Event Hubs)。

    与通知中心不同的是,事件中心主要用于从移动设备、设备(特别是广大的物联网中的分布式设备)、网站、游戏、应用程序等采集数据,如下图。换句话说,事件中心负责前端,负责输入(Inputs);通知中心负责后端,负责输出(Outputs);当然,Azure中提供了大量的处理(Processing)。

    clip_image001

    众所周知,微软发布的新战略:云优先、移动优先(Mobile First, Cloud First);如上所述,设备 –> 事件中心 -> Azure云 –> 通知中心 -> 设备正是构成了从设备到云再到设备的完整链,而中间正是基于云的IPO。

    前段时间,曾经拼过一个对子,上联是同事出的”海纳百川有容乃大“,下联就是”云集万物智者为王“。

    当我们谈到物联网的时候,”云集万物智者为王“包含了非常关键的主要元素:云(Azure)、集(Hub集线器,包括了Event Hub和Notification Hub)、万物(物联网中的芸芸众物)、智(大数据、机器学习)等。

     

    创建事件中心的步骤非常快捷、方便,如下图,

    clip_image002

    而配置中第二步中有一个非常有趣的设置,即设置分区数量(Partition Count)和消息保存时间(Message Retention Days),如下图:

    clip_image003

    其中:分区(Partition)是一个关键的负载平衡技术,可以通过指定分区键(Partition Key),如下:

    EventHubClient ec = EventHubClient.Create(“Event Hub Instance1");

    EventData ed = new EventData();

    ed.PartitionKey = "SourceID";

    ec.Send(ed);

    而负责接收的订阅者,可以通过指定PartitionKey,获得相应的事件消息。

     

    此外,事件中心还可以在连接设备的时候进行安全性管理,包括令牌(Token)、密钥(SecretKey)、存取限制等。不同于通知中心,事件中心传递的数据涉及实际业务,必须对数据安全进行保障。

     

    深入去看编程时会涉及的EventData类,会发现其属性列表中有一个叫EnqueuedTimeUtc的属性,其中存储UTC格式的发送时间(含日期、时间等)。

    可以利用这个时间戳性质的属性,对事件数据进行更深入的管理。

    具体请参考MSDN相关文档:EventData Class

  • 针对Azure Storage的关键运行指标的度量与分析(Metrics and Analytics)

     

    Azure 存储(Storage)是Microsoft Azure云中非常关键的基础性服务,绝大多数的服务(例如Azure虚拟机VM的VHD文件、大数据HDInsight等),都基于这一关键服务。

    对于希望深入管理自己云应用的IT人员或者开发人员,特别是一些基于Azure提供多租户(Multi-tenancy)服务的厂商,希望能够更深入地掌握自己账户的存储的运行情况,以便进行有效控制、成本分摊及异常诊断等。

    这里涉及到的一个关键概念就是Azure的存储分析,可以为存储帐户提供指标数据,进行跟踪请求、分析使用情况趋势及诊断问题等。

    目前,可以针对存储帐户的关键类型,即Blob、表、队列等进行度量,后续也会将共享文件(FileShare,目前还在预览Preview阶段)提供度量分析支持。

    在Azure管理门户(Management Portal)上,可以非常便捷地开启和设置对存储的监控、记录及后续分析的功能。如下图,可以针对选定的存储账号(Storage Account),在“配置”页中,对“监视”及“日志记录”中的Blob、 表、队列等,开启相关设置。

    clip_image002

    此外,还可以通过 REST API 或客户端库以编程方式启用存储分析,例如:PUT https:// <account-name>.blob.core.windows.net/?restype=service&comp=properties HTTP/1.1。

    应该注意的是,对于存储账号,“监视”及“日志记录”默认的设置是“关闭”。根据实践,建议开启这一配置,以便进行排错、分析。

    另外,在存储的架构层次里,建议针对存储账户,而非其更下一层,例如Blob的容器(Container),进行监控。当然,如果需要了解Container, Table, Queue中的容量规模,可以自己来估算大概规模:

    例如,对于Blob Container,总规模公式:

    48 bytes + Len(ContainerName) * 2 bytes +

    For-Each Metadata[3 bytes + Len(MetadataName) + Len(Value)] +

    For-Each Signed Identifier[512 bytes]

    对于Table Entity,总规模公式:

    4 bytes + Len (PartitionKey + RowKey) * 2 bytes +

    For-Each Property(8 bytes + Len(Property Name) * 2 bytes + Sizeof(.Net Property Type))

    对于Queue,总规模公式:

    24 bytes + Len(QueueName) * 2 +

    For-Each Metadata(4 bytes + Len(QueueName) * 2 bytes + Len(Value) * 2 bytes)

    更详细的信息,可以参考下面的博客文章:

    如何估算Container, Table, Queue的容量

     

    对于客户端方式,也可以利用日志功能,对Azure存储访问请求及响应情况进行记录。

    对于存储的监控、分析度量,一些关键的运行指标,值得重点关注:

    • TotalRequests,即向存储服务或指定的 API 操作发出的请求数。
    • TotalEgress,即传出数据量(字节)。
    • TotalIngress,即传入数据量(字节)。
    • TotalBillableRequests,即计费的请求数。从Azure存储内部机制而言,某些失败的请求是不在计费范围内的。

    此外,还有一些不同类型的错误信息,也便于更深入地了解存储的异常情况,例如:

    • ThrottlingError,了解被阻塞的存储访问数量。利用这一指标,可以更好地规划存储账号,合理地将负载分配到多存储账号,提高系统的整体性能。
    • PercentThrottlingError,即失败并出现限制错误的请求百分比。
    • PercentTimeoutError,即失败并出现超时错误的请求百分比。该数字包括客户端和服务器超时
    • PercentAuthorizationError,即失败并出现 AuthorizationError 的请求百分比。对于安全性方面的监控,有助于防止恶意攻击、侵入等安全隐患。
    • NetworkError,即向存储服务或指定的 API 操作发出且返回 NetworkError 的已验证请求数。

    此外,还有一些指标可以帮助更好地了解性能相关情况,例如:

    • AverageE2ELatency,即向存储服务或指定的 API 操作发出的成功请求的平均端到端滞后时间(毫秒)。该值包括在 Windows Azure 中读取请求、发送响应以及接收响应确认所需的处理时间。
    • AverageServerLatency,即Azure 存储处理成功请求使用的平均滞后时间(毫秒)。该值不包括在 AverageE2ELatency 中指定的网络滞后时间。

    结合这些指标,可以更好地优化应用中数据结构的设计,合理设计分区(Partition Key),提供应用的响应性能。

  • 从SQL Server到Microsoft Azure SQL Database的技术迁移及利器

     

    数据服务是几乎所有应用都要依靠,或者对外提供的关键性服务;一些关键性应用,例如企业级应用、在线游戏、电商等,对数据服务的可用性、一致性、伸缩性等有更高的服务等级要求。

    随着云计算技术的推广,越来越多的IT管理/开发者考虑在Azure云中建立/使用数据库,主要有两种模式可以考虑:IaaS和PaaS。其中,IaaS模式是通过在Azure云创建及部署SQL Server(或其他服务器软件例如MySQL)的虚拟机的方式,提供及使用数据服务,即SQL Server VM in Azure;而PaaS模式则更简单,使用者可以不必关注底层更多的细节,例如操作系统(OS)、存储、网络等,而更加关注数据库服务器、数据表等的操作,在Azure里即是SQL Database。

    对于SQL Server VM in Azure的方式,考虑到数据库服务的高服务等级要求,可以考虑在SQL Server VM上部署Failover Cluster及AlwaysOn的方式,具体可以参考以下的技术资源:

    SQL Server AlwaysOn Availability Groups in Azure

    微软虚拟学院(MVA)课程 - 在Windows Azure VM上实现SQL Server高可用性及容灾设计

    两把利器,帮你深刻洞察SQL Server Azure VM上AlwaysOn高可用(HA)方案的运行状态(Status diagnostics)

    对于某些场景,例如需要使用SQL Server的完整特性、或者希望降低改动工作量等,则可以考虑使用SQL Server VM in Azure的方式。

    目前,越来越多云应用开发商希望降低IT管理、DBA管理的工作量及依赖性,加快应用的快速上线,开始倾向于考虑和使用PaaS方式。

    在选择SQL Database的策略时,首先需要评估自己应用的数据量、数据使用方式、并发量/伸缩性、安全性等方面的需求及目前使用情况。

    其中一个非常重要的方面是需要了解Azure SQL Database针对SQL Server完整版本的技术限制。在MSDN上有相关的资源,即:

    Azure Subscription and Service Limits, Quotas, and Constraints

    Azure SQL Database 帐户和计费

    Azure SQL Database General Guidelines and Limitations

    Azure SQL Database Security Guidelines and Limitations

    在这里,有一些技术指标需要特别关注,例如:数据库的数量、数据库大小、某些命令可能暂不支持等。

    另外,针对基于SQL Database的设计,特别是一些互联网规模特别大的应用,需要参考一些设计模式、原则及最佳实践,后续将会做进一步d分析。

    对于从SQL Server到Microsoft Azure SQL Database的迁移,有一个工具可以用,SQL Database Migration Wizard,可以帮助从SQL Server 2005/2008/2012/2014迁往Azure SQL Database。这个工具在Codeplex上有共享,而且有最新的版本供下载。

    https://sqlazuremw.codeplex.com/

    对于SQL Server 2000的用户,只能通过先升级到SQL Server 2005或者2008,具体请参考下面的博客及工具资源:

    http://blogs.technet.com/b/nevin_dongs_blog/archive/2013/01/22/sql-server-2012.aspx