查看原文
其他

全方位比较:云托管VS私有云

2015-10-02 云头条

作者简介:本文作者是Redwerk公司以Irina Kovalyova为首的一群开发人员,他们喜欢分享不同软件开发方面的知识,包括Web开发、移动技术及其他方面。Redwerk团队包括大约40名开发人员,他们主攻不同的技术,并乐于将专业知识分享给专业媒体。


引子


近些年来,我们已习惯于频频听到云这个字眼,通常来自IT圈子,尤其是圈内人士在谈论基于Web的项目和服务时。


正是由于他们,云成了货真价实的热门词汇!这个云,那个云,就连普通人都把云挂在嘴边,尽管不知道真正的含意。云似乎被用来几乎描述任何一种SaaS,或者是与Web有关的任何东西。


但是,对云技术而言,事情绝不是这么简单。


云技术在最近这几年得到了迅速发展。IT行业的大玩家大多已经开发或发布了各自的云平台,现在它们正在大力宣传,比如


  • 亚马逊网络服务(AWS),来自亚马逊

  • Azure,来自微软

  • 谷歌云平台,来自谷歌

  • RackSpace,来自OpenStack

  • Cloud Hosting,来自Hosting.com


可是,整个事情果真如此不费脑筋吗?云平台果真是可以解决你所有问题的最具扩展性、最高效的方法吗?


作为一名软件工程师,我一直在工作中使用云平台和专用服务器。而今天,我想与各位分享本人的浅见和经验。我们在本文中将探讨使用云平台与传统方式(即使用专用服务器)的优缺点。我还将根据一些典型的项目,对成本进行一番正面比较。


还是言归正传吧。


基础设施的影响


我认为,对于决定为产品选择一种理想的平台,项目基础设施起到了重要的作用。但是先说重要的:我先来说说软件开发公司在Web产品的基础设施方面可以采取哪些基本的方法。


比如说,任何一家互联网初创公司需要基础设施的四个关键部分:


  • 网站服务器(服务器小程序容器等)

  • 数据库服务器

  • 存储服务器

  • 备份服务器


这些是很合理的部分。当然,没人会阻止你把存储服务器、数据库服务器和网站服务器统统放在同一台机器上运行。而且,常常就是这么干的,主要出于两个原因:


  • 开发阶段镜像/复制产品基础设施:“一切都运行顺畅;我们担心一旦改变基础设施,某部分会出现故障。”

  • 从初始发布方面来看非常省钱、非常高效,初始发布时服务器负载比较小:“我们的营销工作没做好,没人使用我们的产品。”


所以,对这样的项目而言,哪个是理想的生产环境?从上面来看,很显然应选择专用服务器、虚拟独立服务器(VDS)或虚拟专用服务器(VPS)等,而不是云平台。


但是,这果真是唯一选择吗?一开始使用小型VPS,贵公司规模扩大后,改用云平台,果真很方便吗?或者说,就因为有现成的基础设施、高效支持和易于扩展的服务,在云端租赁空间确实会划算吗?还是说,可以在费用低廉时购买竞拍的机器运行时间?


到头来,这完全归结于为产品开发选择的那种方法。


开发方法的影响


我已经说过,平台方面的决策取决于项目基础设施。但是基础设施方面的选择同样受到为实际软件开发采取的方法的严重影响。


对初创公司的项目而言,有两种基本的开发模式:


  1. 敏捷开发:进入生产环境的时间压倒一切。灵活性和快速实施功能压倒其他所有方面。你在需要非常迅速地开发需要尽快上线的产品时,常常采用这种方法;比如说,收集反馈意见,然后决定产品要不要拥有某项功能。

  2. 认真开发:质量和规划压倒一切。产品事先营销和制造,合同早已签好,项目生命周期有保障。如果优先事项是为你的客户交付最满意的解决方案,就采用这种方法。


比较敏捷的方法重视项目迅速启动起来,让你能够尽快开始赚钱。基础设施和潜在发展方面的任何问题退居次席,所以大家有点希望扩展在将来不会成为问题。这样的想法通常会导致你使用VDS/VPS来交付产品。


那么,最初部署到小型专用服务器后,这种产品会出现什么情况?如果产品并不受欢迎,它完全会被叫停。但如果日益庞大的用户群建立起来后,你很快会遇到这个阶段:需要更多资源,而服务器无力提供:很显然,如果你忽视这一点,后果自负。缺少系统资源会给用户体验带来极严重的负面影响。而糟糕的用户体验很快会毁了你的新产品。


这种情况下,正确的做法又是什么呢?下一个合理的步骤就是纵向扩展(vertical scaling)。这意味着,为你自己的服务器购买更多处理器核心、更多内存、更大存储空间、更多带宽以及更多的各项资源。你可能还想购置一台备份服务器,因为没人想丢失用户数据。


可问题是,纵向扩展在技术和成本上都面临自己的局限性,所以如果你的项目继续扩大,你早晚要考虑横向扩展(horizontal scaling),即另外添加一台或多台服务器。而且,这种可能性相当大:你的产品没有为这种类型的部署做好准备;整件事不像仅仅运行产品的两个或多个实例就完事那么容易。所以,就在你为第一台服务器增添资源的同时,开发团队要积极重构建产品,改动基础设施以便为横向扩展提供支持。这反过来意味着出现更多的软件错误,需要更多的测试工作和更高的开发成本。另外,你的备份服务器不仅仅需要不断投入的无底洞,它还需要看管(即升级和维护)。


所以,即使这种极简的方法一开始很奏效,但如果你随后获得了一定规模的客户群,产品开始确实大受欢迎,这种方法带来的问题会超过优点,甚至反而会影响产品的受欢迎程度。


那么,有没有一种更好的办法?不妨看一下认真开发这种方法。


认真开发方法通常意味着,你事先确保自己的经营模式管用。产品已经做好了营销,所以你预计它会相当受欢迎,并获得一定的市场份额。另一种场景是,你需要开发生命周期有保障的企业或政府解决方案。这意味着,你没有权利把产品搞砸,然后发布后修修补补,因为产品一开始就已经拥有相当大的用户群。在这种场景下,任何问题都会严重影响产品声誉。


根据这些影响,认真开发方法注重有保障的交付、产品质量和长期规划。你通常有固定的发布日期和功能交付时间表,这意味着没必要仓促行事、让产品比潜在竞争对手更迅速地投向更广泛的受众。另外,由于有既定预算,不需要大幅削减开发成本。你投入额外的时间和资金,交付最好的产品;你事先做好规划,确保实施的功能没有一个会成为问题,你也不能搞砸任何事。这意味着,质量保证期会更长,可能会使用测试版软件来进行测试。


所以,你为了产品的质量而投入时间和资金,而产品完全始于项目架构和基础设施。你估计了预期负载,做好规划升级,并预测解决方案的增长潜力。这里,云平台将是显而易见的选择。已经为你搭好了一般的基础设施,你没必要管理和维护单台服务器或备份和部署机制。云平台提供了轻松扩展的优点,所有琐碎的事情都已经替你搞定。它为你大大简化了工作,但一开始成本比较高。


当然,这每一种开发方法都有其他的许多优缺点,而我在这里着重介绍对基础设施决策带来的影响,以及使用一套专用服务器来得明智,还是使用云平台来得明智?


现在不妨总结每种交付方法的优缺点。


优缺点概述


不管你为产品选择了哪一种交付方法,无论如何都需要估计初始项目部署的硬件需求。


万一你选择了专用服务器,尤其是重要的服务器,正确估计各方面至关重要,因为在繁重负载下,这种服务器很快就会出故障。另一方面,你也不想花大把的钱购买大多数时候闲置的服务器。如果产品的受欢迎程度出现变动,资源稀缺时,可以放弃产品的发展,或者因高性能服务器需要大笔维护费而损失部分利润。选择虚拟专用服务器而不是物理专用服务器让你更加从容,因为你可以更迅速地应对变化了的产品需求。然而,即使在这种情况下,也需要没完没了地增减系统资源,这可能很烦人。


有了云平台,你的资源管理变得极其顺畅,而且在资源和机器运行时间成本方面变得更高效,不需要对一切实行事无巨细的管理。云平台还建立了复制机制,那样你不需要过多地担心硬件故障。但是如往常一样,获得这种便利是要付出代价的。


下面总结了专用服务器相比云平台的优缺点:


云实例的优点:


  • 只要为使用的资源付费

  • 虚拟实例数量不受限制(扩展)

  • 磁盘空间不受限制

  • 动态实例可根据负载大小来扩展

  • 快速轻松地部署软件

  • 硬件故障切换期间可快速恢复

  • 自动备份


云实例的缺点:


  • 存储成本相当高昂

  • SQL存储成本高昂

  • 带宽有限、成本高昂

  • 相比专用服务器实例,性能较低

  • 无法控制硬件

  • 不付费,就无法访问服务器和数据


专用服务器的优点:


  • 磁盘空间和SQL存储成本较低

  • 带宽便宜

  • 性能出色

  • 全面控制硬件


专用服务器的缺点:


  • 物理实例扩展受到限制

  • 硬件故障

  • 存储空间有限

  • 电力资源因闲置而浪费

  • 为管理增添了成本


所以,一些方面总是成本较高,而另一些方面比较便宜,这取决于我们选择走哪条路子。但是不妨看一下两者在成本和维护费方面的比较。


成本估算并不简单


眼下,如果你的产品在云端运行,很难准确地分析成本,因为竞争非常激烈。每家提供商都有各自的特殊价格方案和促销活动等。而且,由于竞争这么激烈,加上机器运行时间成本总体下降,云方案所需的总体投入在变得越来越低。


另一方面,专用服务器是一个完善市场的一部分,所以这方面分析每家提供商相当简单直观。不过,这应该不是选择云平台还是专用服务器的一个关键因素。


如上所述,专用服务器存在两大问题:


  1. 负载可能会有变化,这可能需要不断调整资源数量,确保产品高效。

  2. 你无法一直纵向扩展服务器。迟早,你需要横向扩展;比如说,将数据库服务器迁移到不同的机器,安装一套负载均衡系统和缓存机制。你会遇到存储问题;到一定阶段,还需要配置卷影、性能监控和可靠的备份程序。你的项目变得越庞大,带来的问题和额外成本就会越多。


换成云,情况就完全不一样。若使用AWS或Azure,系统资源管理起来要容易得多。只要点击几下鼠标,就能轻松获得更多的数据库实例或Web实例,并安装负载均衡机制。你还有可能自动处理任务,比如根据当前系统负载,启动或关闭额外实例。


确保系统软件最新也是一个简单流程,不会占用你的太多时间。另外在云端也不存在单一硬件故障点之类的问题。果真出现了某种硬件故障,数据丢失的可能性也比基于专用服务器的存储方案低得多。当然了,像复制、备份和备份管理这些重要操作也实现了自动化。系统切换到后备服务器时,你的用户通常甚至注意不到这点。


很显然,换成专用服务器,整个过程麻烦得多。至少,“开箱即用”的服务器是这样。如果专用服务器合理安装,你能获得类似的体验。可问题是,需要一支训练有素的团队才能做到这一点。


另一方面,许多云平台提供了完整的迁移机制,所以如果你不确定项目会多迅速地扩大,很容易从小型VPS开始入手,以后等时机成熟再改用云。


好了,不妨实际正面比较一下两者的成本。为此,我选择了两种标准产品。第一种产品是典型的企业门户,第二种产品是高负载的SaaS产品。


费用比较


在这章节,我将认真详细地分析一下上述两个项目(典型的企业门户和高负载的SaaS产品)在性能、存储和带宽方面的要求。



描述优缺点的信息图


我们可以从图中看到,对高负载项目而言,价格变化很大。就当下而言,一开始选择云这条路成本要高得多,而使用一批专用服务器要便宜得多,哪怕考虑额外的维护和管理成本后也是如此。


因而,你考虑构建和维护自己的基础设施,至少项目开始阶段这么做,这很合理,也建议你这么做。(如果你觉得好处压倒价格,以后总是可以迁移到云)。另一方面,如果你算错的可能性很大,合理规划基础设施方面又缺乏丰富经验,或者如果你预计一开始负载就很高,那么使用云平台要稳妥得多,因为万一出现服务器过载或故障,较低费用弥补不了拒绝服务,然而,即使对大型部署环境而言,拥有自己的基础设施也会有许多优点,并为你省钱,如果做法得当的话。


结论


考虑到本人经验以及我们所交付产品具有的一般性质,眼下我会偏向专用服务器,而不是云。


话虽如此,我还是意识到云平台在迅速不断完善,新的、方便的功能和服务每天添加到云平台上,而那些解决方案的费用在变得越来越低。由于机器运行时间变得越来越便宜,我可以充满信心地说,云平台是未来;大多数Web项目会驻留在云端,宜早不宜迟。


我希望,各位在阅读本文后,比较清楚云平台和专用服务器各自的优缺点。但愿,各位现在也比较清楚地了解选择其中之一的理由。


新闻来源:developer.com|云头条翻译(未经授权谢绝转载)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存