大厂必面:你们系统qps多少,怎么部署的?假设每天有几千万请求,该如何部署?

news2024/9/26 5:23:05

前言

在40岁老架构师 尼恩的读者社区(50+)中,很多小伙伴要拿高薪,这就要面大厂、面架构,拿高薪。

在高级开发面试、大厂面试、架构师的面试过程中,常常会遇到下面的问题:

你们系统qps多少?怎么部署的?

假设每天有几千万请求,你的系统如何部署?

尼恩在指导简历、指导面试的过程中,很多小伙伴,都有遇到这个问题。

可以说是一个面试的高频题目,极致的高频题目

大家一定要把此文收藏起来, 好好背熟悉, 并且,在面试之前,都翻出好好复习一下

40岁老架构师尼恩,不知道做过多少架构方案。目前尼恩已经专门从事架构师转型辅导2年了,也不知道指导了多少开发完成了架构师的华丽转身。现在,给大家提供一份比较全面的参考答案。使得大家可以充分展示一下大家雄厚的 “技术肌肉”,让你的主管、同事爱到 “不能自已、口水直流”

也一并把这个题目以及参考答案,收入咱们的 《尼恩Java面试宝典》V94版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请到文末公号【技术自由圈】取

文章目录

    • 前言
    • 尴尬的面试现场:
    • 一、什么是QPS?
    • 二、什么是TPS?
    • 三、QPS和TPS的关系
    • 四、什么是RT,响应时间
    • 五、什么是并发数?
    • 六、吐吞量
    • 七:什么是PV、UV、DAU、MAU
      • PV
      • UV
      • DAU
      • MAU
    • 八、最佳线程数量
    • 九、统吞吐量评估
    • 十、每天有几千万请求,你的系统如何部署?
    • 推荐相关阅读

尴尬的面试现场:

首先,给大家复盘一下, 很多小伙伴尴尬的面试现场

于是面试官和候选人可能会展开如下一系列的问题:

面试官:你说说,你们项目目前有多少注册用户?

候选人:这个。。。。好像大概几万?

面试官:好吧,那你说一下你们系统每天日活是多少?

候选人:这个。。。。还真的没统计过啊。。大概可能有几千或者几万个人?

面试官:好吧,那你们的系统高峰期QPS有多大呢?

候选人:这个。。。。也没统计过,大概500吧!

面试官:好吧,那这样吧,假设每天几千万请求,如何进行qps评估? 然后,如何进行部署架构?

候选人:嗯嗯… 这个… 我真的不知道啊。。。

面试官:咦?你怎么支支吾吾的,难道你项目线上如何部署,也不清楚?

候选人:…………

候选人卒

接下来,咱们从基础概念入手,一步一步,给出上面的面试题答案。

一、什么是QPS?

QPS Queries Per Second 是每秒查询率 ,

一台服务器每秒能够相应的查询次数,

是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。

二、什么是TPS?

TPS Transactions Per Second 也就是事务数/秒。

什么是事务?

一个事务是指一个客户机向服务器发送一起完整的 开始 start 请求,内部各种ACID 事务属性的 并发数据操作, 最后 提交一个commit操作结束整个Transaction的过程。

所以从上面可以看出来,一个事务包含明确的三阶段:开始,处理,commit/rollback。

一个事务的中间环节,会包含多个并行的sql的操作。

本质上事务是对多个并发操作进行数据一致性的管理,事务的ACID规则如下:

spring框架有本身自带的事务传播性,数据库也有事务,

数据库事务包含事务的start,数据操作,事务commit等非常清晰的阶段。当数据库开启事务后,当前线程改变数据库数据,并未提交当前事务,那其他线程读数据库的时候会出现脏读,幻读。

在web服务器领域来说,事务可以指用户的一次完整的交互处理,这次交互处理里边, 包含了多次的服务端api调用。

一个web服务器包含包含多次api请求,多次api响应。

比如,在尼恩指导做过的《亿级数据 搜索中台》中,用户执行一次搜索操作,浏览器 client通过vue框架要调用后端的上10个api接口,类似如下:

三、QPS和TPS的关系

1、Tps 即每秒处理事务数,从web应用的角度来说,包括了

1)用户通过client工具,开始发起请求

2)client工具执行N个服务端的API调用

3)client进行API结果的聚合再渲染,最后呈现给用户

这三个过程组成一个事务,每秒能够完成N事务,Tps也就是N;

2、Qps Queries Per Second 是每秒查询率,从web应用的角度来说,就是单次api的调用

Qps基本类似于Tps,

但是不同的是:

  • 用户通过client工具完成一个页面的一次访问,形成一个Tps;
  • 如果一次页面请求,产生多次对服务器的api请求,这个Tps 包含多个 qps。
  • 如果一次页面请求,产生1次对服务器的api请求,这个Tps 包含1个 qps。 也就是 tps=qps

四、什么是RT,响应时间

响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间。

RT 即从客户端发起请求到收到服务器响应结果的时间。

响应时间RT(Response-time),是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。

单节点QPS公式:QPS=1000ms/RT

假设一个节点RT是10ms,则可以很容易的计算出QPS,QPS = 1000/10 = 100

对同一个分布式系统而言,支持的节点数越多,QPS越高。

多节点场景,如果把节点提升到2,那么整个系统的QPS则为 2*(1000/10) = 200,

可见QPS随着节点横向扩展、节点的增加而线性增长,

当然,那QPS上不去就加节点,听起来很有道理,但是往往现实并非如此,

为啥:一个请求的处理链路上受影响的环节很多, 不能只解决某一层的吞吐量,而是需要所有的层都要同步提升。

五、什么是并发数?

并发数(并发度):指系统同时能处理的请求数量,同样反应了系统的负载能力。

并发数: 系统同时处理的request/事务数

并发数 = QPS*平均响应时间

这个是一个理论的并发数。

注意,这个并发数,和jemeter的并发数不一样。jmeter中的并发数,就是同时启动的线程数

线程组设置为100个线程,运行过程中未出现任何异常,满足100个线程并发操作需求,那么并发数就是100

六、吐吞量

系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。

单个request 对CPU消耗越高,IO速度越慢,那么,系统吞吐能力越低,

反之越高。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间。

  1. QPS(TPS):(Query Per Second)每秒钟request/事务 数量
  2. 并发数: 系统同时处理的request/事务数
  3. 响应时间: 一般取平均响应时间

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

QPS(TPS)= 并发数/平均响应时间

并发数 = QPS*平均响应时间

七:什么是PV、UV、DAU、MAU

还有一些相关的概念

PV

PV(Page View):页面访问量,即页面浏览量或点击量,用户每次刷新即被计算一次。

可以统计服务一天的访问日志得到。

UV

UV(Unique Visitor):独立访客,统计1天内访问某站点的用户数。

可以统计服务一天的访问日志并根据用户的唯一标识去重得到。

响应时间(RT):响应时间是指系统对请求作出响应的时间,一般取平均响应时间。

可以通过Nginx、Apache之类的Web Server得到。

DAU

DAU(Daily Active User):日活跃用户数量。

常用于反映网站、互联网应用或网络游戏的运营情况。

DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),与UV概念相似

MAU

MAU(Month Active User):月活跃用户数量,指网站、app等去重后的月活跃用户数量

八、最佳线程数量

刚好消耗完服务器的瓶颈资源的临界线程数,公式如下

最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间)* cpu数量

在尼恩《Java高并发核心编程 卷2 加强版》一书中,对以上公式进行了细致的介绍。

无论io密集型线程池、cpu密集型线程池,都满足上面的公式。

特性:

  • 在达到最佳线程数的时候,线程数量继续递增,则QPS不变,而响应时间变长,持续递增线程数量,则QPS开始下降。
  • 每个系统都有其最佳线程数量,但是不同状态下,最佳线程数量是会变化的。
  • 瓶颈资源可以是CPU,可以是内存,可以是锁资源,IO资源:超过最佳线程数-导致资源的竞争,超过最佳线程数-响应时间递增。

九、统吞吐量评估

比较关键的关键的问题来了:

假设你的项目的用户量有百万级,然后每天有几千万请求,高峰期每秒有好几千请求。

每个服务会有多高的QPS?

那么这个时候,你的服务会有多高的QPS?

按二八定律来看,如果每天 80% 的访问集中在 20% 的时间里,这 20% 时间就叫做峰值时间。

  • 公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)
  • 机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

1、每天300w PV 的在单台机器上,这台机器需要多少QPS?

( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

2、如果一台机器的QPS是58,需要几台机器来支持?
139 / 58 = 3

十、每天有几千万请求,你的系统如何部署?

最后的问题,也是最为关键的问题来了:

假设你的项目的用户量有百万级,然后每天有几千万请求,高峰期每秒有好几千请求。

你的系统如何部署?

那么这个时候,每个服务需要部署多少台机器才可以保证不雪崩? 这些服务器的配置是多高?

项目中涉及的MySQL、Redis、ES、RocketMQ中间件,的如何做高并发架构?

项目中涉及的MySQL、Redis、ES、RocketMQ中间件,的如何做高可用架构?

以上组件的架构方案,可以参照 尼恩的《价值10W架构师知识图谱》,

在《价值10W架构师知识图谱》里边,有MySQL、Redis、ES、RocketMQ、Nginx等中间件的核心吞吐量性能指标,然后再结合自己的项目,简单的规划一下,就可以了。

注意,这里没有标准答案。一定要再结合自己的项目去规划,

其实,只要简单的规划一下,就可以了。

可以参照 《价值10W架构师知识图谱》,一路从 网关接入层,进入到 服务层、缓存、DB层、消峰解耦层等等,一层一层的进行系统的部署架构。

《价值10W架构师知识图谱》是一个庞大的架构师的知识地图,具体的链接,可以找尼恩获取。

推荐相关阅读

《问懵了…美团一面索命44问,过了就60W+》

《炸裂了…京东一面索命40问,过了就50W+》

《问麻了…阿里一面索命27问,过了就60W+》

《百度狂问3小时,大厂offer到手,小伙真狠!》

《饿了么太狠:面个高级Java,抖这多硬活、狠活》

《字节狂问一小时,小伙offer到手,太狠了!》

《收个滴滴Offer:从小伙三面经历,看看需要学点啥?》

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF,请到下面公号【技术自由圈】取↓↓↓

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

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

相关文章

第三章 图论 No.4最小生成树的简单应用

文章目录 裸题:1140. 最短网络裸题:1141. 局域网裸题:1142. 繁忙的都市裸题:1143. 联络员有些麻烦的裸题:1144. 连接格点 存在边权为负的情况下,无法求最小生成树 裸题:1140. 最短网络 1140. 最…

【三极管双稳态电路】2022-3-5

缘由multisim仿真问题-嵌入式-CSDN问答

《算法竞赛·快冲300题》每日一题:“ 盲文文字编码”

《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 盲…

《cuda c编程权威指南》05 - cuda矩阵求和

目录 1. 使用一个二维网格和二维块的矩阵加法 1.1 关键代码 1.2 完整代码 1.3 运行时间 2. 使用一维网格和一维块的矩阵加法 2.1 关键代码 2.2 完整代码 2.3 运行时间 3. 使用二维网格和一维块的矩阵矩阵加法 3.1 关键代码 3.2 完整代码 3.3 运行时间 1. 使用一个二…

==和equals():比较对象等不等?

引言: 在编程中,我们常常需要判断两个对象是否相等。而在Java中,有两种常用的方法:使用""运算符和调用equals()方法。这两个方法有什么区别呢?它们又有哪些有趣的应用呢?让我们一起来探索一下吧&…

RTT学习笔记12-KConfig 语法学习

KConfig 语法学习 RTT 官方教程 https://www.rt-thread.org/document/site/#/development-tools/build-config-system/Kconfig 我自己写的IIC配置 menuconfig BSP_USING_I2C # I2C 菜单bool "Enable I2C BUS" # 提示I2C 菜单default n # 默认不使能I2C 菜单…

第三章 图论 No.3 flody之多源汇最短路,传递闭包,最小环与倍增

文章目录 多源汇最短路:1125. 牛的旅行传递闭包:343. 排序最小环:344. 观光之旅345. 牛站 flody的四个应用: 多源汇最短路传递闭包找最小环恰好经过k条边的最短路 倍增 多源汇最短路:1125. 牛的旅行 1125. 牛的旅行 …

Camera之PhysicalCameraSettingsList/SurfaceMap/CameraMetadata/RequestList的关系(三十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

打开的idea项目maven不生效

方法一:CtrlshiftA(或者help---->find action), 输入maven, 点击add maven projects,选择本项目中的pom.xml配置文件,等待加载........ 方法二:view->tools windows->mave…

使用Python将Word文档转换为PDF的方法

摘要: 文介绍了如何使用Python编程语言将Word文档转换为PDF格式的方法。我们将使用python-docx和pywin32库来实现这个功能,这些库提供了与Microsoft Word应用程序的交互能力。 正文: 在现实生活和工作中,我们可能会遇到将Word文…

软考高级架构师——2、操作系统

一、进程管理 • 进程的状态(★) • 进程的同步与互斥(★★★★) 临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等 临界区:每个进程中访问临界资源的那段代码称为临界区…

ubuntu18.04 虚拟机与主机不通,虚拟机无法上网,导致无法git clone代码

问题前置:修改了固定ip。 虚拟机ip: 虚拟机设置NAT模式: 主机配置网络适配器:分配ipv4192.168.152.2保持与虚拟机的虚拟网关192.168.152.0,192.168.152.1在同一网段。虚拟机静态ip为192.168.152.146 虚拟机,网关&#…

【项目 线程4】3.12生产者消费者模型 3.13条件变量 3.14信号量 C++实现生产者消费者模型

3.12生产者消费者模型 生产者消费者模型中的对象: 1、生产者 2、消费者 3、容器 若容器已满,生产者阻塞在这,通知消费者去消费;若容器已空,则消费者阻塞,通知生产者去生产。生产者可以有多个,消…

供水管网漏损监测,24小时保障城市供水安全

供水管网作为城市生命线重要组成部分,其安全运行是城市建设和人民生活的基本保障。随着我国社会经济的快速发展和城市化进程的加快,城市供水管网的建设规模日益增长。然而,由于管网老化、外力破坏和不当维护等因素导致的供水管网漏损&#xf…

RabbitMQ的安装

RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本:otp_win64_23.2 rabbitmq-server-3.8.16 版本说明:https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…

8.5作业

要求实现AB进程对话 a.A进程先发送一句话给B进程&#xff0c;B进程接收后打印 b.B进程再回复一句话给A进程&#xff0c;A进程接收后打印 c.重复1.2步骤&#xff0c;当收到quit后&#xff0c;要结束AB进程 A进程 #include<stdio.h> #include<string.h> #include&…

Linux文本三剑客---grep、sed、awk

目录标题 1、grep1.1 命令格式1.2命令功能1.3命令参数1.4grep实战演练 2、sed2.1 认识sed2.2命令格式2.3常用选项options2.4地址定界2.5 编辑命令command2.6用法演示2.6.1常用选项options演示2.6.2地址界定演示2.6.3编辑命令command演示 3、awk3.1认识awk3.2常用命令选项3.3awk…

中国中医中药元宇宙 中药材价格缘何“狂飙”

◇相比去年同期&#xff0c;有超200个常规品种涨幅高于50%&#xff0c;25个常用大宗药材涨幅超200%&#xff0c;个别品种甚至涨价4至9倍 ◇在中药材价格普遍高涨的情况下&#xff0c;部分市场仓库库存数量也较多&#xff0c;出现囤积居奇倾向 ◇“不少游资和热钱涌入中药材市场…

MyBatis查询数据库之一(概念+创建项目+基础交互)

目录 1.MyBatis是什么&#xff1f; 2.为什么学习MyBatis&#xff1f; 3. 怎么学 MyBatis 4.第⼀个MyBatis查询 4.1 添加MyBatis框架支持 4.1.1老项目添加MyBatis 4.1.2 新项目添加MyBatis 4.2 配置连接字符串和MyBatis 4.2.1 配置连接字符串 4.2.2 配置 MyBatis 中的…

小白电脑装机(自用)

几个月前买了配件想自己装电脑&#xff0c;结果最后无法成功点亮&#xff0c;出现的问题是主板上的DebugLED黄灯常亮&#xff0c;即DRAM灯亮。对于微星主板的Debug灯&#xff0c;其含义这篇博文中有说明。 根据另一篇博文&#xff0c;有两种可能。 我这边曾将内存条和主板一块…