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


Posted in PHP onMarch 09, 2021

一、高并发的概念

在互联网时代,并发,高并发通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。

 

二、高并发架构相关概念

1、QPS (每秒查询率) : 每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求)

2、PV(Page View):综合浏览量,即页面浏览量或者点击量,一个访客在24小时内访问的页面数量

--注:同一个人浏览你的网站的同一页面,只记做一次pv

3、吞吐量(fetches/sec) :单位时间内处理的请求数量 (通常由QPS和并发数决定)

4、响应时间:从请求发出到收到响应花费的时间

5、独立访客(UV):一定时间范围内,相同访客多次访问网站,只计算为1个独立访客

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

7、日网站带宽: PV/统计时间(换算到秒) * 平均页面大小(kb)* 8

 

三、需要注意点:

1、QPS不等于并发连接数(QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量)

2、峰值每秒请求数(QPS)= (总PV数*80%)/ (六小时秒数*20%)【代表80%的访问量都集中在20%的时间内】

3、压力测试: 测试能承受的最大并发数 以及测试最大承受的QPS值

4、常用的性能测试工具【ab,wrk,httpload,Web Bench,Siege,Apache JMeter】

 

四、优化

1、当QPS小于50时

优化方案:为一般小型网站,不用考虑优化

2、当QPS达到100时,遇到数据查询瓶颈

优化方案: 数据库缓存层,数据库的负载均衡

3、当QPS达到800时, 遇到带宽瓶颈

优化方案:CDN加速,负载均衡

4、当QPS达到1000时

优化方案: 做html静态缓存

5、当QPS达到2000时

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

 

五、高并发解决方案案例:

1、流量优化

防盗链处理(去除恶意请求)

2、前端优化

(1) 减少HTTP请求[将css,js等合并]

(2) 添加异步请求(先不将所有数据都展示给用户,用户触发某个事件,才会异步请求数据)

(3) 启用浏览器缓存和文件压缩

(4) CDN加速

(5) 建立独立的图片服务器(减少I/O)

3、服务端优化

(1) 页面静态化

(2) 并发处理

(3) 队列处理

4、数据库优化

(1) 数据库缓存

(2) 分库分表,分区

(3) 读写分离

(4) 负载均衡

5、web服务器优化

(1) nginx反向代理实现负载均衡

(2) lvs实现负载均衡

PHP 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
php采集时被封ip的解决方法
Aug 29 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
php时区转换转换函数
Jan 07 PHP
简单谈谈favicon
Jun 10 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
Nov 13 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 #PHP
PHP 出现 http500 错误的解决方法
Mar 09 #PHP
PHP 实现链式操作
Mar 09 #PHP
PHP中SESSION过期设置
Mar 09 #PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 #PHP
PHP 实现重载
Mar 09 #PHP
PHP 实现缩略图
Mar 09 #PHP
You might like
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
使用php清除bom示例
2014/03/03 PHP
php使用session二维数组实例
2014/11/06 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python每天定时运行某程序代码
2019/08/16 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
《搭石》教学反思
2014/04/07 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
关于军训的感想
2015/08/07 职场文书
新年寄语2016
2015/08/17 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
Redis实战高并发之扣减库存项目
2022/04/14 Redis
解决Oracle数据库用户密码过期
2022/05/11 Oracle
Python sklearn分类决策树方法详解
2022/09/23 Python