一、什么是QPS?

QPS(Query Per Second,每秒处理请求数)是用来衡量服务性能的一个重要指标,解决每秒数万次的高并发场景,这个指标非常关键。

吞吐量:

和高并发相关的,还有一个概念,那就是吞吐量(每秒的数据处理量)。吞吐量是在给定时间段内系统完成的交易数量,即系统的吞吐量越大,说明系统在单位时间内完成的用户或系统请求越多, 系统的资源得到充分利用。我们通常衡量一个Web系统的吞吐率的指标就是QPS。

QPS的定义

对一个特定的查询服务器在规定时间内所处理流量的多少

计算公式

QPS = 并发量 / 平均响应时间

附注:通常QPS用来衡量服务器性能,我们也是不断的为增加它的数量而优化改进,通过多线程、增加负载、甚至提高代码质量、算法优化等方式。当然优化性能是有上限的,我们需要在性能和投入上作出一定的平衡。要对现有的业务状况、未来的发展潜力以及爆发力上作出一些判断,很好的驾驭它是需要花费一些精力的,需要经验和技术能力同时发挥作用,让效率和投入达到最好的产出。

二、QPS简单示例

举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时系统内有10台Apache的Web服务器,配置Apache的最大连接数目为500,那么,我们的Web系统的理论峰值QPS为:

10*500/0.1 = 50000 (5万QPS)

上述计算结果,1秒钟可以处理完5万的请求,系统似乎看起来很强大,但实际情况并没有这么理想,在高并发的实际场景下,服务器都是处于高负载的状态,在这种状态下,平均响应时间也会被大大增加。一个高配置的至强处理器能支持的最大并发连接是1 ~ 2万,如果访问量超过2万那么就需要更高性能的服务器才能解决,如果服务器硬件不给力,软件怎么优化都是于事无补的。就Web服务器而言,Apache打开了越多的连接进程,CPU需要处理的上下文切换也越多,额外增加了CPU的消耗,必然会直接导致平均响应时间增加。

假设我们的web系统在5万QPS的高并发状态下,平均响应时间从100ms变为250ms(可能会更高),那么,此时我们的Web系统的理论峰值QPS则变为:

20*500/0.25 = 40000 (4万QPS)

如此一来,我们的web系统只剩下4万的QPS,面对5万每秒的请求,中间相差了1万。这就是高并发状况,在某一秒内,服务器所有可用连接进程都在满负荷工作中,却仍然有1万个新的请求,没有连接进程可用,系统将陷入到崩溃的状态(CPU爆满)。举个通俗的示例,某个高速路口有5条车道,每秒可以同时通过5部车,突然有1条车道上出了车祸,只剩下4个车道可以通过,也就是说,这个路口1秒钟现在只能通过4部车,车流量仍然依旧,结果必定出现大塞车。

三、什么情况下会出现高并发?

1、某个业务请求接口出现问题,响应时间变得极慢,将整个Web请求响应时间拉得很长,逐渐将Web服务器的可用连接数占满,进而影响到其他正常的业务请求,导致无连接进程可用。

2、用户的行为特点,系统越是不可用,用户的点击越频繁,恶性循环最终导致“雪崩”。例如在负载均衡体系中,其中一台Web服务器挂了,导致流量分散到其他正常工作的机器上,再导致正常的服务器也挂,然后恶性循环,将整个Web系统拖垮。

3、大量的CC攻击,或者DDOS攻击。

四、处理高并发状况

1、重启Apache服务

如果系统因为高并发导致雪崩”,这种情况下贸然重启Apache服务,是无法解决问题的。最常见的现象是,Apache服务启动起来后,立刻又挂掉了。这个时候,最好在CGI入口层将流量拒绝,然后再将其重启。

2、过载保护

一些特殊的业务场景(例如秒杀和抢购),流量往往是超乎我们系统的准备和想象的。这个时候,过载保护是必要的。如果检测到系统满负载状态,选择拒绝请求也是一种保护措施。正确的做法是将过载保护设置在CGI入口层,快速将客户的直接请求返回。

什么是CGI?

CGI的定义:

CGI(Common Gateway Interface))是HTTP服务器与你的或其它机器 上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上 。

CGI的功能:

绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。

CGI的处理步骤:

  1. 通过Internet把用户请求送到服务器。
  2. 服务器接收用户请求并交给CGI程序处理。
  3. CGI程序把处理结果传送给服务器。
  4. 服务器把结果送回到用户。

五、解决网站高并发的建议

1、数据库相关

  • 数据库查询尽量不用“ select *  from 表名 ”
  • 避免相关子查询
  • 给经常查询的添加索引
  • 用排序来取代非顺序存取

2、MySQL服务器最好安装在Linux操作系统中。

3、关于web服务器是选Apache,还是Nginx,在高并发的情况下推荐使用Nginx,Nginx是Apache服务器不错的替代品。Nginx内存消耗少,官方测试能够支撑5万并发连接,在实际生产环境中可以支撑2~3万并发连接数。

4、php不需要的模块尽量关闭。

5、使用memcached缓存,Memcached是一个高性能的分布式内存对象缓存系统。

6、IIS或Apache启用GZIP压缩优化网站,压缩网站内容可以大大节省网站流量。

六、高并发解决方案

应用层面:读写分离、缓存、队列、集群、令牌、系统拆分、隔离、系统升级(可水平扩容方向)。

时间换空间:降低单次请求时间,这样在单位时间内系统并发就会提升。

空间换时间:拉长整体处理业务时间,换取后台系统容量空间。

七、如何优化提升QPS呢?

1、调整Apache的最大连接数(并发数量),可以参考这篇文章:https://blog.csdn.net/qq15577969/article/details/109702961

2、内存操作级别的存储Redis,在高并发的状态下,存储的响应时间至关重要。

3、增加服务器配置,例如选择性能更好的CPU,加大网络带宽。

4、使用cdn加速,高防cdn和高防IP在一定程度上都可以解决高并发问题。

5、负载均衡,例如增加多台服务器,然后使用负载均衡技术,将流量平均分散各个服务器上。

关于QPS高并发,你了解多少?相关推荐

  1. 服务器系统怎么做高并发,QPS 高并发 如何设计一个支撑高并发大流量的系统?...

    QPS 高并发 如何设计一个支撑高并发大流量的系统? 高并发架构相关概念 什么是并发? 并发是指并发的访问,也就是某个时间点,有多少个访问同时到来: 通常如果一个系统的日PV在千万以上,有可能是一个高 ...

  2. redis高并发数据错乱_redis总结:1T以上海量数据+10万以上QPS高并发+99.99%高可用...

    来源:https://blog.csdn.net/qq_34246646/article/details/104402510 redis作用 topic:高并发.亿级流量.高性能.海量数据的场景,电商 ...

  3. QPS高并发性能指标及其计算公式

    QPS,每秒查询 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 ...

  4. 最新亿级流量电商详情页系统的大型高并发与高可用缓存架构实战第一版附全套资料

    课程介绍(非升级版) 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握red ...

  5. 亿级流量电商详情页系统的大型高并发与高可用缓存架构实战

    2019独角兽企业重金招聘Python工程师标准>>> 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里 ...

  6. 亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 目录

    对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memcache ...

  7. 亿级流量电商详情页系统的大型高并发与高可用缓存架构

    1.亿级流量电商网站的商品详情页系统架构 面临难题:对于每天上亿流量,拥有上亿页面的大型电商网站来说,能够支撑高并发访问,同时能够秒级让最新模板生效的商品详情页系统的架构是如何设计的? 解决方案:异步 ...

  8. Java架构师,大数据架构师,高并发设计模式,机器学习知识点分享

    第一章:java精品课程目录大全 1.亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 1课程介绍以及高并发高可用复杂系统中的缓存架构有哪些东西?32分钟 2基于大型电商网站中的商品详情页系统贯 ...

  9. 5000并发的qps是多少_高并发初体验记录-02

    前言 这半个多月完成了这次活动的业务代码开发和测试,至于性能调优对我而言近乎玄学.总结记录,以备参考.如有错误,欢迎指正.不过其实大佬不用浪费时间看这篇低质量的流水账了. 实测过后,一个月前老板给我说 ...

最新文章

  1. 小数据集同样重要!掌握处理它的7种方法
  2. 苹果四大供应商向高通索赔90亿;金立否认裁定破产清算
  3. 第八周课上额外项目:pwd的实现
  4. 为什么我不再使用MVC框架
  5. 为什么说“按月订购”和“无人货架”本质上是一样的?
  6. 基于PCA方法的ORL人脸识别及Python代码实现
  7. 史上最全!计算机科学领域顶会最佳论文大合集:微软研究院最多,清华排24...
  8. php xingnengfenxi_php代码性能分析方法
  9. c++vector操作
  10. 【渝粤教育】国家开放大学2018年春季 7138-22T人际交流与沟通 参考试题
  11. 仿某某网站模板thinkphp_7个免费PPT模板网站,远离撞P的尴尬
  12. python读取身份证照片信息_Python身份证照片识别信息,python
  13. 杨中科:我的大学生活
  14. LNode *和LinkList的小区分
  15. 面试官:为什么 0.1 + 0.2 == 0.300000004 ?
  16. ios跨线程通知_iOS通知线程处理 - osc_3m34anq6的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. 记一次天池比赛 - 性能挑战赛道
  18. 如何进入docker 使用root用户的方式
  19. vscode-tab按键失效变为切换控件解决
  20. 何为Agile,何为Scrum

热门文章

  1. Windows下C++通过Hooks记录键盘敲击记录的代码
  2. 监听器(统计在线人数)
  3. OLTP和OLAP的区别;
  4. Python 随机数的产生
  5. IPv6进阶:IPv6 过渡技术之 6to4 自动隧道
  6. 断言信息与元素等待_Sinno_Song_新浪博客
  7. 《HTTP》hfs快速搭建HTTP文件服务器
  8. 第三章微分中值定理及导数应用(柯西中值和泰勒公式)
  9. ae打开模板显示不出来_打开AE模板提示缺少rsmb pro插件的解决办法
  10. Unity封装MemoryStream进行内存读写