当前位置: 首页 > >

PHP高并发和大流量解决方案

发布时间:

高并发和大流量的解决方案


首先了解 什么是并发 ?


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


上面肯定不是我们所说的高并发,在互联网时代,所讲的并发,高并发,通常是指并发访问,也就是在某个时间点,有多少访问同时到来. 比如同时有两个人打开我的博文,这时,并发数为2;


在了解下什么是同时,一般我们讲的同时不是指一秒 大概是三分之一秒


通常如果一个系统的日PV在千万以上,有可能是一个高并发的系统;(为什么日PV千万级别还有可能不是高并发,有的公司就是有钱 就是用机器堆,不考虑优化,这种不在我们的讨论范围);


高并发我们应该具体关心的是什么?


QPS :每秒请求或者查询的数量,在互联网领域,指每秒相应请求数(HTTP请求);


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


响应时间:从请求发出到响应花费的时间,例如系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间;


PV:综合浏览量(Page View),即页面浏览器或者点击量,一个访客在24小时内访问的页面数量; PS(刷新不会累加PV)


同一个人游览你的网址同一页面,只记作一次PV;


UV:独立访客(UNiQue Vistor),即一定时间范围内相同访客多次访问网址,只计算为1个独立访客.


带宽:计算带宽大小需关注两个指标,峰值流量和页面的*均大小


日网站带宽= PV/统计时间(换算到秒) * *均页面大小(单位kb) * 8


峰值一般是*均值的倍数,根据实际情况来定


QPS 不等于并发连接数


QPS是每秒HTTP请求数量,并发连接数是系统同时处理的连接数量


(总PV数 * 80)/(6小时秒数*20%) = 峰值每秒请求数(QPS); (六小时只是预计时间,而为什么是PV的80和20的时间呢,因为百分之80的访问量在于百分之二十的时间,这就是28定律)


压力测试


测试能承受的最大并发


测试最大承受的QPS值


常用性能测试工具


ab,wrk,http_load,web Bench,Siege,Apache JMeter
这里详细的说下ab


ab 全称是apache banchmark,是apache官方推出的工具.


创建多个并发访问县城,模拟多个访问者同时对某一UPL地址进行访问,他的测试目标是基于URL,因此,它既可以用来测试apache的负载压力,也可以测试nginx,lighttp,tomcat,IIS等其它web服务器的压力.


ab的使用 例: 模拟并发请求100次,总共请求5000次


ab -c 100 -n 5000 待测试网址
-c代表并发数 -n代表总共请求


注意事项 :


测试机器与被测试机器分开,(会使数据不准确)
不要对线上服务做压力测试(线上直接崩了)
观察测试工具ab所在机器,以及被测试的前端机的CPU,内存,网络等都不超过最高限度的75%;


QPS达到极限


随着QPS的增长,每个阶段需要根据实际情况进行优化,优化的方案也与硬件条件,网络宽带息息相关.


QPS达到50
可以成为小型网站,一般服务器就可以应付;


QPS达到100
假设关系型数据库的每次请求在0.01秒完成;
假设单页面只有一个SQL查询,那么100QPS意味这1秒钟完成100次请求,但是此时我们不能保证数据库查询能完成100次


方案 数据库缓存层,数据库的负载均衡.


QPS达到800


假设我们使用百兆带宽,意味着网站出口的实际带宽是8M左右
假设每个页面只有10K,在这个并发条件下,百兆带宽已经吃完.


方案:CDN加速,负载均衡


QPS 达到1000


假设使用Memcache缓存数据库查询数据,每个页面对Memcache的请求远大于直接对DB的请求


Memcache的悲观并发在2w左右,但有可能在之前内网宽带已经吃光,表现出不稳定.


方案:静态HTML缓存


QPS达到2000


这个级别下,文件系统访问锁都成为了一个灾难.


方案:做业务分离,分布式存储.


优化方案 :


流量优化


防盗链处理

前端优化


减少HTTP请求 例如:css或js文件进行合并 文件会变大,但是请求变少添加异步请求启用游览器缓存和文件压缩CDN加速建立独立图片服务器

服务端优化


页面静态化并发处理队列处理

数据库优化


数据库缓存分库分表,分区操作读写分离负载均衡

Web服务器优化


负载均衡



友情链接: