首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
TIME2
电子科技大学 C++
发布于北京
关注
已关注
取消关注
@已删除:
如何应对突发流量?保证服务可用的4个手段
前言不知道你有没有这样的经历,线上的系统突然来了很大的流量,有可能是黑客的攻击,也有可能是业务量远远大于你的预估,如果你的系统没有做任何的防护措施,这时候系统负载过高,系统资源慢慢耗尽,接口响应越来越慢,直至不可用,这又导致了调用你接口的上游系统发生资源耗尽的情况,最终导致系统雪崩。想想就知道,这是一个灾难性的后果,那么有什么方法呢?面对这种突发流量的场景,核心思路就是要优先保证优核心业务和优先保证绝大部分用户。常见的应对手段有四种,降级、熔断、限流和排队,下面我会一一讲解。1. 降级降级指系统将某些业务或者接口的功能降低,可以是只提供部分功能,也可以是完全停掉所有功能,优先保证核心功能。比如淘宝双11零点抢购的时候你会发现商品的退货功能不可以使用了。又比如论坛可以降级为只能看帖子,不能发帖子;也可以降级为只能看帖子和评论,不能发评论;常见的实现降级的方式有两种:系统后门降级简单来说,就是系统预留了后门用于降级操作。例如,系统提供一个降级URL,当访问这个URL时,就相当于执行降级指令,具体的降级指令通过URL的参数传入即可。这种方案有一定的安全隐患,所以也会在URL中加入密码这类安全措施。系统后门降级的方式实现成本低,但主要缺点是如果服务器数量多,需要一台一台去操作,效率比较低,这在故障处理争分夺秒的场景下是比较浪费时间的。独立降级系统为了解决系统后门降级方式的缺点,我们可以将降级操作独立到一个单独的系统中,实现复杂的权限管理、批量操作等功能。基本架构如下:2. 熔断熔断是指按照一定的规则,比如1分钟内60%的请求响应错误就停掉对外部接口的访问,防止某些外部接口故障导致自己的系统处理能力急剧下降或者出故障。熔断和降级是两个比较容易混淆的概念,因为单纯从名字上看,好像都有禁止某个功能的意思。但它们的内涵是不同的,因为降级的目的是应对系统自身的故障,而熔断的目的是应对依赖的外部系统故障的情况。关于服务熔断的实现,比较主流的有两种方案,Spring Cloud Netflix Hystrix和阿里的Sentinel,我们公司的项目用的是Sentinel。Hystrix是一个用于处理分布式系统的延迟和容错的一个开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能保证在一个依赖出现问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的稳定性。Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。3. 限流每个系统都有服务的上线,所以当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。限流其实就是:当高并发或者瞬时高并发时,为了保证系统的稳定性、可用性,系统以牺牲部分请求为代价或者延迟处理请求为代价,保证系统整体服务可用。限流一般都是系统内实现的,常见的限流方式可以分为两类:基于请求限流和基于资源限流。基于请求限流基于请求限流指从外部访问的请求角度考虑限流,常见的方式有两种。第一种是限制总量,也就是限制某个指标的累积上限,常见的是限制当前系统服务的用户总量,例如:某个直播间限制总用户数上限为100万,超过100万后新的用户无法进入;某个抢购活动商品数量只有100个,限制参与抢购的用户上限为1万个,1万以后的用户直接拒绝。第二种是限制时间量,也就是限制一段时间内某个指标的上限,例如1分钟内只允许10000个用户访问;每秒请求峰值最高为10万。无论是限制总量还是限制时间量,共同的特点都是实现简单,但在实践中面临的主要问题是比较难以找到合适的阈值。例如系统设定了1分钟10000个用户,但实际上6000个用户的时候系统就扛不住了;或者达到1分钟10000用户后,其实系统压力还不大,但此时已经开始丢弃用户访问了。即使找到了合适的阈值,基于请求限流还面临硬件相关的问题。例如一台32核的机器和64核的机器处理能力差别很大,阈值是不同的,可能有的技术人员以为简单根据硬件指标进行数学运算就可以得出来,实际上这样是不可行的,64核的机器比32核的机器,业务处理性能并不是2倍的关系,可能是1.5倍,甚至可能是1.1倍。为了找到合理的阈值,通常情况下可以采用性能压测来确定阈值,但性能压测也存在覆盖场景有限的问题,可能出现某个性能压测没有覆盖的功能导致系统压力很大;另外一种方式是逐步优化:先设定一个阈值然后上线观察运行情况,发现不合理就调整阈值。基于上述的分析,根据阈值来限制访问量的方式更多的适应于业务功能比较简单的系统,例如负载均衡系统、网关系统、抢购系统等。基于资源限流基于请求限流是从系统外部考虑的,而基于资源限流是从系统内部考虑的,也就是找到系统内部影响性能的关键资源,对其使用上限进行限制。常见的内部资源包括连接数、文件句柄、线程数和请求队列等。例如,采用Netty来实现服务器,每个进来的请求都先放入一个队列,业务线程再从队列读取请求进行处理,队列长度最大值为10000,队列满了就拒绝后面的请求;也可以根据CPU的负载或者占用率进行限流,当CPU的占用率超过80%的时候就开始拒绝新的请求。基于资源限流相比基于请求限流能够更加有效地反映当前系统的压力,但实际设计时也面临两个主要的难点:如何确定关键资源,以及如何确定关键资源的阈值。通常情况下,这也是一个逐步调优的过程:设计的时候先根据推断选择某个关键资源和阈值,然后测试验证,再上线观察,如果发现不合理,再进行优化。4. 排队排队这种方式,想必大家在熟悉不过了。大家在12306买火车票的时候,是不是会告诉你在排队中,等待一段时间后才会锁定车票,付款。年底时,全中国那么多人买票,12306就是通过排队机制来搞定的。但是也有缺点,那就是用户体验没那么好。由于排队需要临时缓存大量的业务请求,单个系统内部无法缓存这么多数据,一般情况下,排队需要用独立的系统去实现,例如使用Kafka这类消息队列来缓存用户请求。排队模块负责接收用户的抢购请求,将请求以先入先出的方式保存下来。每一个参加秒杀活动的商品保存一个队列,队列的大小可以根据参与秒杀的商品数量(或加点余量)自行定义。调度模块负责排队模块到服务模块的动态调度,不断检查服务模块,一旦处理能力有空闲,就从排队队列头上把用户访问请求调入服务模块,并负责向服务模块分发请求。这里调度模块扮演一个中介的角色,但不只是传递请求而已,它还担负着调节系统处理能力的重任。我们可以根据服务模块的实际处理能力,动态调节向排队系统拉取请求的速度。服务模块负责调用真正业务来处理服务,并返回处理结果,调用排队模块的接口回写业务处理结果。总结最后我们通过一个表格在总结以下上面4种保证服务高可用的手段。
点赞 1
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-24 08:52
门头沟学院 Java
二面永远是我的滑铁卢
有没有牛友跟我一样?春招面到现在,仿佛陷入了一个死循环:简历能过,一面能过,一到二面必挂。就像有个魔咒,不管怎么准备,二面永远是我的滑铁卢,面到现在,我都快有二面PTSD了。金三银四快结束了,我前前后后投了200多份简历,进了16家的面试流程,其中12家都挂在了二面,剩下3家挂了一面,1家挂了HR面,至今0offer。身边的同学都陆续上岸了,只有我,还在一轮一轮地面,一轮一轮地挂,而且永远死在同一关,真的太磨心态了。最崩溃的是上周,面阿里本地生活的Java后端岗,一面手撕算法全对,八股答得也很顺,面试官当场就说“一面过了,等二面通知”。我开心了一晚上,熬了通宵准备二面,把项目翻来覆去地梳理,把...
你总挂在第__面?
点赞
评论
收藏
分享
04-21 09:20
北京邮电大学 嵌入式工程师
开启新副本:暑期实习全攻略
相信很多人都知道,第一份实习/工作对于日后的发展尤其重要,在职场上接触的第一个 leader,也会对未来的工作思维、工作态度产生重要的影响。因此第一份实习,可不能随便找个兼职糊弄一下就过去了。那么在选择企业实习的时候,我们应该做些什么呢?事实上,博主自己也是最近才找到实习,没有办法以长远的眼光来判断这个实习究竟对自己未来的作用有多大,所以这里仅仅是谈一下我自己所做的一些准备,以及我自己在找实习过程中的感悟和想法。明确你所处的阶段明确你所处的阶段是指,先看看你现在到底是要找暑期实习还是秋招。相信很多要找实习/工作的同学都听说过“金三银四”、“金九银十”这样的词,也有很多人疑惑春招、秋招、暑期实习...
点赞
评论
收藏
分享
03-30 17:14
浙江大学 .NET
去大厂,得到的总比你想象的多
说个可能不太"ZZ正确"的大实话:大厂实习经历在找工作中的加成,比你想象的大太多了。我去年暑期在某大厂做推荐系统实习,说实话活不算特别有深度,主要是做特征工程和一些AB实验。但秋招的时候,简历上这一行带来的好处是全方位的。首先是过筛。投了20家,70%的简历通过率。我室友背景跟我差不多,但实习是一家没听过名字的小公司,15家过了3家。你说是能力差距吗?不是,纯粹HR看到大厂名字就默认你至少不差。其次是面试氛围。面试官看到你在xx厂实习过,态度明显不一样,会默认你的基础能力没问题,更多地聊项目思路和方向判断,而不是从头盘问你基础知识。我室友面试经常被追问八股文,我反而很少被问到。
愿offer多多的长...:
道理我都懂,怎么进大厂
大厂实习和小厂实习最大的...
点赞
评论
收藏
分享
04-22 15:57
嘉应学院 Java
上海逸迅信息科技有限公司-Java后端-base西安 已OC
一共两轮(技术+hr)技术面1.先简单的自我介绍一下2.当时你们这个项目人员配备是怎么样的?我引出了项目的背景...3.讲一下你这段实习经历干了什么?4.你再介绍一下你这个项目吧?5.说一下redis常用的数据类型吧?6.比如我现在要实现一个场景如何保存页面的一个点击量和用户量,你会怎么设计?(场景设计题)我回答的是,在刚刚谈到的我提取出了一个关键信息就是无论一个用户访问了多少次同一个页面,都只算一次,那这个体现的其实就是唯一性,我会想到用set的数据类型进行存储,key放的是页面url,value放的是user_id。对于像页面点计量,其实我想到一个比较简单的,用string数据类型就行,因...
查看22道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
求问:有没有真的能上手做大模型/Agent的实战项目?
1.4W
2
...
巨人网络游戏开发一面面经
7096
3
...
游戏客户端的碎碎念
3160
4
...
最近在做Agent面试,我发现了很多共性的问题...
3095
5
...
#网易游戏雷火笔试#题量好大,个人能力原因吧,现想现写好多没有写完...
2459
6
...
tme暑期前端二面 4.27
2141
7
...
我的前途全被学校毁了!!!
1501
8
...
三道手撕?字节后端三面你别太离谱!
1157
9
...
4.26 拼多多笔试
1038
10
...
腾讯云智二面挂
1005
创作者周榜
更多
正在热议
更多
#
如果春招能重来,我会___
#
1870次浏览
18人参与
#
mt对你说过最有启发的一句话
#
114737次浏览
866人参与
#
联宝杯大学生创新大赛,你的技术值得产业级答案
#
26457次浏览
445人参与
#
你和你的mentor相处模式是__
#
3984次浏览
27人参与
#
你的mentor是什么样的人?
#
61305次浏览
793人参与
#
你会因为行情,降低找工作标准吗?
#
2970次浏览
23人参与
#
实习第一天,你在干什么
#
2600次浏览
17人参与
#
双非本科的出路是什么?
#
230444次浏览
1655人参与
#
你有哪些缓解焦虑的方法?
#
60680次浏览
914人参与
#
一觉醒来,秋招难度下降一万倍……
#
147645次浏览
786人参与
#
如何排解工作中的焦虑
#
319615次浏览
2732人参与
#
0offer互助地
#
773934次浏览
4760人参与
#
你是怎么和mt相处的?
#
103112次浏览
508人参与
#
你想吐槽公司的哪些规定
#
48923次浏览
245人参与
#
拼多多集团-PDD笔试
#
90573次浏览
602人参与
#
打工人的工作餐日常
#
97092次浏览
559人参与
#
我的成功项目解析
#
532325次浏览
8616人参与
#
25届秋招公司红黑榜
#
341390次浏览
1331人参与
#
0经验如何找实习?
#
89685次浏览
936人参与
#
当下环境,你会继续卷互联网,还是看其他行业机会
#
201662次浏览
1196人参与
#
你总挂在第__面?
#
15030次浏览
164人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务