服务器限流怎么做?亿级流量下保命技巧全解析

阿木 发布于 7 小时前 5 次阅读


昨晚又失眠了。

盯着手机屏幕上那只转圈的“加载中”小菊花,突然想笑。

双十一那晚,我就是那个转圈圈背后,无数个焦急等待的人之一。

购物车里的那双鞋,最终显示“系统繁忙,请稍后重试”。

那一刻,我居然松了一口气,而不是愤怒 。

后来才明白,那个所谓的“稍后再尝试”,或许是另外一个世界正竭尽全力为自身施行心肺复苏术。

限流?

听着就像在给生活踩刹车

对,就是踩刹车。

你想象一下早高峰的地铁站。

所有人都想挤上去,结果门关不上,车开不走,全线瘫痪。

到了这个时候,有工作人员手持大喇叭大声呐喊着:“都别再挤了!去等待下一趟班次!”——而这一情况便是所谓的限流。

它并非是要将你排斥在外面,而是担忧里面的人会因拥挤而遭遇死亡厄运,同时还害怕你会被挤压得如同照片那般扁平。

令牌桶:成年人世界的入场券

我最喜欢这个比喻。

就像一个热门酒吧,门口有个桶。

保安以固定的速度往桶里扔“入场券”(令牌)。

你来了,桶里有票,进去;没票,等着或者滚蛋 。

妙就妙在,如果没人来的时段,桶里攒了一堆票。

忽而就有一群小姐姐,她们怀揣着想要进入场中的心思(此乃突发流量所致),而那保安呢,只要桶里存有票,便能够一口气将十几个放进去。

像极了攒了三天的人品,就为了今天放肆一把。

很多大厂的网关,比如那个叫Kong的,就用这招对付秒杀 。

漏桶:强迫症患者的理想国

和令牌桶完全相反。

无论你那里洪水泛滥成何种程度,我这儿的漏洞就是这般大小,每一秒钟只滴落下一滴水,绝对不会多滴出哪怕一滴。

就算你一回往里面倒一桶水,我也仅仅根据我自己的节奏向外漏,多余的水留在桶里,桶满了,你后续倒进去的水我就不再要了。

这太像一个极度自律、生活规律的人了。

不管外界多嘈杂,他按照自己的节奏,每天看书、运动、睡觉。

虽说稳定到了使人觉得过分的程度,然而也存在着有可能错失某些突然降临的精彩的情况。听说某些支付系统喜欢运用它 ,毕竟关乎钱的事情 ,势必要做到稳。

临界问题:卡BUG的艺术

计数器算法就比较憨憨了。

它好似个呆头呆脑的统计员,每分钟都数一回:“哎唷,这一分钟有一千个人进来,够啦够,后面的别再进来。”。

但倘若你于第59秒放进了999个人,之后在第60秒,也就是下一分钟的起始那一秒,再度放进了999个人。

系统所感,这两分钟俱为安全之态,然而于那毫秒级的缝隙之中,实则瞬间有1998个人涌入。

这就是“临界问题”。

像不像每次月底冲业绩,和下个月月初的你?

那种疲惫和鸡血的无缝切换。

别光顾着拦人,你得会“打架”

真实的高手,并非着重于怎样去拒绝他人,而是聚焦于在有限的资源状况之下,怎样去“争斗”。

优步(Uber)那帮人玩得很野。

他们搞了个叫 Cinnamon 的系统 。

什么意思?

就是给请求分等级。

那有着最高优先级的,是 VIP 用户发出的打车请求;至于你后台自动刷新地图所产生的垃圾流量,很抱歉,只能靠边站了。当系统快要承受不住之时,要先终止那些不重要的内部任务,以此来保障核心的交易以及定位功能。

这才叫“弃车保帅”。

还有更骚的操作:请求 collapsing

一万个人同时问你同一个问题:“今晚那个博主直播卖啥?”

正常情况,一万个人跑去数据库里查,数据库直接崩溃。

骚操作是:只派一个人去查,剩下9999个人在那等着。

等那个人查到了结果,直接把答案复制给所有人 。

像极了考试时,全班只有一个人带了课本,然后他负责翻答案,我们负责传纸条。

这就是请求折叠,对付缓存雪崩的神器。

写在最后:被拒绝也是一种温柔

偶尔我会思索,要是那日双十一,系统并非拒绝我,而是勉强支撑着去处理我的订单,那么有可能出现的情形是:我付款达成了,然而订单状态却始终不进行更新;我多次去退款,客服那里永远都在排队;最终,我甚至连那个APP都不愿去打开了。

为此你瞧,那个为时不长的“拒绝”,实际上是系统能够给予我的,最终的得体颜面。

它宁愿自行承受压力,以优雅姿态告知你“请稍后”,却不愿于你跟前全然崩溃,致使你瞧见它最为狼狈、最为无能之模样。

生活里不也一样吗?

在某些时候,我们用尽浑身解数,一心想要奋力挤入某一个特定的圈子,竭尽全力去抓住某一个具体的人,然而,却被一道根本看不见的所谓的“限流”无情地阻挡在了外面。

别急着骂娘。

或许,那个将你拦住的“漏桶”,仅仅是想叫你稍作等待,待你拥有充足的“令牌”之际,再以最佳的状态,得体地进入场地。

终究,确实关键的,向来并非挤入时的那一刹那,而是进入之后,能够停留多长时间。