2月5-7日QCon全球软件开发大会携手100+位大咖讲师与你相约北京,完整日程已上线>> 了解详情
写点什么

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

评论

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

Salesforce服务可观测性设计模式

俞凡

微服务 可观测性 大厂实践 Salesforce

深度学习优化层技术

Clarke

第六个模块作业

achilles

在线HTML美化格式化工具

入门小站

工具

如何保持知识与技能的先进性

长沙造纸农

学习方法 方法论 认知提升 学习笔记 技能提升

拆分电商系统为微服务

石小天

「架构实战营」

电商系统微服务拆分

邹玉麒

「架构实战营」

毕业总结:

Anlumina

#架构实战营

电商系统微服务拆分

随欣所遇

架构训练营5期

公平的获得财富的机会,区块链通证经济是未来的必然趋势

CECBC

模块6作业:电商系统微服务拆分

炎彬

「架构实战营」

Vuex在TSX中的改造方案:TS改造Vue2项目Vuex如何处置?

zhoulujun

Vue3 vue2 tsx vuex-class vuex-module-decorators

失眠的岁月,我们都交了哪些科技智商税?

脑极体

电商系统微服务拆分

张逃逃

模块六作业

Mr小公熊

架构实战营:模块六业

刘璐

聊聊 Webpack 插件系统的关键实现 Tapable

蛋先生DX

JavaScript 前端 webpack

一文搞懂I2C总线通信

不脱发的程序猿

嵌入式 通信协议 I2C协议

[Day1]-[广度搜索(BFS)] 二叉树最小高度

方勇(gopher)

LeetCode BFS 数据结构算法

电商系统拆分为微服务

凌波微步

「架构实战营」

电商系统微服务拆分

风中奇缘

#架构实战营 「架构实战营」

毕业设计

Anlumina

「架构实战营」

Web 3.0是什么?区块链热潮下2022年必懂的科技概念

CECBC

在线HTTP/HTTPS协议GET,POST,RESTful接口测试

入门小站

工具

电商微服务架构拆分

Fingal

架构实战营

Linux之seq命令

入门小站

Linux

READS: Salesforce服务健康指标最佳实践

俞凡

微服务 最佳实践 可观测性 大厂实践 Salesforce

《直击本质》——读后上

圣迪

系统性思考 直击本质 金字塔原理 本质

Orbiton JS:用于构建 UI 的 JavaScript 库

devpoint

JavaScript 3月月更 Orbiton JS

KCP协议:从TCP到UDP家族QUIC/KCP/ENET

zhoulujun

网络加速 KCP 游戏加速 quick 带宽优化

架构训练营模块六

刘帅

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