1云计算中的性能与扩展Joyent白皮书综合摘要应用糟糕的性能表现会使得公司丢失客户、降低雇员工作效率、减少保底收入。因为交付环境的不同会使得应用性能表现差异显著,当准备在云上部署并进行开发、或是将应用从传统数据中心向云计算基础架构迁移时,业务必须要对应用的性能进行特定优化。应用可以在云环境和非云环境下测试,以进行基本的性能表现对比。诸如磁盘I/O、RAM存取等应用表现的不同方面,会断断续续地产生性能表现的峰值。然而,正如传统的软件架构一样,总体的流量模式和系统使用峰值是云计算大多数情况下性能问题的来源。当公司越来越多地使用云环境时,容量规划和基于配置的扩充会让现在的应用性能表现超出以前数倍,并解决很多性能问题。不过,规划不是总能解决突发流量问题,有时需要手工初始化。要想获得更好的可扩展性和性能,同时兼顾成本的有效性,就要使用更有效的应用开发方式;这种技术会将代码的执行拆成并行的部分,并由更易于扩展和初始化的资源提供服务。为了响应大家对于云环境中更高表现和更好扩展性的需求,JoyentSmartTechnologies提供可扩展特性和选择,以帮助提升应用的性能,具体包括轻量级虚拟化、灵活的资源初始化、动态负载均衡、存储缓存和CPUbursting。JoyentSmartPlatform开发环境允许业务开发更高效的引用,并易于移植到几乎任何符合开放标准的环境中。目录介绍3为什么要担心云计算的性能?3隔离性能问题的发生原因4对云计算性能的误解5理解性能、扩展和吞吐量6水平和垂直扩展7管理和地理可扩展性8扩展的理论与实际限制9识别应用的可扩展性9提升可扩展性的应用开发9Joyent对于性能和扩展的解决方案10结论12参考资料133介绍很多公司在不断把计算资源从本地运行的数据中心转向私有或公有云计算设施之中,他们应该确保自己的应用和数据能够安全顺利地转换到云之上。特别要注意的是,业务人员应该确保基于云的设施能够交付必要的应用和事务处理性能,不管是现在还是将来。迁移的过程、切换的准备和最终的转换完成,顺利完成这些工作是很多事情的前提。仅仅将应用从传统数据中心的服务器转移到云计算环境、然后打开开关是不够的,公司应该查看性能方面的问题、对于应用是否需要重新开发的潜在可能性、以及对于新的云目标的容量规划,这样才能完全优化应用的性能。应用在传统数据中心的运行表现和云平台的运行表现可能不完全一致。对于应用可能导致性能表现不同的部分或其部署环境,公司要将其隔离开来并分别处理,以确保得到最佳转换效果。然而,在很多时候,云平台的底层基础架构会直接影响应用的性能。业务人员也应该彻底测试为云计算平台开发和部署的应用。理想状况下,业务人员应该测试应用在不同的网络和应用条件下表现出来的可扩展性,以确保新的应用不仅可以处理当前的业务需求,还能无缝扩展以应对峰值需求,而无论其是否符合预先规划。为什么要担心云计算的性能?如果访问数据、应用和Web页面的速度缓慢,雇员和客户就会感到郁闷,有些性能问题和瓶颈甚至会导致应用崩溃和数据丢失。在这些时候,性能——或是表现糟糕的性能——就是公司的竞争力和可靠性的直接反映。客户恐怕不会相信应用出现崩溃的公司,而且也不愿意再次访问由于性能低下、响应速度缓慢而难以使用的商业网站。基于云计算的内部局域网应用也应该在遇到峰值流量时有好的表现。雇员积极的工作效率依赖于坚固可靠的应用表现,这样才能准确快速地完成工作。由于性能问题导致应用崩溃,会消耗金钱并影响士气。糟糕的性能也会伤害业务的拓展。如果应用在面对增长的流量时无法表现出色,公司就会流失客户、减少收入。当前的性能表现良好也不能保证未来不出问题。假如一个应用每小时可以为100个用户服务,如果要为125个用户服务时就有可能出现响应速度急速下跌。基于可预测的流量和系统压力测试进行容量规划,能够帮助公司业务人员根据成本的有效性和他们的云平台的最适宜初始化方式,做出明智的决策。在某些情况下,业务人员有意多部署一些他们的云应用系统,以确保不会出现故障或是性能问题。不管怎么样,公司应该做好规划,想清楚系统增长的需求,确保自己不会流失客户,不会降低雇员的工作效率,不会损伤自己公司的商业声誉。隔离性能问题的发生原因在试图找到云基础架构的性能问题之前,人们应该先确保与云相关的因素没有性能问题。首先,也是最明显的,就是从用户端到应用端通过互联网或是WAN的访问时间。在测试WAN连接时,从多个地理分布的地点运行简单的互联网速度测试程序,甚至是简单的网络ping方法,都能让人知道网络访问的平均损耗。接下来,人们也可以在特定的平台配置上度量应用的性能,以计算平台对于整体性能的影响。将位于传统数据中心中服务器上的应用的响应速度,与云中同样应用的响应速度做对比,可以揭示出有显著影响后果的平台差异,但是不一定能够发现到底是什么平台因素导致了不同。如果应用转移到云基础架构之后,性能出现问题,而且并非网络访问的原因,根据Joyent的经验,很可能是应用的架构方面的问题。只要应用没有为某种特定架构进行优化,那么如果应用写得不好,在不同平台上的性能表现就会很差,为了在云平台上使用而优化应用代码,将会在本白皮书后面的内容中涉及,因为这与更复杂的话题——提升云平台的可扩展性——直接相关。得到最佳的云计算性能,这不是一个容易解决的问题,而且当前很多云计算厂商也没有很好地解决这个问题。5对云计算性能的误解在典型的企业网络数据中心中,服务器、存储和网络交换机一起将数据和应用传送给网络用户。在这种IT场景下,应用必须有足够的CPU和内存进行处理,数据必须有足够的磁盘空间,用户必须有足够的带宽来访问数据和应用。当IT管理员遇到这种情形下的性能问题时,他们常常采取下列方式解决问题:•应用性能糟糕或是遇到挂机状况。这种情况下,应用需要更多内存或CPU资源,更快的处理器或更多内存可以解决问题。•应用或数据访问速度缓慢。带宽常常是问题的主要来源,最常见的解决方法是加入更快的网络连接,把接入计算机使用的网卡从10Mbps换为100Mbps网卡;或者换更快的硬盘,比如用SCSI替换光纤通道存储。虽然这些方法也许能解决数据中心的性能问题,它们对于基于云的应用优化却可能毫无帮助。而且,即使是在数据中心的环境下采取提升应用性能的方法,要处理简单的需求暴增,加入更多CPU和内存成本高昂,更可能造成前期投入的过多浪费。虽然这些方法也许能解决数据中心的性能问题,它们对于基于云的应用优化却可能毫无帮助。而且,即使是在数据中心的环境下采取提升应用性能的方法,要处理简单的需求暴增,加入更多CPU和内存成本高昂,更可能造成前期投入的过多浪费。不过好消息是:面对性能问题,云计算基于在互联网平台上的虚拟资源初始化,不会像传统数据中心那样采取简单粗暴的方法应对。当公司或云厂商采取极度简化的“更多硬件解决问题”的方法来处理云性能问题时,他们就会浪费大量金钱,而且所有的应用问题也没有得到完全解决。然而,这正是很多云厂商试图解决性能问题所采取的途径。虽然他们不会总是要去加更多物理服务器或是内存,不过他们常常会部署更多的虚拟服务器。加入虚拟服务器也许短期内可以解决问题,但是加入机器是要手工完成的工作。如果有一家公司遭遇到流量的突然暴增,厂商要多久才能发现峰值并分配技术人员为该客户部署更多资源呢?这又要花客户多少钱?认为加入更多硬件,无论是物理形式或是虚拟形式,都可以有效解决所有的性能问题,这是个误解;很多公司也许对于性能、可扩展性、网络吞吐量之间的互相依赖关系有错误的认识,而这三者存取应用和数据的方式也并不相同。理解性能、扩展和吞吐量性能。性能常常与应用在云基础架构中的处理能力联系在一起。受限的带宽、磁盘空间、内存、CPU处理周期和网络连接都会导致性能低下。很多时候是因为多种资源的匮乏导致应用性能表现差。有时,性能低下是因为应用的架构不能将其处理过程有效地分布在可用的云资源之中。吞吐量。在云中,数据从A点向B点传送的有效速率就是吞吐量。换句话说,吞吐量是原始速度的度量。虽然加快移动待处理数据的速度可用提升系统性能,系统的速度只能等于其中最慢的元素的速度。比如一个系统部署在10G以太网环境之中,然而它的服务器存储只能以1G的速度访问数据,这个系统的速度也只能是1G。可扩展性。通过提升硬件和软件的吞吐量来持续改善系统的性能,如果系统遇到诸多并发的请求时,这样做就会碰壁。当10G的网络要为上百个请求、而不是几十个请求同时提供服务时,其处理速度就会大幅降低。要想在这种“海量请求”场景中得到更高效的吞吐量和性能,唯一的办法就是扩展——加入更多超载的资源。出于该原因,云中的系统在面临压力时,相对于整体吞吐量或各个组件叠加的性能,系统所具备的易于扩展的能力要远为重要。在云环境中,这样的可扩展性常常是通过水平或垂直扩展完成的。7水平和垂直扩展在云中,希望通过增加资源来恢复或提升应用的性能,系统管理员可以采取水平扩展(scaleout)或垂直扩展(scaleup)两种方式,具体采取哪种要看资源的约束而定。垂直扩展(scaleup)就是为同样的计算资源池中加入更多资源,比如增加更多内存、磁盘或是虚拟CPU,以应对增加的应用负载。水平扩展(scaleout)需要向计算平台中加入更多机器或设备,来处理增长的需求。转换过程可参见在下面的图1和图2。图1:基本的、单个垂直部分的多层架构图2:水平扩展的负责均衡和Web层,垂直扩展的数据库层。在云基础架构中,垂直扩展可以应对很多突发的、临时性的应用请求高峰,因为它们一般都不是消耗大量CPU资源的任务。然而,需求的持续增长需要水平扩展和负载均衡,这样才能恢复并维持峰值时的性能表现。水平扩展同样需要大量纯手工操作,而且耗费时间,需要技术人员向客户的云配置中加入更多机器。为了应对突发流量的手工扩展也许效率并不高,因为在加入新的资源之前,流量可能已经稳定在峰值之前的水平了。NetworkingLoadBalancing+CachingWebTierDatabaseTierLoadBalancing+CachingWebTierDatabaseTierNetworking业务人员也会发现他们正在经历流量的逐步增长。因此,面对资源需求的不断上升,加入额外资源只是临时解决问题之道,因为资源的需求可能会超越新加入的资源所能提供的能力。管理和地理可扩展性虽然加入计算组件或虚拟资源是一种扩展并提升性能的合理方式,很少有公司能够认识到:加入资源也就增加了管理的工作量,特别是采取水平扩展方式时。大体上来看,无论是加入硬件还是虚拟资源,都需要管理方面的时间和资金花费的更多付出。这种管理成本的增加并不是一次可以完成的,因为随着需求增长,资源不断加入,也就需要付出更多监控、备份和维护的工作。在云上部署关键应用的公司也会考虑采取地理扩展的方式,将应用负载需求分布到多个地点,或者便于分散的用户或客户就近使用应用。资源的地理扩展与数据同步备份,也是另一种为基于云的数据和应用添SmartMachines提供bursting功能应对短期的不同负载。SmartDataCenter提供水平扩展应对长期增长。9加容错性和灾难备份的方式。有时候,将所有的数据或应用集中放在一个地方也是不现实的,这时候采取地理扩展也是必要的。扩展的理论与实际限制在云基础架构上,虽然扩展是解决性能问题的最有效策略,实际的和理论的限制使得其无法成为指数性增长、乃至无限增长的解决方案。实际点说,很多公司不可能投入无限的资金、人力和时间来提升性能。云厂商的经验、人力和带宽也受到限制,不可能解决客户所有的应用性能问题。所有的计算基础架构都受制于一定的复杂度和扩展程度,不只是电力、管理、带宽、必要的地域分布等因素。识别应用的可扩展性云计算平台要想有效托管业务数据和应用,它就必须能够容纳多种的性能特性和网络需求。存储、CPU、内存和网络带宽,这些在典型的应用使用中,在不同阶段有其不同作用。举个例子,应用切换主要需要CPU资源,当一个应用关闭后,需要从寄存器中移出,并加载另一个应用。如果这些应用足够大、足够复杂,那就需要大量CPU