美文网首页
如何设计秒杀服务的限流策略

如何设计秒杀服务的限流策略

作者: 老曹漫谈 | 来源:发表于2020-03-23 09:48 被阅读0次

如何保证在流量突增的情况下,仍然保证系统的稳定性。

通过限流策略抵御秒杀期间的流量峰值。

当海量请求到来时,可以对请求进行层层限流、层层拦截,最终将海量请求削减成服务器能够处理的请求数。

尽早限流,上游拦截的越多,下游的请求越少

比如要设计一个秒杀购物电商网站的限流。

第一层限流:合法性限流

仅仅限制那些合法的用户请求能够抵达到秒杀服务器,将一些非法的请求全部拦截掉。

哪些是非法的呢?比如刷单用户,机器脚本

机器脚本 -> 限制手段是验证码

验证码也可以拉长用户的使用时间,降低流量的峰值。

比如下单的时间是毫秒级别,或者反复购买一件商品,可以断定下单的是机器人。

还有一种作法是隐藏入口

第二层限流,负载限流:

集群的一些工具,比如Nginx,LVS

建议使用单一一层的负载,如果每一级都负载,会增大网络请求,造成请求时间过长

前面两者是软件进行负载,也就是软负载。

还有硬件负载,比如

前两层限流都是将流量抵挡在抵达服务器之前

第三层限流,web服务器本身的限流:

比如设置Web服务器的最大链接数

还可以代码上设置一个令牌,抢到令牌的可以进行操作

还可以使用队列进行限流,这里的队列主要是消息队列

还可以使用缓存限流:

限流的本质是为了不断削减请求的数量,而缓存的作用是为了减少用户请求服务端的数量

为了有效的使用缓存进行限流,需要将系统设计为前后端分离或者叫动静分离的结构,

html缓存在客户端本地,大的文件比如图片、视频等可以OSS、CDN

动态缓存可以先缓存在本地的服务器之中,再缓存到由Redis组成的远程集群之中

但是缓存也不能设置多,要考虑多级缓存的数据一致性的问题,缓存的级别越多,一致性的问题就越严重。

不要盲目地进行技术的堆砌,对于大部分系统而言,我们使用静态缓存加上二级动态缓存就已经足够了。

总的来说,静态缓存可以将大量的静态资源缓存在服务器以外的地方,

而动态缓存可以很大程度上减少请求数据库的次数

监控限流:

CPU、内存、并发量等,都是衡量系统稳定性的指标

可以创建一些线程,来监控这些指标,当CPU使用率过高时,就可以临时性的采取服务降级或拒绝策略,比如把一些非核心的业务先临时关闭,从而为系统节约出一部分资源来。

之后可以恢复这些业务。

总结:

相关文章

  • 如何设计秒杀服务的限流策略

    如何保证在流量突增的情况下,仍然保证系统的稳定性。 通过限流策略抵御秒杀期间的流量峰值。 当海量请求到来时,可以对...

  • 如何设计秒杀服务的限流策略

    秒杀系统容易出现高并发。以时间为x轴,访问量为y轴。从秒杀开始到秒杀结束的访问量与时间的关系大概是这样的曲线: 秒...

  • 分布式的东西

    1、分布式总体限流方案 例 100w总流量限流如何在100台分布机做总体限流 2、如何设计秒杀系统,应该关注什么:...

  • (9)弹力设计篇之“限流设计”

    1、限流的策略 2、限流的算法:计数器、队列、漏斗和令牌桶。 3、如何基于响应时间来限流。 4、限流设计的要点 限...

  • 如何设计秒杀系统

    如何设计秒杀系统 1 秒杀的问题 服务单一、独立部署 秒杀服务即使自己扛不住高并发而宕机,也不要造成服务雪崩。 秒...

  • 开放问题

    秒杀怎么设计的? 限流措施:实名认证、恶意请求、请求频率、前端操作限制 微信红包如何设计? 微信红包系统是一个高并...

  • 基于Redis的限流系统的设计

    本文讲述基于 Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计;在实现方面,算法使用的是令牌...

  • 基于Redis的限流系统的设计

    本文讲述基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计;在实现方面,算法使用的是令牌桶...

  • 基于Redis的限流系统的设计【转】

    基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计;在实现方面,算法使用的是令牌桶算法来,...

  • 秒杀系统设计以及大型网站需要多少服务器

    参考文章 秒杀系统架构分析与实战 详解:如何设计出健壮的秒杀系统? 一个大型网站需要多少服务器?

网友评论

      本文标题:如何设计秒杀服务的限流策略

      本文链接:https://www.haomeiwen.com/subject/gluiyhtx.html