容量规划是一个产品满足用户目标需求而决定生产能力的过程。
只有线性可水平扩展的集群才适合做容量规划(能通过获取一个节点的处理能力,计算出集群的处理能力)。
线上压测到单节点的某一指标达到临界值,从而计算出集群的最大处理能力,再根据线上历史监控获得当前集群实际运行负荷,通过计算即可求出理论服务器数。
若计算出集群当前的负荷快达到极限处理能力时,则可以通过垂直扩展(加CPU/内存/磁盘)和水平扩展(加服务器)两种方式来增加集群容量。
容量规划共分六步。
第一步,需要明确目标。
容量规划的目标是集群实际负荷小于等于集群理想负荷。
集群水位=集群负荷/集群能力 * 100%
集群能力=单机能力 * 实际服务器数
标准水位=标准负荷/标准集群能力 * 100%
标准集群能力=单机能力 * 理论服务器数
又因为集群负荷=标准负荷
所以集群水位 * 实际服务器数=标准水位 * 理论服务器数
理论服务器数=集群负荷 * 实际服务器数/(标准水位 * 集群能力)
注:单机能力是单台服务器压测阀值qps,是线上压测数据;
单机负荷是前一天单台服务器最大qps,是线上监控数据;
集群能力是单机能力 * 实际服务器数,是线上压测数据;
集群负荷是前一天集群最大qps,是线上监控数据;
单机水位是单机负荷/单机能力 * 100%;
集群水位是集群负荷/集群能力 * 100%。
当然满足目标的同时,集群的状态是受到约束的,资源是不可能无限供应,终会有一项资源会达到临界值。
约束条件有两类,一类是服务类,另一类是资源类。
服务类约束条件主要是响应时间小于等于200ms。
资源类约束条件主要是CPU利用率小于等于80%;内存占用小于等于1GB;磁盘IO使用率小于等于60%;带宽小于等于200Mbps。
第二步,需要了解集群特点。
不同的集群在选取容量指标和约束条件时是完全不同的,容量指标主要用于衡量集群的处理能力,而约束条件是压测停止的信号。
对于CPU密集型的集群,常常选择TPS(每秒处理请求数)作为集群的容量指标来衡量集群的处理能力,而约束条件则会重点关注CPU的使用率是否会率先达到瓶颈。
对于存储型的集群,选择流量(MB/S)作为容量指标,存储型的集群的TPS依赖于服务数据的大小,所以流量更适合来衡量集群的处理能力,而约束条件最先达到瓶颈的是网络流量或者IO。
若想要判断集群式的类型,则可以通过线下的性能测试结果来判断,线下的性能测试可以作为线上压测的参考依据。
第三步,需要选取合适的容量指标。
容量指标主要用于衡量服务器的处理能力。
容量指标的选取原则:
1)线上数据可采集;
2)能够客观反映服务器的处理能力。
作为容量指标,需要通过线上监控获取统计数据,其历史数据用于计算集群的实际负荷,而通过压测获得集群的最大处理能力。
第四步,需要明确约束条件。
约束条件主要是线上压测停止的信号,包括服务类指标和资源类指标。
只要有一项指标达到临界值,就会停止压测,并将当前容量指标的值作为集群的最大处理能力。
服务指标的选取原则:
1)服务需求——保证产品的服务质量;
2)资源使用瓶颈——保证系统的安全。
第五步,需要进行线上压测。
线上压测主要用于获取集群的最大处理能力。
线上压测的手段主要有三种,分别为模拟请求、线上引流和修改负载权重。
对于不同的集群系统架构特点和服务类型,选取不同的压测手段。
第一种压测手段:模拟请求。
模拟请求是模拟客户端的调用方式向压测服务器发起请求,简单易操作。
测试数据:
可以通过分析线上日志,根据线上服务配比建立压测模型,对于HTTP请求服务,可以通过提取线上日志数据URL直接用于压测请求数据。
实施步骤:
1)将线上一台节点offline,测试客户端直接连接被测服务器;
2)客户端梯度增加并发(50),不断增加并发直至超过设定的服务指标。
优缺点:
测试效果不受服务实际流量的限制,压测时间灵活,适用于GET请求不会产生脏数据。服务类指标可以通过测试客户端直接获取。
风险评估:
风险低,首先服务器offline不会影响到线上的正常请求;其次缓慢增加并发,不会造成服务崩溃的情况。
第二种压测手段:线上引流。
线上引流是将线上其它节点的请求复制到被测服务器上的操作,推荐使用Tcpcopy工具。
测试数据:线上请求直接复制引流,无需准备数据。
实施步骤:
1)将线上一台节点Offline,按照Tcpcopy部署的方法部署client和server,通常将Tcpcopy部署在nginx所在服务器,被压测服务器前需要增加一层nginx服务器;
2)将集群的其它节点流量复制到offline节点上,可以通过“tcpcopy –r参数”逐步增加复制系数,不断增加“-r参数”,直至超过设定的服务类指标;
3)若100%全部线上流量都不能压测到offline节点的瓶颈,则需要再次逐步放大引流系数。
优缺点:
请求真实,能够放大流量,测试效果不受服务实际流量的限制,压测时间灵活,但环境部署稍微麻烦,对于PUT请求需要做一些服务处理,避免产生脏数据。
风险评估:
风险低,首先服务器offline不会影响到线上的正常请求,缓慢增加流量复制,不会造成服务崩溃的情况。
第三种压测手段:修改负载权重。
对于一个集群,前面往往会有负载均衡服务器,通过修改nginx中upstream模块的负载均衡weight,可以不断增加集群某一节点的请求数,增加其访问压力。
测试数据:无需准备。
实施步骤:
1)缓慢增加nginx的负载均衡系数,使被测节点压力不断增加;
2)直至超过设定的服务类指标,停止增加压力。
优缺点:
完全真实的场景,压测数据准确,但是依赖自身的流量,压测时间不灵活,需要处于高峰期,对用户体验有一定影响。随着一台服务器的负载增加,响应时间会受到一定影响,这会直接反馈给在线用户。
风险评估:
风险低,虽然在高峰期进行压测,但是只需要修改nginx配置,再重启服务,这个对服务基本无影响。每次逐步增加weight不会出现服务器崩溃的情况。
第六步,需要进行线上监控。
线上监控不仅用于收集集群历史数据,监控计算集群的实际负荷,还用于在压测过程中,监控约束条件中的各种指标是否超限并停止压测。根据集群的特点和之前性能测试经验,关注容量指标和约束条件的服务和资源指标。集群历史数据是需要进行长期采集和整理的。
上一篇:苹果兜售新故事,从卖不动的iPad开始 卖苹果故事总结 苹果新款ipad开始卖
下一篇:港大开源图基础大模型OpenGraph:强泛化能力,前向传播预测新数据 港大开源人工智能模型 港大开源gpt模型