解读PHP面试-高并发解决方案类考察点
整理自慕课网360大牛全面解读PHP面试 ,购买链接:https://coding.imooc.com/class/133.html
1.高并发和大流量解决方法
真题回顾
PHP如何解决高并发大流量问题?
考点分析
高并发架构的相关概念 : 概念百度百科并发 , 我们所说的并发,在互联网时代,并发、高并发通常是指并发访问,也就是在某个时间点有多少个访问同时到来。 通常如果一个系统的pv在千万以上,有可能是一个高并发的系统。 高并发的问题,我们该关心什么 , qps每秒钟请求或者查询的数量,在互联网领域,值每秒的响应的请求数。吞吐量, 单位时间内处理的请求数量(通常由qps 与并发数决定)。响应时间 从发出请求到收到响应花费的时间。pv: 综合浏览量(page view ),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量。同一个人流量一个网站的一个页面算一个pv 。uv: 独立访客(unique visitor),即一定的时间范围内,相同的访客多次访问网站,只计算为1个独立访客。带宽 :计算带宽大小需要关注两个指标,峰值流量和页面的平均大小。日网站带宽 = pv/统计时间(换算到秒)*平均页面大小(单位kb)*8 。 并发连接数 qps 不等于并发连接数,qps是每秒http请求数量,并发连接数是系统同时处理的请求数。 峰值每秒请求数 = (总pv数*80%)/(6小时秒数*20) , 含义80%的访问量集中在20%的时间。6小时是简单的估值 。压力测试 ,测试能承受的最大并发、测试最大承受的qps。 常用的性能测试工具 :ab、wrk、http_load、web bench 、 siege、Apache jmeter。ab工具使用可参考:https://blog.csdn.net/qq_16399991/article/details/56676780 注意事项:测试机与被测试机分开、不要对线上服务做压力测试、观察测试工具ab所在的机器,以及被测试的前端机的cpu,内存,网络等不超过最高限度的75%。
qps达到极限 : qps50 :小型网站,一般的服务器就可以应付;
qps达到100:假设关系型数据库的每次请求在0.01秒内完成,假设单页面只有一个sql查询,那么100qps意味着1秒钟完成100次请求,但是此时我们并不能保证数据库查询能完成100次,所以达到极限,优化方案:数据库缓存层、数据库负载均衡。
qps达到800:假设我们使用的百兆带宽,意味着网站出口的实际带宽是8M左右,假设每个页面只有10k,这个并发条件下,百兆的带宽已经吃完。方案:cdn加速、负载均衡。
qps达到1000, 假设使用memcache 缓存数据库查询,每个页面对memcache的请求远大于对db的请求,memcahe的悲观并发数在2W左右,但有可能在这之前内网带宽已经吃光,表现出不稳定。方案:静态html缓存。
qps达到2000 在这个级别下 文件系统访问锁都成为灾难。方案:做业务分离,分布式存储。
优化方案:
web服务器优化 :负载均衡
流量优化:防盗链处理 将恶意请求屏蔽,
前端优化:减少http请求、添加异步请求、启用浏览器缓存和文件压缩、cdn加速、建立独立的图片服务器、
服务端优化: 页面静态化、并发处理、队列处理、
数据库优化: 数据库缓存、分库分表、分区操作 、读写分离、负载均衡
一网打尽
2.web资源防盗链
相关概念:
什么是防盗链:盗链就是在自己的服务器上展示一些不是自己服务器上的内容
防盗链工作原理 : 通过refer 或者签名,网站可以检测到目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示他的网页地址,一旦检测到来源不是本站即进行阻止或者返回指定页面。 通过签名方式 通过计算签名的方式,计算签名是否合法,合法则显示,否则返回错误信息。
实现方法:通过referer方法 使用nginx 模块ngx_http_referer_module 用于阻挡来源非法的域名请求,nginx指令valid_referers,全局变量$invalid_referer.问题 可以伪装referer。 使用加密签名, 使用第三方模块httpAccessModule实现反盗链,
3.减少http请求
相关概念
为什么减少http请求次数: 性能黄金法则:只有10%-20%的最终用户响应时间花在接受请求的http文档上,剩下的80%-90%时间花在html文档引用的所有组件(图片,js,css ,flash等)。如何改善:减少组件数量,从而减少http请求。http连接产生的开销:域名解析-tcp连接-发送请求-等待-下载资源-解析时间
减少http请求的方式:css精灵、合并脚本和样式表适
4.浏览器缓存和压缩优化技术
5.CDN加速
6.建立独立的图片服务器
7.动态语言静态化
8.数据缓存层的优化
9.数据库缓存层的优化
10.mysql数据层的优化
11.web服务器负载均衡
相关概念:
七层负载均衡实现: 基于url等应用层信息的负载均衡;代表 nginx的proxy是他一个很强大的功能,实现了7层负载均衡。功能强大、性能卓越、运行稳定, 配置灵活简单、能自动剔除工作不正常的后端服务器、上传文件使用异步模式、支持多种分配策略。nginx负载均衡策略:内置策略:iphash、加权轮询, 扩展策略:fair策略:根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。通用hash:通用hash比较简单,可以以nginx内置变量为key进行hash、一致性hash:采用nginx内置的一致性hash环,支持memcache。
nginx配置:
四层负载均衡实现: 通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。lvs实现服务器负载均衡有三种方式NAT、DR、和TUN。
————————————————
版权声明:本文为CSDN博主「wangxiaoangg」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_16399991/article/details/82556527
解读PHP面试-高并发解决方案类考察点的更多相关文章
- PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类
一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...
- 关于SQL SERVER高并发解决方案
现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很 ...
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- java并发编程与高并发解决方案
下面是我对java并发编程与高并发解决方案的学习总结: 1.并发编程的基础 2.线程安全—可见性和有序性 3.线程安全—原子性 4.安全发布对象—单例模式 5.不可变对象 6.线程封闭 7.线程不安全 ...
- 高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发)
高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发) 一.总结 1.什么是负载均衡:当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服 ...
- JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案
JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案
- java系统高并发解决方案-转
转载博客地址:http://blog.csdn.net/zxl333/article/details/8685157 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图 ...
- java系统高并发解决方案(转载)
转载博客地址:http://blog.csdn.net/zxl333/article/details/8454319 转载博客地址:http://blog.csdn.net/zxl333/articl ...
- java系统高并发解决方案(转载收藏)
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站 ...
随机推荐
- Tkinter 之Frame标签
一.参数说明 语法 作用 width 设置 Frame 的宽度默认值是 0 height 设置 Frame 的高度默认值是 0 background(bg) 设置 Frame 组件的背景颜色 bord ...
- python3编程基础之一:关键字
在学习编程的过程中每种语言都会有一些特殊的字母组合在本语言中表示特定的含义,这种字母组合就是关键字.原则上,关键字是无法被重复定义的,否则,语言在应用中,就无法正确确定标号的意义了. 1.关键字的获取 ...
- JS-七大查找算法
顺序查找 二分查找 插值查找 斐波那契查找 树表查找 分块查找 哈希查找 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录).查找算法分类:1)静态查找和动态查找:注 ...
- Buuctf pwn1 详细wp
目录 程序基本信息 程序溢出点 确定返回地址 编写exp脚本 成功getshell 程序基本信息 我们可以看到这是一个64程序,没有保护开启. 程序溢出点 gets函数可以读取无限字符,存在栈溢出. ...
- Web安全测试 — 手工安全测试方法&修改建议
常见问题 1.XSS(CrossSite Script)跨站脚本攻击 XSS(CrossSite Script)跨站脚本攻击.它指的是恶意攻击者往Web 页面里插入恶意 html代码,当用户浏览该页之 ...
- MediaPlayer: MediaPlayer中的prepare方法和prepareAsync方法的区别
prepare方法是将资源同步缓存到内存中,一般加载本地较小的资源可以用这个,如果是较大的资源或者网络资源建议使用prepareAsync方法,异步加载.但如果想让资源启动,即start()起来,因为 ...
- 解读typescript中 super关键字的用法
解读typescript中 super关键字的用法 传统的js,使用prototype实现父.子类继承.如果父.子类有同名的方法,子类去调用父类的同名方法需要用 “父类.prototype.metho ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_15-认证接口开发-Redis配置
4.2 Redis配置 4.2.1 安装Redis 1.安装Redis服务 下载Windows版本的redis:https://github.com/MicrosoftArchive/redis/ta ...
- Java 8 Steam 例子整理
Java 8 Steam 例子整理 kexue 关注 2016.06.06 17:44* 字数 1860 阅读 3901评论 0喜欢 6 IBM: Java 8 中的 Streams API 详解 为 ...
- DN创建
1. 参考采购订单创建DN : BAPI_OUTB_DELIVERY_CREATE_STO FUNCTION zmmfm0202. *"--------------------------- ...