写点什么

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:095345

评论

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

生活中的这些难题,数据库开发者可为你解决!

华为云开发者联盟

数据库 开发者 华为云 GaussDB(for Redis) Redis Stream

Thrift 学习笔记

U2647

Thrift 4月日更

尤雨溪:Vue 3 将不会支持 IE11 了

清秋

翻译 Vue 4月日更 IE

MVVP:一种基于状态的架构模式的设计与实现

行者

字节跳动上亿级别秒杀系统优化,用这个方案可行吗?

Java架构师迁哥

区块链药品防伪溯源平台搭建,区块链防伪溯源的解决方案

13828808769

#区块链#

【架构实战营】第1模块作业

swordman

架构实战营

“智慧旅游”:区块链能否驾驭文旅行业?

电微13828808271

智慧公安

IDEA实用快捷建

华血

WordPress中常用的8个函数

Sakura

4月日更

架构实战营模块1作业

季节风myy

图尔兹与达梦数据库达成全面战略合作,共筑国产数据库新生态

BinTools图尔兹

数据库 数据安全 操作数据库

【LeetCode】删除有序数组中的重复项 IIJava题解

Albert

算法 LeetCode 4月日更

在微前端中,antd icon createFormIconfontCN 的本地化问题

blueju

大前端 antd umijs

私有依赖的打包与上传

blueju

JavaScript 大前端 npm

物联网设备天线设计与选型指南

不脱发的程序猿

物联网 4月日更 物联网设备天线 天线设计与选型指南 射频

通俗易懂数仓建模—Inmon范式建模与Kimball维度建模

五分钟学大数据

数据仓库 维度建模 4月日更 范式建模

京东云智臻链开源两周年,JD Chain领跑国内自研区块链技术

京东科技开发者

区块链

「架构实战营」作业#1

高亮

「免费开源」基于Vue和Quasar的crudapi前端SPA项目实战—环境搭建 (一)

crudapi

Vue nodejs crudapi quasar SPA

SARIF在应用过程中对深层次需求的实现

华为云开发者联盟

DevSecOps 元数据 SARIF 软件安全 规则

Ubuntu 鼠标手势软件 -- EasyStroke

TroyLiu

Linux ubuntu 效率 快捷键 鼠标手势

Pod 的状态

耳东@Erdong

容器 4月日更

Baas是什么?区块链Baas平台开发解决方案带你知晓

源中瑞-龙先生

区块链 开发 解决方案 Baas

“区块链+电子证照”,推动数字化经济建设

电微13828808271

区块链+ #区块链#

我,第一次做项目经理,干赔了

四猿外

智慧政务,区块链电子证照平台的解决方案

13828808769

#区块链#

浅谈一个优秀的 Android SDK 需要具备哪些要点

神策技术社区

android 数据采集 sdk 神策数据

MySQL-技术专题-Lock入门到精通

码界西柚

MySQL lock

站在巨人的肩膀上!淘宝网Java千亿级并发系统架构设计笔记

Java架构追梦

Java 架构 亿级并发 淘宝网

第 0 期架构训练营模块 1 作业

架构实战营

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