当前位置:首页 > 技术文章 > 如何估算服务需要部署多少台实例机器?

如何估算服务需要部署多少台实例机器?

go1232个月前 (11-04)技术文章159

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

基本概念

我们先要有一个基本概念: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内必须要处理完这一个请求。

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

假设 x核xG 压测的结果如下:

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

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

这里我们强调一点,我们的应用一般分成io密集型和计算密集型。io密集型就是会有很多取数的io请求,比如redis拿数会有很多,一般是一些多数据源但计算简单,而计算密集型就像一些算法模型,除了gpu,还需要大量的高规格cpu。所以可以根据自身的业务特点去调整cpu的规格。

我们的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

声明:本站所有内容均为自动采集而来,如有侵权,请联系删除
标签: PVUVQPSRT

相关文章

Redis连环五十二问!看谁顶得住?

Redis连环五十二问!看谁顶得住?

基本 1.说说什么是Redis? Redis是一种基于键...

用 PHP 处理 10 亿行数据!

用 PHP 处理 10 亿行数据!

今天,我将带大家一起走进“挑衅十亿行“数据的世界。当然,这个事情是依据GitHub上的一个“十亿行挑衅”(1brc)运动而来,现在正在进行,如果你没有听说过,可查看Gunnar Morlings 的 1brc 存储库。https://github.com/gunnarmorling/1brc我之所以...

2024 年的最佳 PHP 框架

2024 年的最佳 PHP 框架

在本文中,我们将预测在 2024 年持续风行的最佳 PHP 框架。我们首先将看看PHP框架是什么,什么时候该斟酌应用PHP框架,以及应用PHP框架的重要长处都是什么。我还会介绍最合适初学者的 PHP 框架以及用于 Web 开发的最佳框架。什么是PHP框架?     &...

一文读懂多家厂商的大模型训练、推理、部署策略

一文读懂多家厂商的大模型训练、推理、部署策略

4 月 20 日,第 102 期源创会在武汉胜利举行。本期邀请来自武汉人工智能研讨院、华为、MindSpore、京东云、Gitee AI 的人工智能专家,环绕【大模型竞技与性能优化】主题发表演讲。接下来就一起看看本期运动的出色瞬间吧!大合影 get ✅披萨和礼物不能少!接下来进入主题演讲回想环节。可...

请立刻停止编写 Dockerfiles 并使用 docker init

请立刻停止编写 Dockerfiles 并使用 docker init

您是那种认为编写 Dockerfile 和 docker-compose.yml 文件很苦楚的人之一吗?我承认,我就是其中之一。我总是想知道我是否遵守了 Dockerfile、 docker-compose 文件的最佳编写实践,我畏惧在不知不觉中引入了安全破绽。但是现在,我不必再担忧这个问题了,感激...

服务器为什么大多用 Linux 而不是 Windows ?

服务器为什么大多用 Linux 而不是 Windows ?

前几天在知乎看到一个话题很有意思,且很有讨论意义。“服务器为什么大多用 Linux”,除了开源、好用等原因,回答也代表了各种不同人需求和看法,摘取一些分享给大家,也欢迎留言讨论。来自知乎好友“熊大你又骗俺”的回答首先在20年前,windows server+iis+asp+access 的方案,还是...