查看原文
其他

Web 开发中,什么级别才算是高并发

点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长

每天凌晨00点00分, 第一时间与你相约

每日英文

Sometimes you gotta shut up, swallow your pride and accept that you're wrong. It's not giving up. It's called growing up.

有时候,你需要做的就是闭嘴,放下所谓的自尊,承认自己的错误。这不叫放弃,而叫成长。


每日掏心话

淡然面对幸运,笑着面对不顺,这才是人生。很多时候,我们是在毫无防备中受伤的,一句话,一件事,都有可能让牵手成为陌路。


来自:大愚Talk | 责编:乐乐

链接:segmentfault.com/a/1190000010844969

程序员小乐(ID:study_tech)第 665 次推文   图片来自网络


往日回顾:10大优秀编程项目,让你的简历金光闪闪



   正文   

  

这并不是一个回答的问题的文章,而是由此引发的一个思考。


大家心里仔细想想,当你们听到高并发网站时,心里对这个网站是个什么概念?首先想到的是淘宝吗?带着问题,我们一起思考技术


写这个话题是因为我对搜索引擎给我的答案很不满意,然后决定把思考的一些东西分享出来,希望可以大家彼此讨论下。


我们经常在面试的时候,被问到有没有高并发的经验?先不说哪些考高并发的装逼公司。我思考的是什么才算是高并发?你一天几个pv肯定高不了。首先在网上查找一下,并未找到明确的标准定义。那么什么是并发呢?


并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

摘自百度百科


我们说的高并发是什么?


上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发、高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。


我看到有人给高并发下了类似的定义:


高并发通常是指我们提供的系统服务能够同时并行处理很多请求。


来看看这个定义,这里首先把并发给混淆到并行了。


然后定义又说很多请求?什么叫很多请求?做为中国人,这个词让我想象力一发不可收拾......好了,拉回来,继续本文。


那么从上面的分析,可以看出来高并发在网络上业界也没有明确的定义。但根据我搜索情况,一般都是pv在千万级别以上的公司才会涉及到这个概念。所以我得出一个自定义概念:如果某个系统的日pv在千万级别以上,他就可能是一个高并发的系统。


为什么说是可能?那是因为有的公司完全不走技术路线,全靠机器堆,这不在我们的讨论范围。


高并发的问题,我们具体该关心什么?


讲真话,高并发是个比较抽象的概念。很难有一个统一的可衡量的标准。哪么有一些其它维度的标准指标来衡量系统的性能吗?搬出以前计算机课程里边的一些指标来跟大家聊聊。


先声明几个概念,别打瞌睡。


  • QPS(TPS):每秒钟 request/事务 数量,在互联网领域,指每秒响应请求数(指http请求);

  • 吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定);

  • 响应时间:系统对一个请求做出响应的平均时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间(我认为这里应该仅包含处理时间,网络传输时间忽略)。


这里一定要注意呃,QPS ≠ 并发数


并发是指,某个时刻有多少个访问同时到来。QPS是指秒钟响应的请求数量。那么这里就肯容易推算出一个公式:


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


后面我们的分析都是围绕这个公示来进行展开,没明白的再回味一下。


现在我们来假设一个场景:既然QPS是每秒钟处理的http请求数量。那么1s = 1000ms。假设我们当前一个http请求服务器处理完成需要100ms(即那么平均响应时间 = 100ms )。那么它1s钟可以处理10个请求。也就是说qps = 10。推算出并发数 = 10


常常我们被问到高并发的问题,其实从某种程度上来说是怎么提高现有程序的性能。现在我们基于上面的假设,来进行分析。假设现在有个系统性能上就是我们上面的假设,它每天有 300万pv,运行在单机上(当然经常宕机),按照上面的系统性能数据,给出优化解决方案。


提高并发能力


通过上面的分析,要提升并发能力,我们就需要提升我们的qps(其实这里并不完全正确,为了说明问题,我们先放弃一部分正确性)


最快速解决方案,就是增加机器。我们根据以上情况来实际计算一下。


  • 访问量:200w pv

  • QPS:10


根据日常经验,80% 的访问量集中在 20%的时间,算一下这 200w pv实际需要机器达到多少qps才能满足。


qps = (200w * 0.8) / (24 * 3600 * 0.3)

qps = 61.7


实际上如果在单机上,要求我们每秒钟处理请求必须达到 61.7 以上才行,而实际上我们当前系统的qps是 10。那么怎么解决?


方案一:上机器


个人的能力是有限的,团队的力量是无穷的。既然一台机器搞不定,我们就多上几台机器。这就涉及到db主从、读写分离、负载均衡等技术。


它的原理就是分流,把以前集中的压力分散开来。改方案见效快,灵活,实践起来也更快。


方案二:增加单机性能


单机到底性能能够增加到一个什么程度,这取决于你的机器配置,也取决于你的服务到底有多复杂。


ps: 写到这里突然有点能够理解为什网上对高并发都是讲很多请求,没有具体数据了,因为这真的只能针对业务来讲,100个并发对静态网页来说根本没有的事儿,但是对于某些密集计算型的估计...


那么常见的单机如何提升性能?比如:增加不常变化数据的缓存,开启php的opcache,优化代码(如:n+1问题、多重嵌套循环、深层递归等),db表优化等等。由于这些每一个点拿出来都够写一本书了。咋就不继续下去。


总结


由于笔者自己也是没有实际经历过kw级别pv场景,很多东西讲的不一定对,本文也是理清自己的一点思路。希望能够与更多朋友进行讨论。


也希望本文能够解决你的一点疑惑,让我们能够从高大上的概念落实到实际问题中去。


GitHub:github.com/helei112g


欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

欢迎各位读者加入程序员小乐技术群,在公众号后台回复“加群”或者“学习”即可。

猜你还想看


阿里、腾讯、百度、华为、京东最新面试题汇集

手动模拟JDK动态代理

JVM 发生内存溢出的 8 种原因、及解决办法

一起来学Java注解(Annotation),看了都说好!


关注微信公众号「程序员小乐」,收看更多精彩内容
嘿,你在看吗?

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存