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

本文介绍了秒杀系统中的限流策略,包括合法性限流、网络负载限流和服务限流三层。合法性限流通过验证码和IP黑名单防止非法请求;网络负载限流利用LVS和Nginx进行负载分担;服务限流涉及Tomcat集群、令牌桶算法、消息队列、Nginx负载均衡和缓存使用,以确保系统在高流量下的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果平时系统的访问量只有一万,而最大承受限制为五万,在秒杀时刻的瞬间,访问量突然增加到100W,此事系统一定会因访问量过大而宕机,此时就应该设计一个限流策略,使服务器能接收和处理的请求减少。

秒杀限流策略的目的:在系统流量突增的情况下保证系统的稳定性

限流总策略——多层限流

第一层:合法性限流
       所谓合法性限流就是判断请求是否合法,例如:同一用户的频繁多次刷单请求和机器人刷单就是非法请求

限流策略就是验证码和统计IP黑名单

第二层:网络负载限流
       网络负载限流,就是利用服务器集群和网络OSI七层协议进行动态限流,将用户请求进行负载分担。
       常见的网络负载限流主要在第四层和第七层,第七层应用层一般采用Nginx服务器,而第四层传输层则通常采用LVS。

LVS简介
        LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

Nginx服务器:动静分离、负载均衡

级联负载:就是综合网络七层所有能用到的负载条件和策略。

第三层:服务限流
服务限流可以说是最后一层限流,但是也是做常用和最重要的限流主要限流策略为:

Tomact搭建集群并设置最大连接数
使用特定算法
设置mq消息队列
Nginx做负载均衡、动静分离
缓存
(1)Tomcat设置最大连接数

1
2
3

(2)令牌桶算法
·

@Component
public class RateLimitInterceptor extends AbstractInterceptor {
public static final int REQUEST_COUNT = 1;
private static final RateLimiter rateLimiter = RateLimiter.create(REQUEST_COUNT);

@Override
protected boolean preHandle(HttpServletRequest request) {
    if (!rateLimiter.tryAcquire()) {
         return false;
    }
    return true;
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(3)消息队列
常见的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等

目前行业中流行的消息队列主要是RabbitMQ、Kafka

1、 RabbitMq比kafka成熟,在可用性上,稳定性上,可靠性上,RabbitMq超过kafka
2、 Kafka设计的初衷就是处理日志的,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性
3、 Kafka的性能比RabbitMq要强,这篇文章的作者认为,两者在这方面没有可比性。

(4)Nginx负载

(5)缓存
提升性能
绝大多数情况下,select 是出现性能问题最大的地方。一方面,select 会有很多像 join、group、order、like 等这样丰富的语义,而这些语义是非常耗性能的;另一方面,大多 数应用都是读多写少,所以加剧了慢查询的问题。

分布式系统中远程调用也会耗很多性能,因为有网络开销,会导致整体的响应时间下降。为了挽救这样的性能开销,在业务允许的情况(不需要太实时的数据)下,使用缓存是非常必要的事情。

缓解数据库压力
当用户请求增多时,数据库的压力将大大增加,通过缓存能够大大降低数据库的压力。

总结
     秒杀服务器限流策略主要的三个限流方式,其中前两个是请求到达服务器之前所做的物理限流,而第三层是请求到达服务器之后,主要是使用软件和代码进行限流。

图片来自网络,如有侵权请联系删除
————————————————
版权声明:本文为优快云博主「Mr_YMX」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/Mr_YanMingXin/article/details/113929045

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值