首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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 15:02
门头沟学院 后端工程师
转码选手的寻找暑期实习之路 - 闲聊没有面试的日子
从3月份到现在,真的感觉这段时间度日如年 首先当然是猛猛的刷力扣、在牛客看面经、背八股,复盘;然后就是学习一些agent开发的相关知识,感觉传统后端之后的发展不是很好啊( 害,其实更多的还是有点焦虑,Codex、CC、Cursor那么厉害,以后还要我做什么? 不知道大家怎么看!投了那么多,面了那么多,感觉自己的面试能力确实有点进步,也拿到了第一个携程的oc 接下来就看看自己能否再冲击一下BAT了也希望各位牛友们能拿到适合自己的offer! 想到哪里写到哪里,hhhh,毫无逻辑(#牛客AI配图神器#
没有面试的日子里,你在做...
点赞
评论
收藏
分享
04-21 10:31
南京航空航天大学 算法工程师
26届 中科曙光 研发工程师 offer
中科曙光
大模型推理优化工程师
25w
硕士211
点赞
评论
收藏
分享
02-28 14:56
北京交通大学 Java
27届无实习想进大厂暑期
目前进度是codetop前五页+hot100刷完了,八股背完了一轮但是感觉没背熟,求大佬们拷打简历
肖先生~:
八股文,我觉得最好是在面试中学习成长倒逼提升自己的能力
没有实习经历,还有机会进...
点赞
评论
收藏
分享
04-21 14:44
门头沟学院 后端工程师
转码选手的寻找暑期实习之路 - 也算是拿到一个offer了(附阿里淘天凉经)
✉️投递:腾讯两次全一面挂;字节1次一面挂;阿里现在只有淘天的一个部门还在面试中,其他全挂;拼多多笔试挂;小红书一面挂;米哈游笔试挂;oppo直接挂;vivo直接挂;联想投了没消息;京东没消息;滴滴没消息;得物刚笔试完;华子刚约一面;还有其他的我也忘了,巴嘎!📝offer:携程终于泡出池子了,豚厂我爱你!🎙️我的感受:感觉自己还是得好好沉淀,ummm,暑期实习还没结束!我还能变强!牛友们也要加油!再来一发阿里淘天的电话面一面面经:1、自我介绍;2、介绍一下Java中的原生锁;3、介绍一下Synchronized的使用场景;4、为什么ReentrantLock可以实现可重入操作?5、JVM中...
查看15道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
求问:有没有真的能上手做大模型/Agent的实战项目?
2.0W
2
...
巨人网络游戏开发一面面经
8040
3
...
最近在做Agent面试,我发现了很多共性的问题...
3226
4
...
游戏客户端的碎碎念
3025
5
...
tme暑期前端二面 4.27
1884
6
...
#网易游戏雷火笔试#题量好大,个人能力原因吧,现想现写好多没有写完...
1773
7
...
我的前途全被学校毁了!!!
1396
8
...
4.26 拼多多笔试
1108
9
...
腾讯云智二面挂
1106
10
...
三道手撕?字节后端三面你别太离谱!
1044
创作者周榜
更多
正在热议
更多
#
你和你的mentor相处模式是__
#
3090次浏览
19人参与
#
如果公司降薪,你会跳槽吗?
#
160095次浏览
938人参与
#
联宝杯大学生创新大赛,你的技术值得产业级答案
#
25958次浏览
320人参与
#
实习第一天,你在干什么
#
2103次浏览
14人参与
#
华为工作体验
#
322027次浏览
1409人参与
#
你会因为行情,降低找工作标准吗?
#
2266次浏览
19人参与
#
非技术2024笔面经
#
501858次浏览
5038人参与
#
机械人与华为的爱恨情仇
#
158467次浏览
1055人参与
#
0offer互助地
#
772933次浏览
4756人参与
#
你是怎么和mt相处的?
#
102994次浏览
507人参与
#
联想求职进展汇总
#
356348次浏览
2262人参与
#
运营人求职交流聚集地
#
247137次浏览
1124人参与
#
实习/项目/竞赛奖项,哪个对找工作更重要?
#
113533次浏览
1196人参与
#
我的成功项目解析
#
531852次浏览
8611人参与
#
打工人的工作餐日常
#
96978次浏览
558人参与
#
26年哪些行业会变好/更差
#
66164次浏览
534人参与
#
蚂蚁求职进展汇总
#
170949次浏览
1291人参与
#
今年秋招还有金九银十吗
#
82757次浏览
514人参与
#
工作两年想退休了
#
271570次浏览
2048人参与
#
你总挂在第__面?
#
14658次浏览
162人参与
#
简历上如何体现你的“AI”能力?
#
19986次浏览
404人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务