首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
01-27 16:48
小红书_后端开发_REDstar算法工程师(准入职员工)
禾赛科技内推,禾赛科技内推码
禾赛科技 嵌入式开发(操作系统)面经⚜技术是真的过硬啊,秋招嵌入式被拷打的最狠之一。原定45分钟,拷打一个半小时,涉及知识面特别广,实际问的比这还要多,记忆有限。不过也无后续,但也没挂,估计在L3缓存里面吧⭕一面(9.18)1. 自我介绍2. 项目介绍3. 有没有测量IMU精度4. 串口有几根线,中断配置?5. IIC有几根线?讲一讲怎么通信?详细说一下读取寄存器的流程6. 说一说任务有哪几种状态?就绪和阻塞的任务放在哪里?放在同一个链表上面吗?7. 任务怎么进入阻塞态?(主动挂起,被强占,争取不到资源等)8. 说一说死锁?9. 怎么解决死锁问题?(获取不到锁的时候,释放本身的资源)10. 有...
点赞
评论
收藏
分享
昨天 23:39
门头沟学院 嵌入式软件工程师
为什么有人“零实习”也能收割大厂offer
在求职竞争白热化的当下,缺乏一份亮眼的大厂实习经历,似乎已经被许多人视为简历上的“硬伤”。但一批不走寻常路的求职者正在证明:找到并打造属于自己的“硬通货”,零实习背景同样可以敲开理想公司的大门。01 认知颠覆:大厂究竟在寻找什么样的人?大厂招聘的核心逻辑,往往被实习生头衔所掩盖。一位头部互联网公司的技术面试官透露:“我们不是在寻找‘实习经历收集者’,而是在寻找能创造性解决问题、有扎实沉淀和成长潜力的未来同事。”一份光鲜的实习经历只是能力的一种证明形式,而非能力本身。当缺乏这种形式时,关键在于能否提供其他同样有说服力的证明。那些零实习却成功入职的求职者,往往精准把握了招聘的本质——他们通过其他途...
嵌入式速成指南
点赞
评论
收藏
分享
01-19 18:53
已编辑
蚌埠坦克学院 Java
被mentor温暖到了
实习第三天了,讲讲感受吧,mentor每天都会喊我一起去食堂吃饭,会给我推荐哪家的好吃,吃完饭还会等我,经常没事,会来问我有没有问题,有问题随时来找他。看到我就一个电脑分屏比较困难,还帮我安排了一个新的显示器,可以看下面的图,到现在都没给我派什么任务,让我先熟悉。反正,心里暖暖的
牛客981:
虽然但是 总有分开的那一天
点赞
评论
收藏
分享
2025-12-18 11:24
山西大学 测试工程师
研发是不是喜欢我啊
研发是不是喜欢我啊
A_SOUL_Off...:
疑似加班加出幻觉了
点赞
评论
收藏
分享
昨天 23:17
小红书_后端开发_REDstar算法工程师(准入职员工)
禾赛科技内推,禾赛科技内推码
禾赛科技 嵌入式开发(操作系统)面经⚜技术是真的过硬啊,秋招嵌入式被拷打的最狠之一。原定45分钟,拷打一个半小时,涉及知识面特别广,实际问的比这还要多,记忆有限。不过也无后续,但也没挂,估计在L3缓存里面吧⭕一面(9.18)1. 自我介绍2. 项目介绍3. 有没有测量IMU精度4. 串口有几根线,中断配置?5. IIC有几根线?讲一讲怎么通信?详细说一下读取寄存器的流程6. 说一说任务有哪几种状态?就绪和阻塞的任务放在哪里?放在同一个链表上面吗?7. 任务怎么进入阻塞态?(主动挂起,被强占,争取不到资源等)8. 说一说死锁?9. 怎么解决死锁问题?(获取不到锁的时候,释放本身的资源)10. 有...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
J人永远闲不下来于是去提前实习
2652
2
...
mentor视角下的优秀实习生
2432
3
...
大厂提前实习对AI开发的新感悟
2390
4
...
拥抱AI,程序员的最后出路
2178
5
...
牛客吐槽大会 | 有槽不吐,留着过年?吐完领现金红包,痛快!
2178
6
...
真正会被取代的,是你心里面的幻觉
1913
7
...
努力挣钱的意义具象化了
1826
8
...
去独角兽做龙头还是去大厂做凤尾
1633
9
...
我身材再曼妙,也没有我的工资好笑!
1513
10
...
滴滴lastweek,知无不言
1454
创作者周榜
更多
正在热议
更多
#
牛客吐槽大会
#
3292次浏览
69人参与
#
机械人你知道哪些单休企业
#
83133次浏览
415人参与
#
今年春招是金一银二嘛?
#
8863次浏览
119人参与
#
参加完秋招的机械人,还参加春招吗?
#
103781次浏览
686人参与
#
1月小结:你过的开心吗?
#
2020次浏览
52人参与
#
抛开难度不谈,你最想去哪家公司?
#
4833次浏览
118人参与
#
为什么有人零实习也能进大厂?
#
5447次浏览
132人参与
#
AI求职实录
#
4062次浏览
112人参与
#
AI时代的工作 VS 传统时代的工作,有哪些不同?
#
8723次浏览
207人参与
#
机械人春招想让哪家公司来捞你?
#
379338次浏览
3141人参与
#
当你问AI“你会取代我的工作吗”,它说_?
#
3975次浏览
141人参与
#
你的第一家实习公司是什么档次?
#
4498次浏览
75人参与
#
没关系,至少我的__很曼妙
#
3843次浏览
65人参与
#
赚钱的意义在这一刻具象化
#
4163次浏览
99人参与
#
你的landing期是如何度过的?
#
9006次浏览
176人参与
#
除了Java,最推荐学什么技术?
#
6203次浏览
151人参与
#
我发现了面试通关密码
#
1600208次浏览
19679人参与
#
一人一道大厂面试题
#
114174次浏览
1263人参与
#
你觉得什么岗位会被AI替代
#
36891次浏览
256人参与
#
你在职场上见过哪些“水货”同事
#
30785次浏览
168人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务