写点什么

Windows Azure 案例分析: 选择虚拟机或云服务?

  • 2013-06-27
  • 本文字数:4632 字

    阅读完需:约 15 分钟

随着云计算技术和市场的日渐成熟,企业在考虑 IT 管理和运维时的选择也更加多样化,应用也从传统部署方式,发展为私有云、公有云、和混合云等部署方式。作为微软核心的公有云平台,Windows Azure 提供了三种计算模式(虚拟机、云服务和网站),允许客户快速的构建、部署和管理云端应用程序。本文旨在对如何选择虚拟机和云服务给出一些建议和指导。

虚拟机和云服务

虚拟机(Virtual Machines)是 Windows Azure 基础设施即服务(IaaS)的重要组成部分,支持 Windows 和 Linux 操作系统,并提供了多款模板供用户选择。其特点有(不限于):

  1. 自服务式申请并快速的创建虚拟机
  2. 灵活的镜像移动,支持从本地到云端,或者从云端到本地
  3. 自建虚拟机镜像,批量构建统一的应用环境
  4. 快速的挂接和卸载数据磁盘
  5. 支持 Windows Azure 虚拟网络(Virtual Network),构建局域网络
  6. 完备的管理接口,如管理门户、PowerShell、RESTFul 等

云服务(Cloud Services)是 Windows Azure 平台及服务(PaaS)的重要组成部分,提供两种计算角色(Web Role 和 Work Role),可构建高可用的分布式云应用程序或服务,并支持自动化应用部署和资源的弹性伸缩。其特点有(不限于):

  1. 支持多种开发语言,例如 C#,VB,C++,Java,PHP,Node.js,Python
  2. 支持分层架构,以构建大型复杂的分布式应用系统
  3. 提供本地模拟器,便于开发人员本地调试和测试
  4. 部署流线式和自动化,快速将应用部署到 Windows Azure 的测试(Stage)或生产环境中
  5. 在无业务中断情况下,运行时修改资源配置
  6. 支持 Windows Azure 虚拟网络(Virtual Network)
  7. 提供 Diagnostics 功能,从运行的应用程序收集诊断数据

结合应用特性选择服务

不同的企业所处的行业、IT 成熟度、对数据安全和成本的敏感度等方面存在着差异,所以,在面对 Windows Azure 上运行什么应用这个问题时,各企业也有着不同的判断依据和规划。总体上说,当应用需要具有以下特征时,可以更好的利用 Windows Azure 的能力和特性,降低总体拥有成本(TCO)。

  1. 高可用——Windows Azure 的虚拟机和云服务提供了 99.9% 的 SLA
  2. 高扩展性——Windows Azure 的虚拟机提供了垂直扩展(Scale-up)能力,云服务提供了横向和垂直扩展(Scale-out 和 Scale-up)能力
  3. 互联网接入——Windows Azure 的虚拟机和云服务可部署在微软全球数据中心中

确定应用后,接下来考虑的是技术实现方案,如何选择虚拟机或者云服务呢,下表给出一些通用的考量点,供决策参考使用:

表:计算模式选择考察点

考量点

描述

新建或遗留系统

如果是新建的应用系统,所使用的开发语言在云服务所支持的范围内,建议使用云服务(Cloud Services);

如果是遗留的复杂应用系统,需考虑代码改造成本,通常适于选择虚拟机。例如,运行在 Linux 系统上的应用,或者是使用 Ruby 等语言开发的应用,迁移到云服务需要重新编写应用,代价高。

当通过改造遗留系统迁移到云服务时,需遵循无状态的设计原则,使用 Windows Azure 缓存服务管理会话,使用 Windows Azure 存储服务保存和读取非结构化数据,使用 SQL Database 或者 SQL IaaS 存取结构化数据。

动态伸缩

如果应用系统需要在流量高峰时实现动态资源调整,保障系统性能、可用性和稳定性时,适合选择云服务。这种情况下,可考虑对遗留系统进行改造。

安装软件

如果应用系统需要安装软件,例如 Active Directory、SharePoint、SQL Server、MySQL、MongoDB 等,适合选择虚拟机。

磁盘读写

如果应用系统对数据的读写是基于文件系统的,即数据读写是基于磁盘文件系统的,特别是针对遗留系统,为避免代码改造,适合选择虚拟机。

混合方式

在部署应用时,虚拟机或者云服务并不是二选一的问题,可以考虑采用混合的方式。例如,将数据库部署到虚拟机中,应用服务部署到云服务中。通过 Endpoints 实现互联互通,也可以通过虚拟网络(Virtual Network)组成一个内部网络。

虚拟机参考案例:安防视频监控系统

我们帮助过一家安防领域的企业将其视频监控系统迁移到 Windows Azure 上。该系统收集远程摄像头发送的实时视频流,由流媒体服务器接受并保存;用户通过浏览器访问门户,可以查看实时视频或监控录像,管理员登录管理服务器对整个系统进行管理和监控。传统的本地部署方式要求客户具备数据机房以部署和运行后台系统,并确保摄像头和数据机房的网络连接,造成项目施工周期长,并产生相应的固定资产投入和运维成本,系统的可靠性、安全性也难以保证,从而增加了项目总拥有成本;同时,一些中小型客户尚不具备硬软件环境和运维能力。所以,为了实现业务覆盖更多的地区,服务更多的客户,提供更加优质的服务,该企业决定采用 Windows Azure 实现系统集中化部署和运维。

作为一个基于 Java 架构、经过多年发展已经成熟稳定的应用系统,需要在现阶段快速、平稳的迁移到 Windows Azure。因此,我们决定采用虚拟机服务实现这一目标,技术架构如下图所示:

图 1 视频监控系统技术架构图

  1. 首先,创建一个地缘组(Affinity Group),确保虚拟机被部署在同一个数据中心中;
  2. 使用地缘组,创建一个虚拟网络(Virtual Network),用于形成一个内部网络,降低系统模块间的数据访问网络延迟;
  3. 创建虚拟机(Virtual Machine), 将所有虚拟机放置在该虚拟网络中,并安装系统组件;
  4. 为提高系统可用性,选择使用两台虚拟机运行管理服务器,并将它们放置在一个可用性组中(Availability Set),确保 99.95% 的高可用性;
  5. 为提高数据库可用性,使用两台虚拟机运行 MySQL 数据库,采用 Active/Standby 模式,默认情况下,主数据库服务器运行;
  6. 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 在线投票系统技术架构图

  1. ASP.NET Web Role 负责接收来自客户端的请求。值得注意的是,客户往往会认为只要将现有应用运行在云计算上,就天然的具备了横向扩展能力,其实不然,尽管 Windows Azure 提供了支持横向扩展的基础架构和服务,但在应用架构设计时,应遵循角色实例无状态性(Stateless)原则。也就是说,应用在 Web Role 实例中不应存取本地文件或数据,而是将会话状态和缓存保存在独享缓存服务(Dedicated Caching)中,其它数据可以通过投票服务保存到数据库或者 Windows Azure 存储服务中。这样一来,Web Role 实例在本地不存储数据,当动态增加或减少角色实例时,负载均衡设备通过轮询机制可能将请求路由到不同的实例上,但处理结果应该是一致的;
  2. 投票服务 Web Role 负责统计和查询投票信息,校验投票的有效性,记录投票信息等。与 ASP.NET Web Role 的分离设计,可以确保无论在界面层还是业务处理层,都可以根据预计负载情况进行横向扩展;
  3. 短信网络由电信运营商提供,所以投票系统利用虚拟网络(Virtual Network)在投票系统与短信网络之间建立 VPN 通道,保证短信发送的可靠性及降低网络时延;
  4. 使用了 Windows Azure SQL Database 保存和读取用户权限、投票等所有数据。
  5. 观众通过手机、平板或电脑访问 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 提供的服务能力。


感谢马国耀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-06-27 12:095166

评论

发布
暂无评论
发现更多内容

GreatSQL 8.0.32-24 今日发布

GreatSQL

MySQL greatsql greatsql社区 MySQL生态

5分钟在k8s上可视化搭建Kylin5

CloudEon开源

大数据 开源 云原生 kubernetes 运维 Apache Kylin

MySQL Router高可用搭建

GreatSQL

MySQL 高可用 greatsql社区

如何减少创建订单、支付等线上写场景漏测?去哪儿流量录制回放实践

TakinTalks稳定性社区

Simple Date Format类到底为啥不是线程安全的?

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

手把手实践丨基于STM32+NBIOT+华为云IOT设计智能井盖

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 6 月 PK 榜 智能井盖

软件测试/测试开发丨App自动化测试学习笔记分享

测试人

程序员 软件测试 测试开发 app自动化测试

从入门到精通,阿里内部手抄微服务架构笔记,看完感觉我又行了!

做梦都在改BUG

Java 架构 微服务 Spring Cloud spring cloud alibaba

2023秋招Java 面试必刷的1200 道Java大厂面试真题(含答案解析)

采菊东篱下

java面试

GitHub标星137k+,超全面Java知识点总结!从10K到40K全有了

做梦都在改BUG

Java

踩坑:以为是Redis缓存没想到却是Spring事务!

做梦都在改BUG

Java redis spring 缓存 事务

Maven Could not find artifact com.ruoyi:ruoyi-framework:pom:3.8.5 in public

Andy

云管理用哪家云管平台厂商好?从哪些方面来看?

行云管家

云计算 云资源 云管理 云成本

MySQL对derived table的优化处理与使用限制

GreatSQL

MySQL greatsql社区

入职阿里?最少啃完这本500页Java并发多线程源码笔记

程序知音

Java 并发编程 多线程 高并发 后端技术

全面数据管理 DBeaverUltimate最新中文安装包

真大的脸盆

Mac 数据库管理工具 数据库管理 Mac 软件 管理数据库

卡牌游戏系统开发web3链游技术

薇電13242772558

web3 链游

大型企业数智化关键举措太难懂?这本数智平台白皮书带你秒理解

用友BIP

白皮书 数智平台 平台白皮书 数智平台白皮书

带你走进大数据 | 写给小白的大数据指南

Data 探险实验室

大数据 数据分析 数据处理 数据存储 数据发展

公司大规模裁员的时间轴

HoneyMoose

测试同学职场成长的核心认知

老张

职场成长 认知

供应链中台管理系统开发私有化部署

薇電13242772558

供应链 管理系统

SpringBoot升级所踩过的坑(一)

技术小生

6 月 优质更文活动

二级等保堡垒机用哪个品牌好?理由是什么?

行云管家

网络安全 等保 堡垒机 等级保护

NFTScan | 05.29~06.04 NFT 市场热点汇总

NFT Research

基于STM32+华为云IOT设计的智能温室大棚监控系统

DS小龙哥

6 月 优质更文活动

Spring Security安全框架在Spring Boot框架中的使用

做梦都在改BUG

Java Spring Boot spring security 权限管理

NineData,稳定、高效的Redis数据同步解决方案

NineData

redis 数据同步 迁移数据 数据同步工具 NineData

财务共享管理体系助力企业卓越发展

用友BIP

财务共享

什么样的企业需要建设财务共享服务中心?

用友BIP

财务共享

LED广告牌企业的突破点在哪?

Dylan

技术 分辨率 LED LED显示屏 led显示屏厂家

Windows Azure案例分析: 选择虚拟机或云服务?_服务革新_王枫_InfoQ精选文章