高并发解决方案
# PHP如何解决网站大流量与高并发的问题?
# 考点
- 高并发架构相关概念
- 高并发解决方案案例
# 高并发是什么?
什么叫并发?所谓的并发就是某一个时间点,有多少个访问同时到来,那么什么叫高并发呢?通常一个系统的日PV在千万以上的,有可能是一个高并发系统。
# 高并发关心的问题
指标说明
指标 | 描述 |
---|---|
QPS | 每秒钟请求或者查询的数量 |
吞吐量 | 单位时间内处理的请求量 |
响应时间 | 从请求发出到响应花费的时间 |
PV | 综合浏览量,即页面浏览量或者点击量,一个访客在24小时内访问的页面数量,同一个用户浏览一个页面作为一个PV |
UV | 独立访客,一定时间范围内相同访客多次访问网站,计算为一个独立访客 |
带宽 | 计算带宽大小需要关注峰值流量和页面的平均大小,峰值一般是平均值的倍数 |
日网站带宽 | PV/统计时间(换算到秒)*平均页面大小(单位kb)*8 |
峰值每秒请求数(QPS) | (总PV数80%)/(6小时秒数20%)=峰值每秒请求数(QPS),基础原则:80%的访问量集中在20%的时间 |
QPS不等于并发连接数,QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量
# 压力测试
压力测试:测试单台服务器能承受的最大并发、QPS值 常用性能测试工具:ab、wrk、http_load、web bench、siege ab:是Apache官方推出的工具,测试目标是基于url,用于测试Apache、Nginx的负载压力
ab -c 100 -n 5000
1
注意事项:
- 测试机器与被测试机器分开
- 不要对线上服务器做压力测试
- 观察测试工具ab所在的机器,以及被测试的前端机的cpu、内存、网络等都不超过最高限度的75%
# QPS峰值
QPS | 场景描述 | 解决方案 |
---|---|---|
QPS达到50 | 小型网站 | 一般的服务器可以应付 |
QPS达到100 | 假设关系型数据库每次请求在0.01s,单页面只有一个SQL查询,那么100QPS意味着1s完成100次请求,但是此时无法保证数据库查询可以完成100次 | 数据库缓冲层、数据库的负载均衡 |
QPS达到800 | 假设我们使用的百兆带宽,那么网站出口的实际带宽是8M左右,假设每个页面只有10k,在这个并发条件下,百兆带宽已经吃完 | CDN加速,负载均衡 |
QPS达到1000 | 假设使用memcache缓冲查询数据,每个页面对Memcache的请求远大于直接对DB请求Memcache的悲观并发数在2w左右,但有可能在之前内网带宽已经吃完,表现出不稳定 | 静态HTML缓冲 |
QPS达到2000 | 这个级别下,文件系统访问锁称为了灾难 | 做业务分离,分布式存储 |
# 高并发解决案例
流量优化:
- 防盗链处理
前端优化:
- 减少http请求
- 添加异步请求
- 启用浏览器缓冲和文件压缩
- CDN加速
- 建立单独的图片服务器
服务端优化
- 动态语言静态化
- 动态语言并发处理
数据层优化
- 数据库缓冲层的优化
- MySQL数据层的优化
架构优化
- web服务负载均衡
# 相关连接
上次更新: 2020/12/31, 06:55:18