定义:容量规划是为满足用户目标负载而调整自身生产能力的过程。所以容量规划的主要目的是,解决当系统负载将要达到极限处理能力时,我们应该如何通过垂直扩展(增加单机的硬件资源)和水平扩展(增加集群中的机器数量)增加系统整体的负载处理能力的问题。目前来讲,容量规划的主要方法是基于水平扩展。但是,具体应该增加多少机器,以及增加后系统的负载处理能力是否会线性增长,这些问题都需要通过容量规划测试进行验证。
容量规划目的
当压测单机部署的系统时,我们会采用人工的方式不断增加测试负载直到单机系统的吞吐量指标到达临界值,由此就可以知道单台机器的处理能力。理论上整个集群的处理能力将等于单台机器的处理能力乘以集群的机器数,但是实际的集群整体处理能力一定小于这个值,但具体小多少就是要靠实际的测试验证了。理想的状态是,集群整体的处理能力能够随着集群机器数量的增长呈线性增长。但是,随着机器数量的不断增长,总会在达到某个临界值之后,集群的整体处理能力不再继续呈线性增长。这个临界值是多少,我们也需要通过容量规划测试找出来了。另外,容量规划测试的测试结果还可以被用作系统容量设计的依据。比如,企业级软件产品的目标用户规模通常是可以预估的,那么我们就可以通过这些预估的系统负载计算出软件部署的集群规模。
容量规划目标
容量规划一定要有目标,且这个目标一定要具体。
比如说“系统容量要求达到 1000TPS”,这个目标就很具体,这个 1000TPS 是一个总值,它会被细分到各个业务上,这就用到了对应的业务模型。同时我们还要有具体的指标,比如说响应时间,已经他们的标准方差。如下表所示:
容量规划业务模型
我们在执行容量场景时,只有包括了所有的业务接口,才是真正的容量场景。并且:
-
业务模型的比例要符合生产中的真实业务场景,也就是说,在容量场景中,业务模型一定要覆盖生产环境中的业务峰值
-
业务模型并且还要覆盖生产环境中的最大资源使用率峰值
要想抽取出符合真实业务场景的业务模型,正常的逻辑应该是:先把生产环境中的业务做统计,并给出相应的业务比例,然后把业务比例在压力工具中设置好,并保证结果中的比例和统计出的业务比例一致。
数据量级
容量场景中用到所有的接口,这些接口是有上下的业务逻辑关系的,所以要根据业务逻辑做参数传递,而不是通过造数据来做参数化。如果实在没办法实现,再考虑造数据。
-
容量场景的参数化数据,一定要和生产中实际用户的使用规则与数据量级保持一致。
-
铺底数据一定要通过计算做相应的缩减,需要和生产环境一致。因为测试环境和线上环境硬件资源可能不太一样,所以数据量也应该作出相应的缩减。这个缩减怎么来做?在压力级别和数据量相同的情况下,统计测试环境和生产环境中的资源使用等各类计数器,看看有什么区别。
压力策略
容量场景中的压力策略,必须要做到递增、连续。
-
连续:就是连续的加压
-
递增:因为真实的用户在使用时,业务量也是一步步变大的,所以压测过程中,压力线程和tps是依次递增的