Windows Azure案例分析: 选择虚拟机或云服务?
作者 王枫 发布于2013年6月27日
随着云计算技术和市场的日渐成熟,企业在考虑IT管理和运维时的选择也更加多样化,应用也从传统部署方式,发展为私有云、公有云、和混合云等部署方式。作为微软核心的公有云平台,Windows Azure提供了三种计算模式(虚拟机、云服务和网站),允许客户快速的构建、部署和管理云端应用程序。本文旨在对如何选择虚拟机和云服务给出一些建议和指导。
虚拟机和云服务
虚拟机(Virtual Machines)是Windows Azure基础设施即服务(IaaS)的重要组成部分,支持Windows和Linux操作系统,并提供了多款模板供用户选择。其特点有(不限于):
- 自服务式申请并快速的创建虚拟机
- 灵活的镜像移动,支持从本地到云端,或者从云端到本地
- 自建虚拟机镜像,批量构建统一的应用环境
- 快速的挂接和卸载数据磁盘
- 支持Windows Azure虚拟网络(Virtual Network),构建局域网络
- 完备的管理接口,如管理门户、PowerShell、RESTFul等
云服务(Cloud Services)是Windows Azure平台及服务(PaaS)的重要组成部分,提供两种计算角色(Web Role和Work Role),可构建高可用的分布式云应用程序或服务,并支持自动化应用部署和资源的弹性伸缩。其特点有(不限于):
- 支持多种开发语言,例如C#,VB,C++,Java,PHP,Node.js,Python
- 支持分层架构,以构建大型复杂的分布式应用系统
- 提供本地模拟器,便于开发人员本地调试和测试
- 部署流线式和自动化,快速将应用部署到Windows Azure的测试(Stage)或生产环境中
- 在无业务中断情况下,运行时修改资源配置
- 支持Windows Azure虚拟网络(Virtual Network)
- 提供Diagnostics功能,从运行的应用程序收集诊断数据
结合应用特性选择服务
不同的企业所处的行业、IT成熟度、对数据安全和成本的敏感度等方面存在着差异,所以,在面对Windows Azure上运行什么应用这个问题时,各企业也有着不同的判断依据和规划。总体上说,当应用需要具有以下特征时,可以更好的利用Windows Azure的能力和特性,降低总体拥有成本(TCO)。
- 高可用——Windows Azure的虚拟机和云服务提供了99.9%的SLA
- 高扩展性——Windows Azure的虚拟机提供了垂直扩展(Scale-up)能力,云服务提供了横向和垂直扩展(Scale-out和Scale-up)能力
- 互联网接入——Windows Azure的虚拟机和云服务可部署在微软全球数据中心中
确定应用后,接下来考虑的是技术实现方案,如何选择虚拟机或者云服务呢,下表给出一些通用的考量点,供决策参考使用:
表:计算模式选择考察点
考量点 |
描述 |
新建或遗留系统 |
如果是新建的应用系统,所使用的开发语言在云服务所支持的范围内,建议使用云服务(Cloud Services); 如果是遗留的复杂应用系统,需考虑代码改造成本,通常适于选择虚拟机。例如,运行在Linux系统上的应用,或者是使用Ruby等语言开发的应用,迁移到云服务需要重新编写应用,代价高。 当通过改造遗留系统迁移到云服务时,需遵循无状态的设计原则,使用Windows Azure缓存服务管理会话,使用Windows Azure存储服务保存和读取非结构化数据,使用SQL Database或者SQL IaaS存取结构化数据。 |
动态伸缩 |
如果应用系统需要在流量高峰时实现动态资源调整,保障系统性能、可用性和稳定性时,适合选择云服务。这种情况下,可考虑对遗留系统进行改造。 |
安装软件 |
如果应用系统需要安装软件,例如Active Directory、SharePoint、SQL Server、MySQL、MongoDB等,适合选择虚拟机。 |
磁盘读写 |
如果应用系统对数据的读写是基于文件系统的,即数据读写是基于磁盘文件系统的,特别是针对遗留系统,为避免代码改造,适合选择虚拟机。 |
混合方式 |
在部署应用时,虚拟机或者云服务并不是二选一的问题,可以考虑采用混合的方式。例如,将数据库部署到虚拟机中,应用服务部署到云服务中。通过Endpoints实现互联互通,也可以通过虚拟网络(Virtual Network)组成一个内部网络。 |
虚拟机参考案例:安防视频监控系统
作为一个基于Java架构、经过多年发展已经成熟稳定的应用系统,需要在现阶段快速、平稳的迁移到Windows Azure。因此,我们决定采用虚拟机服务实现这一目标,技术架构如下图所示:
图1 视频监控系统技术架构图
- 首先,创建一个地缘组(Affinity Group),确保虚拟机被部署在同一个数据中心中;
- 使用地缘组,创建一个虚拟网络(Virtual Network),用于形成一个内部网络,降低系统模块间的数据访问网络延迟;
- 创建虚拟机(Virtual Machine), 将所有虚拟机放置在该虚拟网络中,并安装系统组件;
- 为提高系统可用性,选择使用两台虚拟机运行管理服务器,并将它们放置在一个可用性组中(Availability Set),确保99.95%的高可用性;
- 为提高数据库可用性,使用两台虚拟机运行MySQL数据库,采用Active/Standby模式,默认情况下,主数据库服务器运行;
- BS服务器和管理服务器虚拟机上配置终结点(Endpoints),确保普通用户和管理员可以访问相应的门户。
Windows Azure支持CentOS、Ubuntu和SUSE等类型Linux操作系统,提供多种可选的虚拟机配置规格,例如Extra Small、Small、Medium、Large、Extra Large等。在系统迁移过程中,并根据组件对操作系统、计算资源和带宽要求,我们选择了CentOS系统,以及Medium和Large两种配置,通过Windows Azure的管理门户或者Powershell命令,在数分钟内即可创建一台虚拟机,然后,将系统原封不动地安装到虚拟机上。
与传统方式使用本地磁盘作为视频文件的存储介质不同,我们选择使用Windows Azure的数据磁盘(Data Disk)保存视频文件。Data Disk作为页Blob存储在存储帐号的Blobs服务中,利用Windows Azure的云存储技术,确保数据持久性、性能、扩展性和稳定性。但必须清楚的是,Data Disk实际上是一种可以挂接在虚拟机上的网络磁盘,磁盘读写(Disk I/O)性能不可避免的会受到网络延迟影响,另外,由于Blobs服务是多租户的,Windows Azure对Data Disk的磁盘读写进行了限制。所以,单块Data Disk的读写性能显然会弱于本地磁盘读写。
因此,为满足系统的业务指标,我们对磁盘做了优化,采用多块Data Disk挂接在视频服务器上,组建Raid 0磁盘阵列,通过这种横向扩展的方式以提供磁盘读写吞吐量。测试结果显示,这种方式是可行并有效的,例如使用Large规格虚拟机(带宽限制是400Mbps),挂接8块Data Disk组成Raid 0磁盘阵列,可以支持50路8Mbps带宽的视频流,丢包率控制在3%左右,满足业务要求。
目前,我们将系统部署在北部数据中心,将来也可以利用Windows Azure虚拟机的可移动性,将虚拟磁盘(VHDs)拷贝至东部数据中心,并快速的搭建系统,提供业务的敏捷性。同时,Windows Azure的数据中心支持多家主流运营商的网络接入,以应对企业和客户可能面临的网络带宽和延迟问题。
通过该视频监控系统案例,我们可以看到如何利用虚拟机服务和虚拟网络构建完整的基础架构,将系统快速的部署到云端。
云服务参考案例:电视台投票系统
近年来随着移动互联的发展,某电视台除了为观众播放节目内容和资讯外,希望引入实时双向的交流模式,以增强节目与观众的互动性。因此,电视台决定将一年一度的选美比赛开发的投票系统运行在Windows Azure上,观众可以投票支持他们喜欢的佳丽角逐奖项,而投票结果在节目中实时公布。
这套系统的挑战是显而易见的:数百万观众在十几分钟内通过手持设备提交投票,意味着系统需要支撑每秒数千个请求以确保投票的稳定运行。这是一种典型的云计算模式(Predictable Burst),可以预见到在节目时间段系统的工作量将急速上升,与平时相比,需要增加大量的基础架构资源来提高系统的吞吐能力,确保系统能够正常的处理用户请求,避免请求拒绝、响应时间过长,甚至系统宕机等异常发生。为了降低前期投资,快速的开发应用,能够短时间处理激增流量,我们选择了具有高扩展性和可用性的云服务来构建和运行该系统。
图2 在线投票系统技术架构图
- ASP.NET Web Role负责接收来自客户端的请求。值得注意的是,客户往往会认为只要将现有应用运行在云计算上,就天然的具备了横向扩展能力,其实不然,尽管Windows Azure提供了支持横向扩展的基础架构和服务,但在应用架构设计时,应遵循角色实例无状态性(Stateless)原则。也就是说,应用在Web Role实例中不应存取本地文件或数据,而是将会话状态和缓存保存在独享缓存服务(Dedicated Caching)中,其它数据可以通过投票服务保存到数据库或者Windows Azure存储服务中。这样一来,Web Role实例在本地不存储数据,当动态增加或减少角色实例时,负载均衡设备通过轮询机制可能将请求路由到不同的实例上,但处理结果应该是一致的;
- 投票服务Web Role负责统计和查询投票信息,校验投票的有效性,记录投票信息等。与ASP.NET Web Role的分离设计,可以确保无论在界面层还是业务处理层,都可以根据预计负载情况进行横向扩展;
- 短信网络由电信运营商提供,所以投票系统利用虚拟网络(Virtual Network)在投票系统与短信网络之间建立VPN通道,保证短信发送的可靠性及降低网络时延;
- 使用了Windows Azure SQL Database保存和读取用户权限、投票等所有数据。
- 观众通过手机、平板或电脑访问ASP.NET Web Role投票页面,投票结果经过后台处理被保存到数据库中。而主办方在节目现场通过客户端应用可以浏览和统计投票结果,决定奖项的归属。
投票系统设计容量是在2小时内支持数百万人次的页面访问,高峰期间(10分钟)支持最大每秒5000个投票请求。系统设计时考虑了以下原则:
- 分层设计,系统由界面层(ASP.NET Web Role)、业务处理层(投票服务Web Role)和数据库层(SQL Database);
- 无状态设计,为了支持ASP.NET Web Role实例的横向扩展,采用Windows Azure缓存服务管理会话状态;业务数据放置在SQL Database中,投票服务Web Role实例不保存任何业务数据,同样支持横向扩展;
- 数据分片设计,考虑到SQL Database单实例的容量和并发连接限制,采用SQL Federation实现投票数据的水平分片(Horizontal Partition),数据查找逻辑由投票服务Web Role进行控制。
经过性能和压力测试,系统部署使用了上千个CPU核数(Cores),合计上百台虚拟机。投票系统从设计、开发、测试到上线,仅用了六个星期。活动举办期间,Windows Azure数据中心和投票系统运行正常,未接到延误或故障情况出现的报告。
小结
通过这篇文章,希望更多的朋友能够了解Windows Azure的虚拟机和云服务,并在制定应用的Windows Azure迁移计划时选择合适的服务,以满足应用设计目标,并最大化利用Windows Azure提供的服务能力。
感谢马国耀对本文的审校。
本文转载自:http://www.infoq.com/cn/articles/virtual-machine-or-cloud-service