高并发与大流量解决方案

1、相关概念

1.1、并发与并行

1.1.1、并发(Concurrent)

在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行

就想前面提到的操作系统的时间片分时调度。打游戏和听音乐两件事情在同一个时间段内都是在同一台电脑上完成了从开始到结束的动作,那么,就可以说听音乐和打游戏是并发的

1.1.2、并行

并行(Parallel),当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

这里面有一个很重要的点,那就是系统要有多个CPU才会出现并行。在有多个CPU的情况下,才会出现真正意义上的同时进行

1.1.3、并发与并行

我们两个人在吃午饭。你在吃饭的整个过程中,吃了米饭、吃了蔬菜、吃了牛肉。吃米饭、吃蔬菜、吃牛肉这三件事其实就是并发执行的。

对于你来说,整个过程中看似是同时完成的的。但其实你是在吃不同的东西之间来回切换的。

还是我们两个人吃午饭。在吃饭过程中,你吃了米饭、蔬菜、牛肉。我也吃了米饭、蔬菜和牛肉。

我们两个人之间的吃饭就是并行的。两个人之间可以在同一时间点一起吃牛肉,或者一个吃牛肉,一个吃蔬菜。之间是互不影响的

所以,并发是指在一段时间内宏观上多个程序同时运行。并行指的是同一个时刻,多个任务确实真的在同时运行

1.1.4、并发与并行的区别

并发,指的是多个事情,在同一时间段内同时发生了。

并行,指的是多个事情,在同一时间点上同时发生了。

并发的多个任务之间是互相抢占资源的。

并行的多个任务之间是不互相抢占资源的

 

2、高并发系统相关概念

QPS(Query Per Second):每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显

吞吐量:单位时间内处理的请求数量

响应时间:从请求发出到收到响应花费的时间。例如系统处理一个HTTP请求需要100ms

PV:综合浏览量(page view),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量;同一个人浏览网站同一页面,只记作一次PV

日网站带宽=PV/统计时间(换算到s)*平均页面大小(单位KB)*8;峰值一般是平均值的倍数,根据实际情况来定

峰值每秒请求数(QPS)=(总PV数*80%)/(6小时秒数*20%);80%的访问量集中在20%的时间

压力测试:测试能承受的最大并发,测试最大承受的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,这个级别下,文件系统访问锁都成为了灾难,做业务分离,分布式存储

 

3、高并发解决方案

服务器硬件升级

集群、分布式、负载均衡

前端优化:减少HTTP请求,合并css或js,添加异步请求,启用浏览器缓存和文件压缩,CDN加速,建立独立图片服务器,
服务端优化:页面静态化,并发处理,队列处理
数据库优化:数据库缓存,分库分表,分区操作,读写分离,负载均衡
web服务器优化:负载均衡,nginx反向代理,7,4层LVS软件

3.1、防盗链

盗链:在自己的页面上展示一些并不在自己服务器上的内容,获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容,常见的是小站盗用大站的图片,音乐,视频,软件等资源,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器

  防盗链:防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效,可以大大减轻服务器及带宽的压力

  工作原理:通过请求头中的referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址,一旦检测到来源不是本站即进行阻止或者返回制定的页面,通过计算签名的方式,判断请求是否合法,如果合法则显示,否则返回错误信息

 

4、如何提升系统并发能力

4.1、水平扩展

4.1.1、反向代理层的水平扩展

反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。 
当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发

 

4.1.2、站点层的水平扩展

站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。 
当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发

 

4.1.3、服务层的水平扩展

服务层的水平扩展,是通过“服务连接池”实现的。 
站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发。如果需要优雅的进行服务层自动扩容,这里可能需要配置中心里服务自动发现功能的支持

 

参考链接

https://www.cnblogs.com/cn-sbo/p/10853469.html

https://www.cnblogs.com/butterfly100/p/9034281.html

https://blog.csdn.net/azhuyangjun/article/details/86976514

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波波老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值