作者:边鹏_尛爺鑫来源:
大家心里仔细想想,当你们听到高并发网站时,心里对这个网站是个什么概念?
首先想到的是淘宝吗?带着问题,我们一起思考技术~
写这个话题是因为我对搜索引擎给我的答案很不满意,然后决定把思考的一些东西分享出来,希望可以大家彼此讨论下。
我们经常在面试的时候,被问到有没有高并发的经验?先不说哪些考高并发的装逼公司。我思考的是什么才算是高并发?你一天几个pv肯定高不了。首先在网上查找一下,并未找到明确的标准定义。那么什么是并发呢?
并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
摘自百度百科
我们说的高并发是什么?
上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发、高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。
我看到有人给高并发下了类似的定义:
高并发通常是指我们提供的系统服务能够同时并行处理很多请求。
之后是单机nosql无法承载,需要nosql横向扩展,一般是十万到百万QPS。最后是难以单纯横向扩展nosql,比如微博就引入多级缓存架构,这种架构一般可以应对百万到千万对nosql的访问QPS。 当然面向用户的接口请求一般到不了这个量级,。
来看看这个定义,这里首先把并发给混淆到并行了。关于并发并行的区别看这里我就不多说,继续探讨并发。
然后定义又说很多请求?什么叫很多请求?做为中国人,这个词让我想象力一发不可收拾......好了,拉回来,继续本文。
那么从上面的分析,可以看出来高并发在网络上业界也没有明确的定义。但根据我搜索情况,一般都是pv在千万级别以上的公司才会涉及到这个概念。所以我得出一个自定义概念:如果某个系统的日pv在千万级别以上,他就可能是一个高并发的系统。
为什么说是可能?那是因为有的公司完全不走技术路线,全靠机器堆,这不在我们的讨论范围。
对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。一般需要达到139QPS,因为是峰值。计算关系:QPS=并发量/平均响应时间。并发量=QPS*平均响应时间。
高并发的问题,我们具体该关心什么?
高并发:在服务器后台,我们常用qps(每秒访问次数)来反映服务请求并发数的多寡,同理,当同一时段中项目总数量(尤其是与人数的比例)超出某阈值时,我们称之为高并发;隐性:说白了,就是老大当下并不那么关心的项目。二。
讲真话,高并发是个比较抽象的概念。很难有一个统一的可衡量的标准。哪么有一些其它维度的标准指标来衡量系统的性能吗?
搬出以前计算机课程里边的一些指标来跟大家聊聊。
在互联网时代,并发,高并发通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。二 高并发架构相关概念 1、QPS (每秒查询率) : 每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指 HTTP 请求)2。
先
1.QPS(TPS):每秒钟 request/事务 数量,在互联网领域,5000并发的qps是多少,指每秒响应请求数(指http请求);,
2.吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定);
这里一定要注意呃,QPS ≠ 并发数
( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)。一般需要达到139QPS,因为是峰值。QPS 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。每秒查询率 因特网上,经常用每秒查询率。
并发是指,某个时刻有多少个访问同时到来。QPS是指秒钟响应的请求数量。那么这里就肯容易推算出一个公式:
不能说10W QPS的秒杀是高并发,而1W QPS的信息流就不是高并发。信息流场景涉及复杂的推荐模型和各种人工策略,它的业务逻辑可能比秒杀场景复杂10倍不止。因此,不在同一个维度,没有任何比较意义。 2、业务都是从0到1做起来的,并发。
QPS = 并发数 / 平均响应时间
后面我们的分析都是围绕这个公示来进行展开,没明白的再回味一下。
现在我们来假设一个场景:既然QPS是每秒钟处理的http请求数量。那么1s = 1000ms。假设我们当前一个http请求服务器处理完成需要100ms(即那么 平均响应时间 = 100ms )。那么它1s钟可以处理10个请求。也就是说 qps = 10。推算出 并发数 = 10
提高并发能力
通过上面的分析,要提升并发能力,我们就需要提升我们的qps(其实这里并不完全正确,为了说明问题,我们先放弃一部分正确性)
最快速解决方案,就是增加机器。我们根据以上情况来实际计算一下。
1.访问量:200w pv
根据日常经验,80% 的访问量集中在 20%的时间,算一下这 200w pv实际需要机器达到多少qps才能满足。
qps = (200w * 0.8) / (24 * 3600 * 0.3)qps = 61.7
实际上如果在单机上,要求我们每秒钟处理请求必须达到 61.7 以上才行,而实际上我们当前系统的qps是 10。那么怎么解决?
方案一:上机器
它的原理就是分流,把以前集中的压力分散开来。改方案见效快,灵活,实践起来也更快。
方案二:增加单机性能
单机到底性能能够增加到一个什么程度,这取决于你的机器配置,也取决于你的服务到底有多复杂。
ps:写到这里突然有点能够理解为什网上对高并发都是讲很多请求,没有具体数据了,因为这真的只能针对业务来讲,100个并发对静态网页来说根本没有的事儿,但是对于某些密集计算型的估计...
那么常见的单机如何提升性能?比如:增加不常变化数据的缓存,开启php的opcache,优化代码(如:n+1问题、多重嵌套循环、深层递归等),db表优化等等。由于这些每一个点拿出来都够写一本书了。咋就不继续下去。
总结
也希望本文能够解决你的一点疑惑,让我们能够从高大上的概念落实到实际问题中去。
2.