容量规划概述

简介:

俗话说,"人无远虑,必有近忧", 容量规划就是"远虑"。所谓容量规划,是一个产品满足用户目标需求而决定生产能力的过程。当产品发展到一个较为稳定成熟的阶段,产品的整体处理能力的把控自然是不可或缺,尽管我们在线下做 性能测试能够获得一些数据,其参考价值终究有限。但是我们常常被问到以下一些问题而无以应对。
  (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/

相关文章
|
3月前
|
人工智能 API 调度
视觉大模型结合Agentic Workflow:侠客工坊重构移动端GUI自动化的技术实践
本文剖析大模型直接控制GUI在工业场景失效的根源,介绍侠客工坊首创的“Agentic Workflow”智能体工作流方案:通过视觉感知原子化、状态机驱动、分层意图对齐与反思式异常处理,实现高精度、可管控的AI手机数字员工,打通跨App数据孤岛。
578 1
|
缓存 搜索推荐 数据挖掘
TPS和QPS是什么?都是什么区别?
TPS和QPS是什么?都是什么区别?
11696 4
|
人工智能 数据可视化 数据处理
从0到1只需“拖一拖”,开发时间按秒算——低代码到底有多牛
低代码平台正颠覆传统软件开发模式,通过可视化开发、模块化组件和自动化工具,将复杂开发过程大大简化。开发者只需“拖拽”组件和配置参数,即可快速构建应用,无需复杂编程。低代码平台支持实时预览、自动代码生成和快速部署,极大提高了开发效率,满足多样化业务需求。其核心引擎(如SQL引擎、功能引擎等)的升级,进一步提升了性能与灵活性。此外,模型驱动开发、智能数据处理及AI融合,使得低代码平台不仅简化开发流程,还为企业提供高效、灵活的技术解决方案,推动企业数字化转型。未来,低代码将成为智能化开发的关键趋势。
898 18
|
人工智能 机器人 开发工具
LazyLLM:还在为AI应用开发掉头发?商汤开源智能体低代码开发工具,三行代码部署聊天机器人
LazyLLM 是一个低代码开发平台,可帮助开发者快速构建多智能体大语言模型应用,支持一键部署、跨平台操作和多种复杂功能。
974 3
|
Kubernetes 调度 云计算
字节跳动基础架构编排调度团队论文入选云计算领域顶会 SoCC 2023
2023 年 10 月 30 日至 11 月 1 日, SoCC 2023 将在美国加州 Santa Cruz 举行。 字节跳动基础架构 - 编排调度团队的研究成果被 S o CC 2023 接收,并受邀进行现场报告。 SoCC 会议全称 Annual ACM Symposium on Cloud Computing,是 云计算领域顶级会议之一,同时也是 ACM 所有会议当中唯一一个同时被 SIGMOD 和 SIGOPS 赞助的顶会。代表了当前云计算领域在学术界、工业界和开源社区的前沿水平。SoCC 会议伴随着云计算的兴起而成立,至今已经举办到第 14 届。该会议每年吸引全球顶级研究机构和知名
1269 122
|
Java Maven 开发者
java一分钟之-Maven Archetypes:项目模板
【6月更文挑战第6天】Maven Archetypes是Java开发中用于快速创建项目模板的工具,简化项目初始化。它们定义了项目结构、必备文件和默认配置。使用Archetypes能实现快速启动、保持项目一致性并易于扩展。常见问题包括查找和使用Archetype、理解项目结构及pom.xml配置。通过命令行工具`mvn archetype:generate`可生成项目,例如使用`maven-archetype-quickstart`创建简单Java应用。熟悉Archetypes能提升开发效率,但也需根据实际需求调整生成的配置。
1869 5
|
Linux
如何在Linux系统上查看CPU使用率?
以上命令可以帮助你监视和分析Linux系统中的CPU使用率,可以根据需要选择合适的命令进行查看。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
1071 0
|
存储 算法 NoSQL
(三)漫谈分布式之集群篇:探寻N个9高可用与PB级数据存储的实现原理!
本文来详细聊聊集群的各方面知识,为诸位量身打造出结构化的集群知识体系。
1087 0
|
IDE Java Shell
云效codeup使用指南
云效codeup体验指南
1839 2
云效codeup使用指南
|
存储 安全 物联网
Intel 的 SGX 技术小知识
Intel 的 SGX 技术小知识
3117 0