高并发和大流量解决方案

高并发架构相关概念

我们关系什么问题?

高并发:一个时间点,有多少个访问。日pv千万以上,算是一个高并发系统。

QPS:每秒钟请求或者查询的数量,或者每秒相应的请求(http请求)。

峰值每秒请求数(QPS) = (总PV数 * 80%)/ (6小时秒数 * 20% )

也就是说80%的访问量都集中在20%的时间里,2/8定律

并发连接数: QPS不等于并发连接数。QPS是每秒HTTP请求的数量,并发连接数是系统同时处理请求的数量。

吞吐量:单位时间内处理的请求数量(通常由QPS和并发数决定)

响应时间:从请求发出到收到相应的时间。例如系统处理一个HTTP请求需要100ms,这个100ms就是系统相应时间。

PV: 综合浏览量(Page View)也就是页面浏览量或者点击量,一个访客在24小时内访问的页面数量。(一个页面无限次刷新只算一个pv,同一个人浏览你的网站同一个页面,只记作一个PV)

UV:独立访客(UniQue Visitor),一定时间范围内相同访客多次访问网站,只记作一个独立访客。

带宽: 计算带宽大小需关注两个指标,峰值流量页面的平均大小。下面是一个计算日网站带宽的平均公式。

日网站带宽 = PV / 统计时间(换算到秒)* 平均页面大小 (单位KB)* 8

峰值一般时平均值的倍数,实际情况来定。

 

压力测试(了解单台服务器的QPS)

测试能够承受的最大并发,测试能够承受的最大QPS值。

比如日QPS算出来是200,我们的单台服务器QPS是50,那么我们就需要最少4台服务器才能完成正常访问。

常用的性能测试工具有:ab(推荐)、wrk、http_load、web Bench、Siege、Apache JMeter等

ab全称 apache benchmark,是apache官方推出的工具。他可以创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。他的测试目标基于URL,因此他可以用来测试Nginx、apache、iis 、lighthttp、tomact等web服务器的压力。

ab的使用:模拟并发请求100次 ,总共请求5000次。也就是说请求5000次每次100个。

测试要注意:

测试机器和被测试机器要分开。

不要对线上服务做压力测试,导致不必要的问题。

观察测试工具ab所在机器,以及被测试的前端机的CPU、内存、网络等都不要超过75%。

ab安装

只输入ab可以查看命令选项参数。

 

我们来使用ab访问一个php文件

得到

我的服务器一般般所以不能承载这样的php请求,但是为什么说要静态化,因为静态化就对服务器要求变少。我们来试一下,同样的服务器,我们用一个静态文件。

静态页面压力测试

得到

 

所以静态优化很重要。

 

QPS达到极限

随着QPS增长,每个阶段需要根据实际情况进行优化,优化的方案与硬件条件和网络带宽息息相关。

QPS达到50如何优化?

这种就是小型网站,一般的服务器就可以了。

QPS达到100如何优化?(数据库会遇到问题)

假设关系型数据库每次请求在0.01秒(理想状态)完成。

假设单个页面只有一个sql查询,那么100QPS就意味着1秒钟完成100次请求,但是此时我们并不能保证数据库查询能完成100次。

解决方案:数据库缓存层、数据库负载均衡

QPS到达800如何优化?(带宽会遇到问题)

假设我们使用百兆带宽,意味着网站出口的实际带宽为8M左右。

假设每个页面只有10K,在这个条件下,百兆带宽已经饱和了。

方案:CDN加速、负载均衡

QPS到达1000如何优化?

假设使用Memcache缓存数据库查询数据,每个页面对Memcache的请求远大于直接对DB的请求。

Memache的悲观并发数在2万左右,但可能在之前内网带宽已经吃光,表现出不稳定。

方案: 静态HTML缓存

QPS到达2000如何优化?

这个级别下,文件系统访问锁都成了灾难

方案:做业务分离,分布式存储

其他方向优化

1、流量优化:

防盗链处理

2、前端优化:

减少HTTP请求,合并css和js。

添加异步请求,防止一个时间点集中访问。

启用浏览器缓存和文件压缩。

CDN加速

独立图片服务器

3、服务端优化:

页面静态化处理

并发处理:异步处理。swoole、消息队列处理kafka、rebbitmq

4、数据库优化

数据库缓存redis,数据库mysql索引等

分库分表、分区操作。(垂直拆分,水平拆分等)可以借助工具mycat、heisenberg。

读写分离。一个服务器读,一个服务器写。

负载均衡  LVS

5、web服务器优化

负载均衡 :nginx反向代理实现负载均衡,LVS

 

 

 

 

 

 

 

 

 

 

 

 

发表评论