8.4 容量压测及评估规划
要知道一个平台的处理能力是否能支撑大促活动的访问量,最常用的方式是对平台进行性能测试,验证当前平台的处理能力是否能满足预估的系统处理峰值,通过对服务器容量的调整最终达到峰值处理能力的要求。
传统的互联网应用系统的性能测试,不论是常规性能测试,还是系统容量评估,其做法基本是,先通过需求分析得出压测的业务场景及不同场景在压测中的比例关系,或凭借开发、测试人员的经验对线上某一时刻的业务进行分析,得出经验性的测试模型,再通过性能测试工具在测试环境模拟压测,最后分析测试结果、判断系统的最大负载能力。
这种做法的缺陷是测试场景简单,线下环境(即测试环境)中测试出的结果与线上环境(生产环境)并没有对比关系,测试场景是否能较准确的体现出真实场景很大程度上取决于测试人员的经验和水平。
因此面对像双11这样的大促活动,尽管之前做了充分的性能测试,但难免担忧测试场景是否准确,是否全面。一个场景只能模拟某时刻或某时段的平均量,而多场景模拟实施成本非常高,业务变化频繁的系统甚至无法模拟。假设某系统包含多种业务,而且在不同时段的量不同,而传统的做法是模拟其中某一分钟的量或者模拟整个小时的平均量,测试场景和生产业务场景无关联关系,生产与测试性能指标不具对比性。这些原因最终造成大家对于拿到的性能测试和容量评估结果还存在着不同程度的担忧,从而利用增加大量冗余机器的“保险”方式来保证大促活动万无一失。
如何对平台的处理能力有一个更加清晰的了解,以及更科学合理地利用好服务器资源,阿里巴巴技术团队经过了多年的研究、实施、验证,摸索出一套面向分布式应用架构下应用系统容量压测和评估的自动化平台。
该自动化平台通过对生产环境上的流量模型引流到压测服务器上,获取到服务实例单机最大处理能力,结合不同型号服务器处理能力以及生产环境的水位监控信息,对服务集群所需部署的服务器数量进行容量评估及预测。这种方法优点在于:实用,准确,高效。说明如下:
·实用性:任何一个系统通过这种方法在做准确容量预测的同时,也为系统性能回归测试提供了一个完整的测试场景、测试方法,同时也建立了系统的性能基线,以供后续的系统改造复用。
·准确性:由于这种方法模拟生产系统实时变化的复杂流量场景,压测流量模拟具备了业务的真实性、全面性、业务变化的连续性。在实施流程上,从流量建模、容量压测,到分析及预测,都建立在生产环境上,预测结果比靠人员经验的方式准确得多。
·高效性:所有的建模、压测、分析、预测基于同一个平台,同一种监控方式,同一种分析方法,一切都是自动化,效率比常规方法倍增。
应用系统容量预测的实现原理包括:容量压测,容量分析预测两部分。
容量压测是通过将线上真实的流量引流到压测目标机器上,并不会对本系统及下游系统带来额外的流量,也不需要准备测试数据、压测系统。实现将生产环境对服务进行压测实际上利用了HSF服务框架对于服务路由权重的支持,通过对服务路由权重的逐步增加,达到对路由到某服务单机的服务请求逐步增加的目的,运维人员只需在控制台(如图8-11所示)上设置好HSF服务实例的服务、服务路由的权重增长方式、被压测的单机的关键指标(CPU利用率、系统整体负载、QPS、响应时间等)达到的阀值水位后即自动停止压测,以免对生产环境产生大的影响。一旦系统停止压测后,就能在平台上查看到该服务实例在系统资源达到阀值时,单机服务实例所能提供的最大的QPS处理值。
通过容量压测获取到的单机QPS能力后,既能发现一些应用性能的问题,也能对性能优化后的应用再通过容量压测的方式进行验证。
图8-11 容量压测配置界面
容量规划平台(如图8-12所示)还能利用服务的单机QPS数据,结合对各种服务器机型处理能力的差异化分析,对到底需要部署多少线上服务器资源才能满足大促活动有更准确的预测。针对线上环境的水位情况,结合服务的单机处理能力,对线上服务器的增减提供实时的参考决策,避免了因为大量冗余服务器运行部署所带来的资源浪费。
图8-12 容量规划界面
容量压测和评估预测平台使我们对平台各个应用和服务在生产环境下单机QPS处理能力有了准确的掌控,结合多年来沉淀的分析算法,就能更科学地评估面对双11这样的大促时各个服务集群到底需要部署多少服务器,在提升平台精细化管控的同时,为阿里巴巴节约了上亿元的服务器资源成本。
