容量规划概述

简介:

俗话说,"人无远虑,必有近忧", 容量规划就是"远虑"。所谓容量规划,是一个产品满足用户目标需求而决定生产能力的过程。当产品发展到一个较为稳定成熟的阶段,产品的整体处理能力的把控自然是不可或缺,尽管我们在线下做 性能测试能够获得一些数据,其参考价值终究有限。但是我们常常被问到以下一些问题而无以应对。
  (1)单台节点到底最大处理能力是多少?
  (2)目前线上有多少容量正在被使用?
  (3)在一次大促前当前的机器数是否能够支撑?
  (4)什么时候需要增加机器?加多少?
  这时候,容量规划就显得格外必要了。通过集体组织的容量规划 学习,谈谈自己对容量规划的认识和理解。
  什么样的集群适合做容量规划?只有线性可水平扩展的集群,我们才能通过获取一个节点的处理能力,计算出集群的处理能力,否则将会费很大物力和人力。
  怎么做容量规划?一句话概括:线上压测到单节点的某一指标达到临界值,从而计算出集群的最大处理能力,再根据线上历史监控获得当前集群实际运行负荷,通过计算即可求出理论机器。
  容量规划能指导我们做什么?如果计算出集群当前的负荷快达到极限处理能力时,我们可以垂直扩展(加CPU/内存/磁盘)和水平扩展(加机器)两种方式来增加集群容量。
   容量规划六步走
   Step1 明确目标
  容量规划和计算,我们可以用运筹学中的优化命题来定义,优化命题的目标是集群实际负荷 <=集群理想负荷,求解这样一个不等式优化命题,同时系统需要满足一定的不等式约束条件。
  ü  目标:
  ü  约束条件:
  当然满足目标的同时,集群的状态是受到约束的,资源是不可能无限供应,终会有一项资源会达到临界值
   Step2 了解集群特点
  不同的集群在选取容量指标和约束条件时是完全不同的,容量指标在后面会介绍,主要用于衡量集群的处理能力,而约束条件是压测停止的信号。举例说明,对于CPU密集型的集群,我们常常会选择TPS(每秒处理请求书)作为集群的容量指标来衡量集群的处理能力,而约束条件中则会重点关注CPU的使用率是否率先成为瓶颈;对于存储型的集群,选择流量(MB/S)作为容量指标,存储型的集群TPS依赖于业务数据大小,所有流量更适合作为表征集群的处理能力,而约束条件最先成为瓶颈的是网络流量或者IO。
  而判断集群式何种类型则可以通过线下的性能测试结果来判断,线下的性能测试可以作为线上压测的参考依据。
   Step3 选取容量指标
  容量指标主要用作衡量服务器的处理能力。容量指标的选取原则:1)线上数据可采集2)能够客观反映服务器处理能力
  作为容量指标,需要通过线上监控获取统计数据,其历史数据用于计算集群的实际负荷,而通过压测获得集群的最大处理能力。如上所说,CPU密集型集群常选TPS作为容量指标,而存储型集群常选流量作为容量指标。  Step4  明确约束条件
  约束条件的存在主要是作为线上压测停止的信号,常常会包括业务指标和资源指标。其中只要有一项指标达到临界值,则停止压测将当前容量指标的值作为集群的最大处理能力,例如某项服务质量要求响应时间不超过100ms,那当响应时间达到临界值时,尽管其它指标并没有达到极限但是也把此时作为集群最大处理能力。因此服务指标的选取原则:1)业务需求 2)资源使用瓶颈。一则保证产品的服务质量,二来保证系统的安全。
  Step5 线上压测
  线上压测的主要目的主要用于获取集群的最大处理能力,而对于线上压测的手段主要介绍三种,针对不同的集群系统架构特点和业务类型选取不同的压测手段。
   模拟请求
  模拟请求,即是模拟客户端的调用方式向压测服务器发起请求,简单易操作。
  测试数据:可以通过分析线上日志分析,根线上业务配比建立压测模型,对于HTTP请求业务还有一种简单的方式,通过提取线上日志数据URL直接用于压测请求数据。
   实施步骤
  ü  将线上一台节点offline,测试客户端直连被测服务器
  ü  客户端梯度增加并发(50),不断增加并发直至超过设定的服务指标
   优缺点
  测试效果不受服务实际流量的限制,压测时间灵活,适用于GET请求不会产生脏数据。业务指标可以通过测试客户端直接获取。
   风险评估
  风险低,首先机器offline不会影响到线上的正常请求;其次缓慢增加并发,不会造成服务崩溃的情况。
   线上引流
 
  线上引流,即将线上其它节点的请求复制到被测服务器上,推荐使用Tcpcopy工具。
  测试数据:线上请求直接复制引流,无需准备数据
   实施步骤
  ü  将线上一台节点Off-line,按照Tcpcopy部署的方法部署client和server,为了便于指标的统计,通常将Tcpcopy部署在nginx所在服务器,被压测服务器前需要增加一层nginx服务器。
  ü  将集群的其它节点流量复制到off-line节点上,可以通过tcpcopy –r参数逐步增加复制系数,不断增加-r参数直至超过设定的服务指标
  ü  如果100%全部线上流量都不能压测到off-line节点的瓶颈,再逐步放大引流系数
   优缺点
  请求真实,能够放大流量,测试效果不受服务实际流量的限制,压测时间灵活,但环境部
  署稍微麻烦,对于PUT请求需要做一些业务处理,避免产生脏数据。 风险评估
  风险低,首先机器offline不会影响到线上的正常请求,缓慢增加流量复制,不会造成服务崩溃的情况。
   修改负载权重
  对于一个集群,前面往往会有负载均衡服务器,以Nginx为例,通过修改Upstream模块的负载均衡weight可以不断增加集群某一节点的请求数,增加其访问压力。
  测试数据:无需准备
   实施步骤
  ü  缓慢增加nginx的负载均衡系数,使被测节点压力不断增加
  ü  直至超过设定的服务指标停止增加压力
   优缺点
  完全真实的场景,压测数据准确,但是依赖自身的流量,压测时间不灵活,需在高峰期,对用户体验有一定影响,随着一台机器的负载增加响应时间会受到一定影响,会直接反馈给在线用户。
   风险评估
  风险低,虽然在高峰期进行,但是只需要修改nginx配置再reload,对服务基本无影响,且每次都逐步增加weight,不会造成服务器崩溃的情况。
   Step6 线上监控
  线上监控不仅用于集群历史数据的收集,计算集群的实际负荷的监控,还用于压测过程中监控约束条件中的各种指标是否超限并停止压测。根据集群的特点和之前性能测试经验关注容量指标和约束条件的业务和资源指标。而这里的历史数据,是需要长期的采集和整理。
   小结
  综上所述,容量规划主要围绕着这么一个等式展开工作,纸上谈来终觉浅,实践出真知。希望能够在接下来的实践中成长和收获。
最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
数据采集 监控 数据库
爬虫技术详解:从原理到实践
本文详细介绍了爬虫技术,从基本概念到实际操作,涵盖爬虫定义、工作流程及Python实现方法。通过使用`requests`和`BeautifulSoup`库,演示了如何发送请求、解析响应、提取和保存数据,适合初学者学习。强调了遵守法律法规的重要性。
4036 4
|
Prometheus 监控 Cloud Native
Prometheus:Java调用PromQL工具类(瞬时数据查询)
Prometheus:Java调用PromQL工具类(瞬时数据查询)
Prometheus:Java调用PromQL工具类(瞬时数据查询)
|
机器学习/深度学习 人工智能 运维
智能化运维:AI在IT基础设施管理中的应用
【6月更文挑战第24天】本文将深入探讨人工智能(AI)如何革新传统IT运维模式,提升效率与响应速度。通过分析AI技术在故障预测、自动化处理和安全防护等方面的应用实例,揭示其对现代IT基础设施管理的深远影响。文章旨在为读者提供一个关于AI赋能运维领域的全面视角,同时指出实施过程中可能遇到的挑战与对策。
512 5
|
Linux
如何在Linux系统上查看CPU使用率?
以上命令可以帮助你监视和分析Linux系统中的CPU使用率,可以根据需要选择合适的命令进行查看。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
701 0
|
网络协议 数据库 网络架构
OSPF的7大状态和5大报文详讲
OSPF的7大状态和5大报文详讲
562 0
|
监控 虚拟化 云计算
容量管理的三个层次
【2月更文挑战第29天】
|
存储 运维 监控
浅谈容量测试与容量规划
日志/数据库:通过日志服务(比如ELK)或者运维监控(现在很流行的Devops),采集分析数据;
|
机器学习/深度学习 缓存 物联网
AIGC Stable Diffusion文生图Lora模型微调实现虚拟上装
在本教程中,您将学习如何在阿里云交互式建模(PAI-DSW)中,基于Diffusers开源库进行AIGC Stable Diffusion模型的微调训练,以及基于Stable-Diffusion-WebUI开源库启动WebUI进行模型推理。
|
Shell Linux BI
Linux基础服务巡检脚本模板
Linux基础服务巡检脚本模板 收集的一个没有自动化巡检工具的时候,的每日巡检工具, 测试了支持Redhat, Ubuntu能用,单少部分部分命令出错。 结果能看。
2365 0