高并发大流量

1. 什么是高并发
高并发是互联网发布式系统架构设计中必须考虑的因素之一,通过设计保证系统能够同时并行处理多少请求。

高并发的指标
响应时间:系统对请求做出响应的时间。
QPS:每秒响应请求数。(总PV*80%)/(6小时的秒数)*20%。通过压力测试可以得到最大承受的QPS值。
吞吐量:单位时间响应请求数。
并发用户数:同时承载正常使用系统功能的用户数量。
带宽:峰值流量和页面的平均大小。
综合浏览量:PV。

当QPS小于50,属于小型网站,基本服务器可以承受,不需要优化。
当QPS达到100,属于遇到数据查询瓶颈,即假设一个请求一个sql请求,数据库响应达到的速度为0.01s,1s只能支持100个sql完成,这时需要进行数据库缓存层,数据库的负载均衡。php数据库短连接性能普遍上不去,CPU 大量资源被系统消耗,网络一旦抖动,会有大量 TIME_WAIT 产生,不得不定期重启服务或定期重启机器,服务器工作不稳定,QPS 忽高忽低,稳定高效的连接池可以有效的解决上述问题,它是高并发的基础。mysql连接的IO消耗大。
当QPS达到800,属于遇到带宽瓶颈,即假设服务器是百兆的带宽,网站出口的实际带宽是8M左右,每个页面大小为10k,就不够了,这时可以通过CDN加速(不同的网络代理走不同的),负载均衡。
当QPS达到1000,则可以缓存数据库查询数据,memcache的悲观并发数在2w左右,但在这之前,内网带宽已经被吃光,表现出不稳定。
当QPS达到2000,这个级别的文件系统访问锁都成为问题,应该做业务分离,分布式存储。

解决方案
主要有优化数据查询,减少请求,带宽优化,分布式。

  1. 防盗链处理(去除恶意请求)
		valid_referers 182.61.42.187 ;
        if ($invalid_referer) {
            return 403;
        }

在这里插入图片描述

  1. 减少http请求(将css,js,图片合并)
  2. 添加异步请求(当用户触发时才发起请求)
  3. 启用浏览器缓存和文件压缩,浏览器缓存主要分为本地缓存(200 cached)和协商缓存(304 Not Modified)

expires time;
为负值时表示 Cache-Control:no-cache;
当为正或者 0 时,就表示 Cache-Control:max-age=指定的时间;
当为 max 时,会把 Expires 设置为 “Thu, 31 Dec 2037 23:55:55 GMT”, Cache-Control 设置到 10 年;

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    { 
    	valid_referers 182.61.42.187 ;
        if ($invalid_referer) {
            return 403;
        }

        expires      30d;
    }
  1. CDN加速(实现跨运营商、跨地域的用户覆盖)
  2. 建立独立的图片服务器(减少IO)
  3. 页面静态化
  4. 并发处理
  5. 队列处理
  6. 数据库缓存
  7. 分库分表,分区
  8. 读写分离
  9. 负载均衡(nginx负载均衡,lvs负载均衡)
upstream services{
    server 127.0.0.1:9501;
    server 127.0.0.1:80;
}
server{
	proxy_pass http://services;
}

常见互联网分布式架构如上,分为:
(1)客户端层:典型调用方是浏览器browser或者手机应用APP
(2)反向代理层:系统入口,反向代理
(3)站点应用层:实现核心应用逻辑,返回html或者json
(4)服务层:如果实现了服务化,就有这一层
(5)数据-缓存层:缓存加速访问存储
(6)数据-数据库层:数据库固化数据存储
整个系统各层次的水平扩展,又分别是如何实施的呢?
(1)反向代理层可以通过“DNS轮询”的方式来进行水平扩展; 是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。 当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。
(2)站点层可以通过nginx来进行水平扩展;通过修改nginx.conf,可以设置多个web后端。
当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。
(3)服务层可以通过服务连接池来进行水平扩展;如果需要优雅的进行服务层自动扩容,这里可能需要配置中心服务自动发现功能的支持。
(4)数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;
各层实施水平扩展后,能够通过增加服务器数量的方式来提升系统的性能,做到理论上的性能无限。将原本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,以达到扩充系统性能的目的。

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值