可以理解为常规的性能测试更偏向先有需求再出结果,而容量测试更注重预先评估结果,针对结果进行计划性的有步骤的验证。
如果分类的话,可以将容量测试要做的事情,分为如下三种情况:
- 日常事件:日常的迭代压测、性能巡检。
- 计划事件:比如新服务上线、双十一大促。
- 突发事件:比如线上流量突增、异常告警、紧急扩容。
容量测试就是为了达成容量保障目标的一种持续验证手段,要解决的问题除了日常工作中的需求,还要有计划的应对未来的需求,以及预期可能出现的容量风险并做好应对措施。
四、容量规划
1、为什么需要容量规划?
对于业务越来越复杂的商业形态,每个业务都由一系列不同的系统来提供服务,每个业务系统都部署在不同的机器上。容量规划的目的在于让每一个业务系统能够清晰地知道:
- 什么时候应该增加服务节点,什么时候应该减少服务节点(比如服务端接受到的流量达到什么量级)?(比如双十一,大促,秒杀)
- 为了双 11 、促销、秒杀、渠道拓展引流等业务需求,需要扩充到什么数量级的服务,才能即保证系统的可用性、稳定性,又能节约成本?
2、容量规划四步走
① 业务流量预估阶段:通过分析历史数据以及实时的线上监控,预估未来某个时间点或者某个业务可能会有多少的流量冲击。
② 系统容量评估阶段:根据具体的业务场景,分析每个业务场景的流量配比,然后计算每个业务大概需要多少服务节点来提供可靠稳定的性能支撑。
③ 系统容量测试阶段:通过全链路压测或者PAT/UAT环境的压测,来模拟真实的业务场景,确定每个服务节点的具体性能表现,进行针对性的调整。
④ 流量分配调整阶段:根据压测的结果,设定限流、服务降级、熔断、隔离等系统保护措施,来预防当实际流量超过系统所能承受的最大流量时系统无法提供服务。
3、计算公式
容量规划常规的计算公式如下:
A服务单机容量在50%水位时,TPS=200,设定为T;线上流量转化预估TPS为3000,设定为S;为保障服务高可用,预留30%机器资源做扩容buffer,设定为B。
那么A服务最终线上需要部署的机器数量的计算公式为:
Count(A)= (1+B)*(S/T)
Count(A)= (1+30%)*(S/T)= 19.5台机器;取整,那么服务A线上容量规划时,需要部署20台机器。
注意:
- 水位,一个带有刻度的容器当前装有液体的水面位置则为水位,而服务的最大水位就是系统的极限TPS;而服务的当前水位 = 当前总TPS/(单台机器极限TPS*机器数)*100%
- 服务的处理能力是有限的,而且为了保障服务的稳定可用性,不能让服务器持续处于高负载的状态,因此要提前预留一定的资源可用比率,作为缓冲区。
4、扩容手段
1)垂直扩容
升级服务的硬件配置,让单个服务节点的容量更大,来提供更高的系统服务能力。比如:加大服务机器的CPU数量和内存,更换性能更好的高速缓存服务器,数据存储用NAS盘替换等。
2)水平扩展
增加服务节点的数量,让可提供服务的服务变得更多,来提升系统总体的服务能力。
常见的方式有:
- 服务集群:服务器的数量由1→N(但需要重点关注负载均衡)。
- 分布式:提供服务的节点由统一集中管理部署,分散到不同的地点。
- 容器:提供更灵活的弹性扩容机制,根据具体的访问流量大小来弹性扩容或者缩容。