近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关理念,并以最佳实践的方式加以实施。在今天的“信息时代”,这些理念更加适用于不断增长的数据集,不可预知的流量模式,以及快速响应时间的需求。本文将强调并重申其中的一些传统观念,并讨论他们如何在融合云计算的发展,还将讨论由于云计算的动态性而产生的一些前所未有的概念(如弹性)。
云计算的商业优势
在云中构建应用程序有一些明显的商业优势,这里列出机构主要特点:
前期基础设施投资几乎为零:如果你要建立一个大型的系统,它可能需要大量投资用于于机房,物理安全,硬件(机架,服务器,路由器,备用电源),硬件管理(电源管理,散热),和运维人员。由于高昂的前期成本,该项目通常甚至开始之前需要多轮的管理审批和论证。现在,采用公有云环境,几乎没有固定成本或启动成本。
基础设施即时性:在过去,如果你的应用程序开始大规模上量,而你的系统或基础设施没有在规模上跟上来,将会极大影响应用的成功。相反,如果前期投入了大量资金,而应用没有得到普及,你的系统或基础设施又将成为失败的牺牲品。通过在云环境自适应部署应用程序,就可以不必担心是否要预先采购大型的系统。这增加了灵活性,降低了风险和运营成本,因为你可以根据用于成长的规模而按需支付费用。
更有效地利用资源:系统管理员通常会担心新硬件的采购(资源耗尽的情况)和更高的基础设施利用率(资源冗余余或闲置的情况)。在云环境中,我们可以根据该应用程序请求量更高效地管理资源以及有效地按需释放资源。
根据使用计算成本:用工具式的定价,可以只对已使用的基础设施付费而不必支付那些分配了但未使用的基础设施。这增加了一个节省成本的新维度。当部署了优化补丁来更新云应用时,你可以立竿见影地看到成本节约(有时会提前出现在下个月的账单里)。例如,如果一个缓存层可以减少70%的数据请求,你马上就可以在下一个账单里看到回报。此外,如果您正在云上构建一个平台,同样可以把这个灵活可变的基于使用的成本结构传递给自己的客户。
缩短产品上市时间:并行化是加快处理速度的重要方式。如果一个计算密集型或数据密集型任务在一台机器上并行处理需要运行500小时,通过云架构,能够复制并运行500个实例来处理相同的任务,并在1小时内完成。具有弹性的基础设施提供了利用并行化的成本效益来缩短产品上市时间的能力。
云计算的技术优势:
云计算的技术优势如下:
自动化 :“脚本化的基础设施”:可以通过充分利用可编程(API驱动的)基础设施,可重用构建和部署系统。
自动扩展:无需任何人工干预,就可以根据需求对应用进行双向扩展。自动缩放提高了自动化程度从而更加高效。
主动扩展:基于需求预期和流量模式的合理规划,可以对应用进行双向扩展让从而保持低成本运营。
更有效的开发周期:可以很容易地克隆开发和测试环境到生产系统。不同阶段的环境可以很容易地推广到生产系统。
改进的可测性:不需要进行硬件耗尽的测试。注入和自动化测试能够持续在开发过程的每一个阶段。我们可以建立一个预配置环境——“即时测试实验室”,仅用于一段时间的测试。
灾难恢复和业务连续性:云服务为维护一系列DR服务器和数据存储提高了低成本选择。使用云服务,你可以在几分钟内完成将某一地点的环境复制到其他地域的云环境中。
流量溢出到云环境:通过几次点击和有效的负载均衡策略,可以创建路由将超出的访问流量转移到云环境中的一个完整的防溢应用程序。
云计算中的基本理念
云计算强化了构建高度可扩展互联网架构的一些基本理念,同时引入了一些新的概念完全该变量应用的构建和部署方式。因此,当你在从概念设计到实施的过程中,你可能会感到“什么都变了,却又没什么不同”。云计算改变了处理方式,模式,实践方式,甚至哲学理念,同时强化了传统的SOA原则,这些原则比以前更加重要。在本节,你将看到云计算中的新概念以及对SOA原理的重申。
构建传统应用时,权衡体系结构和经济性之间的关系需要大量的开发经验. 云计算带来了新的理念,现探讨如下:
构建可扩展架构:
为了获得一个可扩展基础设施的好处,构建一个可扩展的架构非常关键。
云计算在设计上提供了概念上的无限可扩展。但是,如果你的架构部署可扩展的,也无法使用到云计算的可扩展性带来的优势。
你必须确定架构中的瓶颈和单点组件,确定架构中哪些是不能按需部署的部分,然后重构应用来调整为可扩展的架构,从获得云计算的益处。
一个真正可扩展应用的特点:
增加资源就可以按比例增加性能
一个可扩展的服务可以处理异构的兼容性
一个可扩展的服务可以有效的运营
一个可扩展的服务是弹性的
一个可扩展的服务能够在业务增长时成本更低(单位成本随着单元的增加而递减)
这些特性应该是应用中的固有部分,在架构设计时要铭记于心,基础设施和应用架构要协同工作完成可扩展性。
对弹性的理解
下图解释了一个云应用架构中按需扩展的不同方法。
放大扩展的途径: 使用可扩展的应用架构不用担心为了满足需求而大规模投资以及购买更强大的服务器(垂直扩展)这种方法通常工作到一个点,但是在新设备部署前就可以降低成本 (见图中的“Huge capital expenditure” )或者满足业务增长的需要 (见图中“You just lostyour customers”).
传统向外扩展的途径: 创建水平扩展的架构和投资小块的基础设施。大多数业务或大规模web应用都采用如下的模式,分布式应用组件,联合数据集和SOA的设计。 这种方法通常比放大扩展更有效。然而,这需要准确的业务预期才能实现满足需求的部署。经常会导致容量过剩(“烧钱”) 和持续人工监测 (“浪费人力成本”).此外,如果遇到业务的爆发式增长,系统将无法正常工作。
注意:这两种方法具有初始启动成本,而且在本质上是被动的。
传统结构一般要预测几年内系统所需资源的数量,如果预计不足,应用将没有马力处理预期外的流量,从而导致客户的不满。如果预计过高,又造成资源浪费。
按需部署和弹性是云计算的天然方式(自动弹性),使基础设施与真实需求尽量匹配,因而可以提供资源利用率及压缩成本。
弹性是云计算的一个基础属性。弹性通过微量的调整即可实现计算资源的可扩展性增减。弹性给云计算带来绝对的优势,这非常重要。 作为云计算架构,要牢记这一概念,并应用到系统架构中,才能获得云计算的最大利益。
传统上,以一个固定的预部署的刚性基础设施来构建应用,公司不需要每天都要进行安装部署。结果使大多数软件架构不适用快速部署和硬件缩减。既然获取新资源需要较高的实施时间和追加投资,软件架构也不会在硬件利用率的优化是投入时间和资源,应用在低使用率的硬件上运行时可以接受的。在分钟级获得新资源是不可能的,所以一个架构的弹性也是被忽略的。
在云计算中,这是观念的改变。云计算以流水线处理的方式获取所需资源,不再需要预先采购设备和保留闲置的硬件。云架构可以在几分钟内完成资源采购或者自动化采购,从而拥有了大量扩展和响应时间的优势,同样,也可以释放掉那些闲置的或低利用率的资源。如果在你的系统架构中不能拥抱这样的变化,就不能分享云计算的全部好处。
作为一个云应用架构师,你需要创造性地思考在应用系统中实现弹性。 例如,基础设施被用来白天运行,晚上构建,在凌晨2点执行回归和单元测试两个小时 ,其他时间都是空闲的。现在,基础设施有了弹性, 可以只支付晚上两个小时的计算时间。类似的,内部故障经常出现在容量的峰值(例如5 服务器 24x7x365),现在可以按照流量模式来按需配置(如5 服务器从9AM 到 5 PM 运行,而只用2个服务器在5 PM 到 9 AM运行)。
云架构的智能弹性设计使基础设施能够按需运行,这本身就是一门艺术。弹性应该是一种架构设计的需求或者系统属性。你可能会问:系统架构中的哪些组件或者层次可以成为弹性的?用什么技术可以使这些组件变得有弹性? 实现弹性对系统架构的整体有何影响?
在下一章,将会展示在应用中实现弹性的相关技术。有效地利用云计算的弹性优势,是架构中非常重要的观念。
无惧约束
当你决定架构应用向云计算迁移的时候,或者将自己的系统规范映射成云服务时,要注意到云计算中没有原来所需的准确资源定义。例如,云计算中一个服务器没有RAM的数量,或者一个数据库实例需要更多的IOPS。
要理解云计算提供的是抽象资源,这才使按需实施模式变得强大。当使用云资源时不用担心不够用,你的硬件没有真正确切地复制在云环境中,这非常重要,你能够获得任何你所需要的资源。
例如,云计算没有告诉你一个服务器中确切的内存数量,使用了向memcached的分布式缓存,或者将数据在多个服务器上做了分区。如果你的数据库需要更多的IOPS,且不能映射到云中的服务,可以根据使用用例和数据类型选择其他的云计算方案。如果是一个重度读应用,你可以将这些读请求分布到一组同步的从服务中。另一种方法是,采用分片算法来路由数据,或者采用各种数据库集群解决方案。
回顾一下, 当你将灵活性和按需实施能力结合在一起的时候,就已经意识到资源约束的解除显然提高了可扩展性,改善了系统的整体性能。
虚拟化管理
云计算的到来将系统管理员的角色变成了“虚拟系统管理员”。这意味着这些管理员们更关注应用本身那些有趣的事情,以及从整体上决定哪些对业务是最佳的。系统管理员不再需要部署服务器,安装软件以及连接网络设备,所有这繁复的工作都可以通过几下点击和几个命令行调用就完成了。基础设施的可编程化使云计算自动化程度更高。系统管理员需要升级自己的技术结构来学习如何使用脚本管理抽象的云资源。
类似地,DBA的角色也变成了“虚拟DBA”,通过基于web的终端管理资源,执行脚本在容量用光时增加新的数据库容量,以及每天的自动化处理。
虚拟DBA必须学习新的部署方法(通过虚拟机镜像),拥抱新的模型 (并行查询,远程灾备和异步复制),反思数据的架构方法 (分片,水平分区,联盟) 以及针对不同数据集采用不同的云存储服务。
在传统企业中,应用开发者没有和网络管理员在一起紧密的工作,网络管理员也没有关于应用的胶水。结果是,网络层和应用架构层优化经常被忽略。 通过云计算,二者被凝聚在一起,在将来做应用架构的时候,公司将形成更多的跨团队融合。