For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
通过使用限流技术来降低服务器的峰量压力是大多数企业都在使用的一种方法,而本文我们就通过案例分析来简单了解一下,峰量限流的作用与应用方法分享。
服务的能力终归是有限的,无论是内存、CPU、线程数都是,如果遇到突如其来的峰量请求,我们怎么友好的使用限流来进行落地,避免整个服务集群的雪崩。
一、峰量请求主要有两种场景:
突发高峰照成的服务雪崩
如果你的服务突然遇到持续性的、高频率的、不符合预期的突发流量。你需要检查一下服务是否有被错误调用、恶意攻击,或者下游程序逻辑问题。
这种超出预期的调用经常会造成你的服务响应延迟,请求堆积,甚至服务雪崩。而雪崩会随着调用链向上传递,导致整个服务链的崩溃,对我们的系统造成很大的隐患。
超出预期值的流量洪峰
如果你的商城或者平台搞活动(类似双11、618),但你又无法有效评估出这个峰值的具象值和持续时间,那么你的服务依然有被打垮的风险。
除非你能做到服务集群弹性伸缩(动态扩缩容)的能力,这个我在后面的云原生系列中会详细说。
二、解决方案
2.1云原生和弹性伸缩
如果你的服务基架构与足够强大,你的服务上云足够的彻底,那么弹性伸缩是好的办法。类似淘宝、京东、百度APP,都是类似的做法。
根据流量的变化,CPU、内存的曲线过程实时计算需要的服务实例数,然后进行动态扩容,低峰期再还回去。这个要求你的服务上云足够彻底,并且有足够的资源来达成资源扩容的目标。
2.2兜底的限流、熔断
基本的保障就是能够在服务做一层保护,避免因为过载而造成服务雪崩,导致整个系统不可用.
对超过预期或者承载能力的流量进行限流是比较好的一种办法。所以你在双11、618、抢购、竞拍等的选择的时候会经常看到这样的词汇:
服务正在努力加载中,请稍候!
服务/网络错误,请重试!
哎呀,服务繁忙,请稍后再试!
三、应用层面解决方案
常见的限流算法
计数限流算法
计数算法是指再一定的时间间隔里,记录请求次数,当时间间隔到期之后,就把计数清零,重新计算。
固定窗口限流算法(采样时间窗)
相对于上一个计数限流,多了个时间窗口的概念,计数器每过一个时间窗口就重置,重新开始计算。
滑动窗口限流(记录每个请求到达的时间点)
滑动窗口限流解决固定窗口临界值的问题,可以保证在任意时间窗口内都不会超过阈值。
漏桶算法(漏斗池算法)
类似沙漏思维,大家都用过,沙子是匀速流出得。对于漏桶来说,由于它的出水口的速度是恒定的,也就是消化处理请求的速度是恒定的,所以它可以保证服务以恒定的速率来处理请求,
令牌桶算法(定速流入)
令牌桶和漏桶的原理类似,只不过漏桶是定速流出,令牌桶是定速流入(即往桶里塞入令牌),每个请求进来,分配一个令牌,只有拿到了令牌才能进入服务器处理,拿不到令牌的就被拒绝了。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。