这不是一篇回答问题的文章,而是由此引发的一个思考。大家仔细想想。当你听说高并发网站时,你会怎么看待这个网站?第一个想到的是淘宝吗?带着问题,我们一起思考技术,写这个话题是因为我对搜索引擎给我的答案不太满意,然后决定把自己思考的一些东西分享出来,希望大家一起讨论。面试的时候经常会被问到有没有高并发经验?先不说兼做中考的那些自命不凡的公司。我认为什么是高并发?一天pv多少肯定不会高。先在网上搜索了一下,没有找到明确的标准定义。那么什么是并发呢?并发,在操作系统中,指的是几个程序在从开始运行到运行结束之间的一段时间内,并且这些程序都运行在同一个处理器上,但是在任意时间点只有一个程序运行在处理器。摘自百度百科我们所说的高并发指的是什么?上面的定义显然不是我们通常所说的并发。在互联网时代,并发、高并发通常指的是并发访问。即在某个时间点,有多少次访问同时到来。看到有人对高并发给出了类似的定义:高并发通常是指我们提供的系统服务可以同时并行处理很多请求。我们来看看这个定义。这里,我们先把并发混淆成并行。并发和并行的区别看这里,我就不多说了,继续讨论并发。然后定义又说了很多请求?什么是很多请求?作为一个中国人,这个词让我天马行空……好了,扯远了继续本文。从上面的分析可以看出,网络行业对于高并发并没有明确的定义。但是根据我的搜索,这个概念一般只涉及pv在1000万以上的公司。所以我想出了一个自定义的概念:如果某个系统的日pv在千万级以上,那么它可能是一个高并发系统。为什么可能?那是因为有些公司根本不走技术路线,完全靠机器堆,这不在我们的讨论范围之内。对于高并发问题,我们应该特别关心什么?说实话,高并发是一个比较抽象的概念。很难有一个统一的、可衡量的标准。怎么会有一些其他维度的标准指标来衡量系统的性能呢?跟大家说说以前计算机课程中的一些指标。先声明几个概念,不要打瞌睡。QPS(TPS):每秒请求数/事务数,在互联网领域,是指每秒响应请求数(指http请求);吞吐量:单位时间内处理的请求数(通常由QPS和并发数决定);响应时间:系统响应请求的平均时间。比如系统处理一个HTTP请求需要200ms,而这200ms就是系统的响应时间(我觉得这应该只包括处理时间,忽略网络传输时间)。这里必须注意,QPS≠并发。并发是指在某个时刻有多少访问同时到来。QPS是指以秒为单位响应的请求数。那么这里有一个公式很容易计算出来:QPS=并发数/平均响应时间。我们后面的分析将基于这个公示。如果你不明白,让我们重温一下。现在我们假设一个场景:因为QPS是每秒处理的http请求数。那么1s=1000ms。假设我们当前需要100ms来完成一个http请求服务器的处理(即平均响应时间=100ms)。然后它可以在1s内处理10个请求。也就是qps=10,算出来并发数=10我们经常被问到高并发。其实从某种程度上来说,就是如何提高现有程序的性能。现在我们根据以上假设进行分析。假设有一个系统性能就是我们上面的假设。每天300万pv,单机运行(当然经常宕机)。根据以上系统性能数据,给出优化方案。提高并发能力通过上面的分析,要提高并发能力,就需要提高我们的qps(其实这也不完全正确,为了说明问题,我们先放弃一部分正确性)。最快的解决方案是增加机器数量。下面我们根据上述情况来实际计算一下。访问量:200wpvQPS:10根据日常经验,80%的访问量集中在20%的时间。计算这台200w的pv机器实际需要达到多少qps。qps=(200w*0.8)/(24*3600*0.3)qps=61.7其实如果我们在单机上,我们要求每秒处理请求达到61.7以上,但实际上我们的当前系统的qps是10,怎么解决呢?解决方案一:个人使用机器的能力是有限的,但团队的力量是无限的。一台机器搞不定,我们就多装几台机器。这涉及到db主从、读写分离、负载均衡等技术。其原理是分流,分散先前集中的压力。改革方案见效快、灵活、落地快。方案二:提高单机性能单机性能能提高多少取决于你的机器配置和你的服务的复杂程度。ps:写到这里突然能明白为什么网上要求高并发的很多,而且没有具体数据,因为这个真的只是针对业务的,100并发对于静态网页来说算不了什么,但是对于一些计算密集型的估计……那么普通的单机怎么提升性能呢?比如:增加不常变化数据的缓存,开启phpopcache,优化代码(如:n+1问题,多重嵌套循环,深度递归等),db表优化等。因为这几点就足够了写一本书。为什么不继续。总结由于笔者本人并没有实际体验过kw级的PV场景,所以很多东西不一定是正确的。这篇文章也是为了澄清一点我的想法。希望和更多的朋友一起探讨。也希望这篇文章能够解决大家的一些疑惑,让我们从高大上的概念落地到实际的问题上。参考资料并发和并行的区别系统性能测试想一个概念github:https://github.com/helei112g我在github上开源了支付宝支付、微信支付、招商网通支付的phpsdk。希望对大家提高项目开发效率有所帮助。项目地址
