多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 高并发的解决方案 ## 高并发架构相关概念 **并发**:同一时间点,访问的数量。 **高并发**:一个系统的日PV在千万以上,有可能是一个高并发系统 **高并发的问题,我们具体关心什么?** + *QPS*:每秒钟请求或者查询的数量 + *吞吐量*:单位时间内处理的请求数量(通常由QPS与并发数决定) + *响应时间*:从请求打出到收到响应花费的时间。 + *PV*:综合浏览量(Page View),一个访客在24小时内访问的页面数量。同一个人浏览网站的同一个页面,只记作一次PV。 + *UV*:独立访客(Unique Visitor),即一定时间范围内相同访客多次访问网站,只记1个独立访客。 + *带宽*:计算带宽需要关注两个指标,峰值流量和页面平均大小。 日网站带宽 = PV / 统计时间(s) * 平均页面大小(KB) * 8 >+ QPS 不等于 并发连接数 >+ QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量 > + 峰值每秒请求数(QPS)= (总PV数据 * 80%) / (6小时秒数 * 20%) ### 压力测试 目的:检测服务器的最大承受QPS,最大的并发数 **性能测试工具** + ab + wrk + http_load + Web Bench + Siege + Apache JMeter #### ab 全称Apache Benchmark,是Apache推出的工具。 创建多个并发访问线程,模拟多个访问者同时对某一URL地址记性访问。 **安装ab** ~~~ yum -y install http-tools ~~~ **ab的使用** > 模拟并发请求100次,总共请求5000次 ~~~ ab -c 100 -n 5000 待测试网站 # 如: ab -c 100 -n 5000 http://47.93.6.200/i.php ~~~ **注意** + 测试机器与被测试机器要分开 + 不要对线上的服务做压力测试 + 观察测试工具ab所在机器,以及被测试的前端机的CPU、内存、网络都不超过最高限度的`75%` ### QPS达到极限值 随着QPS的增长,每个阶段需要根据实际情况来进行优化。 #### QPS达到 50 可称之为小型网站,一般的服务器都可以应付。基本上是不需要优化的。 #### QPS达到 100 假设关系型数据库的每次请求在0.01秒完成 假设单页面只有一个SQL查询,那么100QPS意味着1秒钟完成100次请求,但是此时我们并不能保证数据库查询能完成100次 **方案:**数据库缓存层、数据库的负载均衡 #### QPS达到 800 假设我们使用百兆带宽,意味着网站出口的实际带宽是8M左右 假设每个页面只有10K,在这个并发条件下,百兆带宽已经吃完 **方案:**DN加速、负载均衡 #### QPS达到1000 假设使用 Memcache缓存数据库查询数据,每个页面对Memcache的请求远大于直接对DB的请求 Memcache的悲观并发数在2W左右,但有可能在之前内网带宽已经吃光,表现出不稳定 **方案:** 态HTML缓存 #### QPS达到2000 这个级别下,文件系统访问锁都成为了灾难 **方案:** 业务分离、分布式存储 ## 高并发解决方案 + 流量优化 + 反盗链处理 + 前端优化 + 减少HTTP请求:CSS、JS、图片进行合并 + 添加异步请求:需要再请求 + 启用浏览器缓存和文件压缩 + CDN加速 + 建立独立图片服务器 + 服务端优化 + 页面静态化 + 并发处理 + 队列处理 + 数据库优化 + 数据缓存(Memcache、Redis、Monogo) + 分库分表、分区操作 + 读写分离 + 负载均衡 + web服务器优化 + 负载均衡 # 大流量的解决方案