美文网首页面试复习
PHP如何解决大流量和高并发问题

PHP如何解决大流量和高并发问题

作者: 云三木 | 来源:发表于2020-05-27 21:10 被阅读0次

    一、高并发相关概念:

    QPS:每秒中请求或查询的数量,在互联网领域指每秒相应请求数(http请求);QPS不等于并发连接数;
    并发连接数:系统同时处理的请求数量。
    响应时间:从请求发出到收到响应花费的时间。
    PV:综合浏览量(Page View),即页面浏览量或点击量,一个访客在24小时内访问的页面数量。
    日网站带宽: PV / 统计时间 (换算到秒)* 平均页面大小 (单位KB) * 8;
    峰值QPS计算:(总PV数 * 80%) / (6小时秒数 * 20%) = 峰值每秒请求数(QPS);(80%的访问量集中在20%的时间里,6个小时可以看做中午、下午、晚上各两个小时);

    二、压力测试

    测试能承受的最大并发 和 测试最大承受的QPS值;

    常用测试工具:ab,wrk,http_load,Web Bench,Siege,Apache JMeter.
    这里使用ab进行测试,ab全称是apache benchmark,是apache官方推出的工具,创建多个并发访问线程,模拟多个访问者同时对一个URL进行访问。

    观察被测服务器的CPU,内存,网络等不要超过最高限度的75%;

    apache自带ab,也可以使用yum安装:

    注意测试机器与被测机器分开
    yum -y install http-tools
    ab #查看是否安装
    
    开始测试
    ab -c 100 -n 10000 https://www.aaa.com/index.php
    -c 单次请求100条 
    -n 一共10000条
    
    

    执行结果:截图,


    三、QPS等级

    QPS达到50

    小型网站,一般的服务器可以应付。基本不需要优化

    QPS达到100

    假设关系型数据库的每次请求在0.01秒内完成,如果单页面只有一个SQL查询,那么100QPS意味着1秒中要完成100次请求,但是此时我们并不能保证数据库查询能完成100次。
    方案:数据库层缓存,数据库的负载均衡(没试过)。

    QPS达到800

    假设我们使用百兆宽带,意味着网站的出口的实际带宽只有8M左右。如果每个页面只有10K,在这个并发条件下,百兆宽带已经吃完。
    方案:CDN加速,负载均衡

    QPS达到1000

    假设使用Mencache做缓存,每个页面对Memcache的请求要远大于对数据库的请求。那么使用Memcache已经没有意义了。
    Memcache的悲观并发数在2W左右,但有可能在那之前内网带宽就已经被吃完,表现不稳定。(QPS达到800的时候Memcache就已经不稳定了)
    方案:静态HTML

    QPS达到2000

    这个级别下,文件系统访问都成了灾难。
    方案:做业务分离,分布式存储

    四、优化

    前端优化: 减少http请求、添加异步请求、启用浏览器缓存文件数据以及文件压缩、cdn加速、oss文件存储
    流量优化:防盗链处理
    服务器优化:页面静态化、并发处理(多线程,异步)
    数据库优化:数据库缓存、数据库分库分表以及分区操作、读写分离(主从复制)
    web服务器优化:nginx负载均衡

    相关文章

      网友评论

        本文标题:PHP如何解决大流量和高并发问题

        本文链接:https://www.haomeiwen.com/subject/yllgahtx.html