PHP如何应对高并发
综述
在之前的工作中,并没有接触过也没有处理过高并发,但是高并发是必须要学习的,在现在的公司没有技术leader,所以,高并发以及优化的一些问题需要自己去考虑并且解决。
解决方案
一:什么是高并发?
高并发指的是并发数量,是指同一时间有多少个访问同时来访问同一api接口或者url地址。
二:高并发相关概念
(1)(每秒查询率):每秒请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求);
a) 使用ab对Nginx进行压力测试
b) Mysql状态查看QPS
(2)PV(Page View):综合浏览量,即页面浏览量或者点击量,一个访客在24小时内访问的页面数量(注:同一个人浏览你的网站的同一页面,只记做一次pv);
a) PV的统计:PV是每次加载页面都加1;
(3)UV(Unqie Vistor):独立访客,一定时间范围内,相同访客多次访问网站,只计算为1个独立访客;
(4)吞吐量(fetches/sec) :单位时间内处理的请求数量 (通常由QPS和并发数决定);
(5)响应时间:从请求发出到收到响应花费的时间;
(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)流量优化 -- 去除一些恶意请求,进行防盗链处理;
a) Referer:以Nginx为例,前提加载ngx_http_referer_module模块 (易伪造referer,安全性低)
location ~* \.(gif|jpg|png|webp)$ {
#指令valid_referers 全局invalid_referervalid_referers none blocked domain.com *.domain.com ;if ($invalid_referer) {return 403;#rewrite ^/ http://www.domain.com/403.jpg;}
}
b) 加密签名:通过签名,根据计算签名的方式,判断请求是否合法,如果合法则显示,否则返回错误信息
加密签名 (安全性高)
#以Nginx为例,前提加载第三方模块HttpAccessKeyModule实现防盗链
location ~* \.(gif|jpg|png|webp)$ {accesskey on;accesskey_hashmethod md5;accesskey_arg key;accesskey_signature "mysrc$remote_addr";
}
(2)前端优化;
- 减少http请求次数;
a) CSS Sprites(雪碧图) -- 合拼图片,再使用css的background-image和background-position来指定显示元素 CSS Sprites与图片地图性能差不多,但CSS Sprites更加简单灵活;
b) 合并JS与CSS文件 -- 加载一个JS文件比加载多个JS文件要快,一般会使用前端自动构建工具打包合并;
c) 图片使用base64编码 -- 图片base64除了可以使用在<img>中,还可以使用在css的background-image中;
d) 图片地图 -- 把多张图片合成一张,再使用<map>标签来实现对图片上不同区域的链接;
2. 添加异步请求,当用户触发某个事件之后,再异步请求数据;
3. 启用浏览器缓存和文件压缩;
4. CDN加速;
5. 将图片以及文件类放在其他服务器上(减少I/O);
(3)服务端优化;
1. 页面静态化处理;
2. 并发处理;
3. 队列处理;
(4)数据库优化;
1. 数据库缓存;
2. 数据库读写分离;
a) 对于高并发系统来说,一开始都是读多写少,大量的读请求经过业务层到达持久层之后对数据库产生了极大的压力,此时就会准备一个和生产库一致的数据库来单独接收处理读请求,一般这个叫做从库,也会被称为读库,高并发流量中的读请求会被引流到从库,而写请求还是在主库写,主库和从库之间依靠主从复制机制来确保两个库的数据近乎实时一致,这样用户在读请求的时候几乎发现不了数据的不一致。
3. 对数据库进行分库、分表;
a) 读写分离主要是为了应对读请求,那如果写请求的流量大,就会考虑用到对数据库进行分库分表操作;
4. 负载均衡;
(5)WEB服务器优化;
- Nginx反向代理实现负载均衡;
- lvs实现负载均衡;
总结
以上只是一些方案,之后会不断学习并且落实到项目中,针对各个方面进行优化,加油,奥利给。
参考:
https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79261765
https://www.jianshu.com/p/cf0cb82ee5ec
PHP如何应对高并发相关推荐
- 小米开源监控系统OpenFalcon应对高并发7种手段
2019独角兽企业重金招聘Python工程师标准>>> 小米开源监控系统OpenFalcon应对高并发7种手段 原创 2016-04-01 秦晓辉 高可用架构 编者按:本文是秦晓辉在 ...
- 程序员过关斩将--应对高并发系统有没有通用的解决方案呢?
" 灵魂拷问: 应对高并发系统有没有一些通用的解决方案呢? 这些方案解决了什么问题呢? 这些方案有那些优势和劣势呢? 对性能孜孜不倦的追求是互联网技术不断发展的根本驱动力,从最初的大型机到现 ...
- 应对高并发的几个常见方法
我们在应对高并发大流量时也会采用类似"抵御洪水"的方案,归纳起来共有三种方法. Scale-out(横向扩展):分而治之是一种常见的高并发系统设计方法,采用分布式部署的方式把流量分 ...
- 如何应对高并发问题?
如何应对高并发问题? 我觉着可以从两方面来着手,第一方面是硬件,第二方面是软件.当然硬件方面做的比较少,从软件方面来说做的就比较多了. 硬件方面的话,我们可以购买性能更好的服务器,或者是提升现有服务器 ...
- 京东云携手达达构建行业首个跨云双活平台 应对高并发需求
达达快送平台的孙壮不经意间刷新了自己配送时效的记录. 2020年6月18日,他只用了十几分钟就将达达集团旗下即时零售平台京东到家的订单送到了用户手中.并且还是在层层山峦,蜿蜒崎岖的山城重庆. 跟孙壮一 ...
- 视频直播系统开发:如何应对高并发访问?
视频直播开发的挑战 随着移动互联网的快速普及,视频直播已经成为了新的社交媒体形式,也成为了一种新的商业模式.现在,越来越多的人开始使用视频直播来展示自己的生活和工作,同时,越来越多的企业开始将视频直播 ...
- 深入浅出!阿里运维专家三种方法教你如何应对高并发“海啸”场景
作者:田杰,阿里云数据库高级运维专家 在数据库的日常使用中,来自应用的高并发场景并不罕见,其标志性的表现为 高新连接创建速率(CPS,比如 PHP 短连接).发送大量请求到 DB 数据库层. 如同 海 ...
- java队列实现限流,java中应对高并发的两种策略
目的:提高可用性 通过ExecutorService实现队列泄洪 //含有20个线程的线程池 private ExecutorService executorService = Executors.n ...
- 支付结算系统如何应对高并发、热点账户等问题
互联网金融系统的核心是支付结算,而支付结算的基础又是账户系统.金融账户系统的特点是并发量大.响应快.交易金额大,热点账户问题突出.一个合格的账户系统既要解决上述问题,又必须绝对保证资金安全.作为宜信这 ...
- 华为云擎天架构如何应对“高并发”?
Hello,你好呀,我是灰小猿!一个超会写bug的程序猿! 上个月双十一刚刚过完,身为"电子发烧友"的广大程序猿小伙伴们剁手了嘛? 但是嘞,剁手归剁手,作为一名优秀的程序员,在无时 ...
最新文章
- 二极管7种应用电路详解之二
- python web-Web开发
- vmware14/15 安装Ubuntu12.04 图文八步法
- python 近期用到的基础知识汇总(五)
- 轻量级过程改进项目启动
- 使用SmartSVN打分支与合并代码
- 桌面有u盘符计算机里没有了,教你电脑不显示u盘盘符怎么办
- gradle 配置及设置本地仓库
- python提取格式化日志
- 用Java输出正方形,长方形
- matlab生成主对角占优,matlab实现判断是否能否生成严格对角占优矩阵
- java为什么 foreach比for效率高
- java里直线绕z轴逆时针旋转_空间直线绕任意轴旋转后的方程
- 在Windows上安装Elasticsearch v5.4.2
- gnuplot详细操作
- 招聘:赴微软工作SharePoint技术专家(V-,北京)
- 刀片服务器的故障信息,刀片服务器故障
- C语言直接驱动硬件实现PC机的串口操作
- 【RAII】RAII 技术(内存安全解决技术/自动化解锁技术)
- MVT MVC模型框架
热门文章
- CS之攻击菜单详解-后门生成与上线
- 医药电子 | 温度传感器的类型原理特点和应用
- ajax java servlet_$.ajax(); 对应后台java servlet?
- 荣耀手机动态修改imei信息
- 嵌入式linux开发 周立功,嵌入式linux开发教程 周立功
- 关于瑞萨RH850中断的异常处理函数地址Exception Handler Address的理解
- java模拟借书系统E R图_作业—模拟借书系统
- 硬件工程师痛苦的BOM整理工作,幸好123BOM工具把我拽出水深火热之的BOM编辑工作,超级好用的研发BOM工具,集BOM编辑、BOM合并、BOM拆分、BOM整理等
- 设置Windows系统双网卡同时上内外网
- win7安装visio2016需要通用CRT(KB2999226)