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

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

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

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

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

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

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

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

    第一层限流:合法性限流

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

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

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

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

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

    还有一种作法是隐藏入口

    第二层限流,负载限流:

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

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

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

    还有硬件负载,比如

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

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

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

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

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

    还可以使用缓存限流:

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

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

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

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

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

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

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

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

    监控限流:

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

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

    之后可以恢复这些业务。

    总结:

    相关文章

      网友评论

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

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