如何计算服务需要部署多少台机器?

news2024/10/4 4:27:50

写在前面

遇到流量激增的性能问题,相信绝大多数人的第一反应不是优化代码而是加机器!比如隔壁微博一旦出现爆炸性吃瓜,就会紧急扩机器,防止自己服务被打挂(虽然经常被打挂

这篇文章我们就来讲一下如何 计算出一个服务模块需要部署多少台机器!

基本概念

我们先要有一个基本概念:PV 、 UV 、 QPS、RT

  • PV:Page View 页面访问量,用户每一次对网站中的每个页面访问均被记录 1 次。用户对同一页面的多次刷新,访问量累计。
  • UV:Unique Visitor 独立访客,1天内访问某站点的用户数
  • QPS:Query Per Second 每秒请求数(服务器在一秒的时间内处理了多少个请求) 简明公式:QPS = req/sec = 请求数/秒。
  • RT:Response Time,一个请求的响应时间

需要的机器数量 = 峰值时间每秒QPS / 单台机器的QPS

估算

我们就用C端服务来作为例子,C端的链路一般都很长,因为经常需要各种RPC,所以我们的服务只是链路中的一环。为了用户体验,我们就先假设,整条链路RT是1S,超过就熔断,而链路的每环一般都不会超过10个环节。所以一般来说某一个环节最长只能到100ms

我们去掉请求和响应的网络io,粗略70ms,也就是说在70ms内必须要处理完自己的业务逻辑。自己的业务逻辑包括但不限于

  1. 请求redis各种数据
  2. rpc其他服务的数据
  3. 做业务逻辑运算

在这里插入图片描述

当然这些是可以并发处理的,不会串行处理。 现在我们知道了70ms内必须要处理完这一个请求。

假设我们每台实例统一规格为4核8G。问题来了?4核8G的机器在1s内可以处理多少请求数呢?不知道,核的不同会导致结果的不同,我们一般会把服务部署到这台机器上做压测。

假设 4核8G 压测的结果如下:

  1. QPS 为 1000 的情况下,CPU的使用率为35%,内存使用率为25%
  2. QPS 为 1500 的情况下,CPU的使用率为50%,内存使用率为45%

同时,我们需要观察RT时间,如果RT时间不符合我们所规定的70ms,就需要扩容或者升配处理了。

一般来说我们的cpu使用率不能超过50%,大概会控制在30~40%。互联网的应用都有高低峰的使用时间,比如刷短视频的时间的低峰时间端一般就是晚上的0点~8点左右,其他时间就是高峰期。

假设我们整个服务QPS在高峰时期最高值30k,需要的机器数量 = 峰值时间每秒QPS / 单台机器的QPS = 30k/1k = 30 台。这样我们就需要30台机器实例。

问题又来了,这些机器部署在哪里的机房呢?

机房位置选择

冷知识:在我们实际部署中,最慢的一般都不是cpu的计算,而是各种io、磁盘io、网络io等等。。

举个例子:如果我们的服务部署在北京机房,但是redis、mysql等db资源部署在广州机房,那么就会导致io时间过长。

在这里插入图片描述

所以我们一般会将服务和服务所需要用的各种资源部署在同一个地方,减少跨机房导致的网络io过长的问题,并且为了让分散在全国各地的用户都能快速访问到,就需要各个中心城市都部署。比如北方的北京,南方的广州,西边的兰州,东边的上海,中间的武汉,这样就能保证用户到服务机房的io尽可能的短。

在这里插入图片描述

所以我们会针对全国每个地区的QPS做统计,并且根据QPS占比分配机器。如果这五个地方刚好平均了QPS,那么就是每个地方部署六台机器。一般来说的QPS都不会太平均,通常热门城市的QPS会大很多,比如北京、上海、广州就可以多部署一些机器。

确定好机器的实例个数之后,再用分级发布来发布应用,并不断观察机器状态,如果QPS和预先估计设想的QPS有较大误差,就做紧急扩容,再做观察!

参考

[1] https://www.cnblogs.com/zhaojinhui/p/16802391.html
[2] https://blog.csdn.net/YouMing_Li/article/details/136564018

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目配置说明

文章目录 一、下载 vscode 并安装相应扩展1.1 下载 vscode1.2 安装扩展 二、git 项目三、git 提交流程3.1 确定要提交的代码 四、git 拉新流程 一、下载 vscode 并安装相应扩展 1.1 下载 vscode vscode 我已经发群里了,或者自己去官网下载也行 1.2 安装扩展 打开…

四舵轮车辆中的舵轮角度计算

对于四舵轮车辆,或者对角线安装的双舵轮车辆来说,当同时存在线速度与角速度的时候,它的两个轮子的角度值是不一样的,而它的角度值与其当时的瞬心相关(机器人模型与ICR(Instantaneous Center of Rotation))。…

IP6537_C_30W20V--移动设备快充的得力助手,集成 14 种快充协议的降压 SoC

IP6537_C_30W20V是一款集成同步开关的降压转换器、支 持 14 种输出快充协议、支持 Type-C 输出和 USB PD2.0/PD3.0(PPS)协议的 SoC,为车载充电器、 快充适配器、智能排插提供完整的解决方案。 IP6537_C_30W20V支持 USB Type-C 或者 USB A 输出, 5V 输出功…

火语言RPA流程组件介绍--模拟键盘输入

🚩【组件功能】:在浏览器网页中使用键盘操作模拟输入值 配置预览 配置说明 按键间隔(ms) 支持T或# 输入仅支持整型 两次输入按键的间隔,单位毫秒 输入内容 支持T或# 默认FLOW输入项 需要输入的内容 超时时间 支持T或# 输入仅支持整型 输入的超时时…

我们的赞赏码

每一位粉丝的认可,都是我们前进的动力。欢迎为我们点赞、转发和分享,让我们一起传递美好与快乐! 我们真诚地邀请您来赞赏我们,您的认可是我们前进的动力! 赞赏我们只要0.99,让我们一起在CSDN增长知识&…

OpenAI 开发者大会!实时语音功能有API了,GPT-4o支持多模态微调,上下文cache功能上线

家人们!十一假期第1天, OpenAI一年一度的开发者大会又来了惹!今年的开发者大会分成三部分分别在美国、英国、新加坡三个地点举办,刚刚结束的是第一场。 去年的OpenAI开发者大会公布了GPT-4 Turbo和GPTs,今年没有大更新…

【硬件模块】SG90舵机模块

SG90舵机模块实物图 180度舵机:可以控制旋转角度、有角度定位。上电后舵机自动复位到0度,通过一定参数的脉冲信号控制它的角度。 360舵机:不可控制角度,只能控制顺时针旋转、逆时针旋转、停止和调节转速。 如图所示为:…

仅用pygame+python实现植物大战僵尸-----完成比完美更重要

前言 其实这个项目再我上半年就想着做一下的,但是一直拖到现在,我现在深刻的理解到,不要想那么多,先做,因为永远不可能准备好,都是边做边学便准备的,完成比完美更重要;使用python&a…

【YOLO学习】YOLOv2详解

文章目录 1. 概述2. Better2.1 Batch Normalization(批归一化)2.2 High Resolution Classifier(高分辨率分类器)2.3 Convolutional With Anchor Boxes(带有Anchor Boxes的卷积)2.4 Dimension Clusters&…

每日一题|1928. 规定时间内到达终点的最小花费|动态规划、最小路径

本题需要使用动态规划进行解决。 分析: 求解最小值而且每一次的状态是由上一次的状态推导出来的,用动态规划。 难点:dp数组的定义和更新。 1、dp数组的定义 在时刻t,位置i处,此时的花费可以表示为如下的形式&#…

CNN卷积神经网络算法原理

全连接神经网络概述 输入层在左点自外,相应的输出层在右点之外, 这就像一个函数,yf(x),x即输入,f即隐藏层,y即输出,或者是ymodel(x) 全连接神经网络的结构单元 主要是从单元到整体&#xff0c…

杀疯啦!yolov11+strongsort的目标跟踪实现

目录 yolov11介绍——实时端到端物体检测 概述 主要特征 支持的任务和模式 性能指标 总结 strongsort介绍 指标图 系统定位 效果展示 训练与预测 UI设计 界面其他功能展示 完整代码实现UI界面 yolov11介绍——实时端到端物体检测 概述 YOLO11 是 Ultralytics Y…

基于yolov5 无人机检测包含:数据集➕训练好的代码模型训练了300轮 效果看下图 map97%以上

基于yolov5 无人机检测包含:数据集➕训练好的代码模型训练了300轮 效果看下图 map97%以上 基于YOLOv5的无人机检测项目 项目名称 基于YOLOv5的无人机检测 (Drone Detection with YOLOv5) 项目概述 该项目使用YOLOv5模型进行无人机目标检测。数据集包含大量带有标注的无人机…

wsl中安装ubuntu,vscode访问这个ubuntu

WSL1升级为WSL2 wsl --set-default-version 2 wsl --set-version Ubuntu-22.04 2在windows商店中也可以安装ubuntu,在这个ubuntu中windows的c盘在/mnt/c中

国庆刷题(day2)

C语言刷题: C刷题:

数据结构与算法——Java实现 27.双端队列

很多人觉得做一件事付出了10分的努力,却只得到5分的汇报。 其实剩下的五分,是在填补你过往的懒惰。 只有将过往的懒惰填满, 努力才会有正向结果 —— 24.10.3 一、概述 双端队列、队列、栈对比: 队列 一端删除(头&am…

计算机毕业设计 基于Python的个性化旅游线路推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

C++基础补充(02)C++其他控制语句break continue goto等

文章目录 1. break2. continue 语句3. goto 语句goto的存在 4. 跳出多重循环4.1 goto 直接跳转4.2 C11及其后版本的 return 语句4.3 使用标志变量 在C中,控制语句用于管理程序的执行流程。常见有 break、continue 和 goto。 1. break break语句主要用于在循环或者s…

【GEE学习第一期】GEE介绍、注册及基本使用

【GEE学习第一期】GEE介绍、注册及基本使用 GEE基本介绍GEE架构编辑语言:JavaScript GEE注册GEE平台界面GEE编辑器API区详解 GEE环境配置本地Python环境配置在线Python环境配置 参考 GEE基本介绍 地球引擎代码编辑器(Google Earth Engine, GEE&#xff…

oauth2授权码模式单点登录

文章目录 前言一、单点登录是什么?二、oauth2授权码模式单点登录流程1.流程图2. 代码相关2. 验证流程 总结 前言 oauth2 有四种模式,常用的为密码和授权码,剩下两种几乎不用 密码模式,很好理解,就是根据输入的用户名/密码进行登录认证的,最终返回一个合法token授权…