不知大家有没有想过要达到什么样的请求量级或者说能支持多少用户才算是一个支持高并发的Web应用。一天能支撑几百、几千的PV肯定算不上高并发系统。
对于怎么算高并发,其实网上也并未找到明确的定义。注意这里说的并发并不是编程中的并发,编程中的并发以及并发与并行的区别可以看看这篇文章,在互联网或者移动互联网中高并发是指有多少用户同时访问你的服务。
网上扒到一张鸟哥的微博吐槽:
根据之前在微博的经验,当时简单的业务单机做到了200左右的QPS,申请了100台左右的机器,那其实就能支持2万左右的QPS了。
先说几个概念:
QPS(TPS):单个进程每秒处理请求次数;
TPS: 单个进程每秒处理事务数;
吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定,注意:QPS!=并发数);
响应时间:系统对一个请求做出响应的平均时间。
并发数是指某个时刻有多少个访问同时到来,QPS是指每秒钟响应的请求数。
单机的几个公式:
每天总PV = QPS * 3600 * 6
每天总PV = QPS * 3600 * 8
服务器数量 = ceil( 每天总PV / 单台服务器每天总PV )
峰值QPS和机器计算公式原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间,所以:
峰值时间每秒请求数(QPS) = ( 总PV数 * 80% ) / ( 每天秒数 * 20% )
峰值时间需要的机器数 = 峰值时间每秒QPS / 单机的QPS
假设每天300w的PV在单机上,那么这台机器需要至少达到的QPS就是:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139
假设单机的QPS是90,那么就需要(139 / 90) = 2台机器来支持
当然,在实际情况下,服务器的配置,业务逻辑的复杂度等因素都对单机QPS有很大影响。
那么我们大概可以算出微博在春晚的峰值PV = 20000 * (86400 * 0.2)大约4亿?
如何提升并发能力
硬件方案:加机器
既然一台机器搞不定,我们就可以多上几台机器。然后就会涉及到DB的主从、读写分离、负载均衡等技术。
核心思想就是分流,把以前集中的压力分散开来。该方案简单、粗暴、有效,但成本较高。
软件方案:增加单机性能
其实单机性能能增加到什么程度,这取决于你的机器配置,也取决于你的服务到底有多复杂。
常见的单机提升性能途径可以考虑:数据加缓存,开启php的opcache,优化代码(如:n+1问题、多重嵌套循环、深层递归等),DB表优化(如索引、分表、分库)等等。