首页 > 其他分享 >限流、防刷

限流、防刷

时间:2023-06-11 15:55:17浏览次数:27  
标签:令牌 防刷 泄洪 300 队列 限流 cpu

假设一台机器的极限tps是400,那我们限流到300tps,如果这300tps全部是去请求createOrder这个方法,那么这个时候我们如果不用队列泄洪,那么在这1秒内需要处理300个请求,便是有300个线程,导致cpu将会在这个300线程中来回切换,使cpu的消耗加大,所以为了更好的处理300个线程,减小cpu的切换时间开销,减小cpu处理者300个请求的时间,所以我们引入队列泄洪,减少cpu在线程间切换的时间,从而提高相应速度。

我们如果不使用队列泄洪,其实系统应该也可以解决,但是响应时间会增加。但是我们如果只使用队列泄洪,就只考虑createOrder这个接口应该也是可以解决的,但是有可能,会导致这个order类的tps过大,导致系统处理不过来。

所以,限流应该和队列泄洪是相辅相成的,只用限流可以解决流量过大的问题,但是可能会导致并发量过大,增加cpu的处理时间,所以引入队列泄洪来减少cpu处理300个请求的时间。

 tps :  每秒处理的请求数

限流方案:

令牌桶(常用)

客户端获取令牌

定时器每秒放置固定数量令牌

限制网络流量最大值,可以有突发流量。能瞬间获取到令牌最大值。

 

漏桶

客户端 加一滴水  水能滴入桶里成功,则可以执行。没办法应对突发流量。还是每秒1次。

平滑网络流量。

 

限流力度

接口维度限流

 

总维度限流

 

限流范围

集群限流

依赖redis做计数器,会有性能瓶颈

单机限流

单机限流效果好

 

单机限流实现:单机令牌桶

guava rateLimiter 

 将时间规划到一个数组内

 

防刷

限制同一IP同一秒的请求:数量不好控制,容易误伤,不常用。

 

黄牛可以修改硬件设备信息,通过模拟器。

设备牧场作弊

人工作弊,佣金刷单。更难防。

 

设置指纹

采集终端设备各项参数,启动应用时生成唯一指纹。

根据对应设备指纹的参数猜测出模拟器等可以设备的概率。

凭证系统

 

 

 

 

 

 

 

标签:令牌,防刷,泄洪,300,队列,限流,cpu
From: https://www.cnblogs.com/jiangym/p/17473049.html

相关文章

  • gateway结合redis做限流
    本篇是针对已经实现了gateway基础功能的项目,如果需要实现基础功能可以参考https://www.cnblogs.com/cbzhl/p/17467019.html针对于并发量比较高的时候,如果不针对对应的服务做限流操作,可能造成服务器压力过大,宕机等情况,为此出现了多种限流的方式:计数器算法(Counter)。--设计一个......
  • 接口防刷处理方案,太优雅了!
    来源:juejin.cn/post/7200366809407750181前言本文为描述通过Interceptor以及Redis实现接口访问防刷Demo这里会通过逐步找问题,逐步去完善的形式展示原理通过ip地址+uri拼接用以作为访问者访问接口区分通过在Interceptor中拦截请求,从Redis中统计用户访问接口次数从而达到接......
  • 高并发---限流
    在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺......
  • Redis实现限流的三种方式
    一、固定窗口所谓固定窗口限流即时间窗口的起始和结束时间是固定的,在固定时间段内允许要求的请求数量访问,超过则拒绝;当固定时间段结束后,再重新开始下一个时间段进行计数。我们可以根据当前的时间,以分钟为时间段,每分钟都生成一个key,用来inc,当达到请求数量就返回一些友好信息。......
  • 二、tienchin健身系统技术点复现-注解限流
    二、tienchin健身系统技术点复现-注解限流在上一章节写到编写lua脚本。基本的配置类都已经创建,下面创建一个请求获取IP的工具类和全局异常处理即可。1、创建工具类IpUtilspackagecom.yangjiapo.rate_limiter.utils;importjavax.servlet.http.HttpServletRequest;import......
  • 一、tienchin健身系统技术点复现-注解限流
    一、tienchin健身系统技术点复现-注解限流这个技术用到的点是用Java代码执行redis的lua脚本,采用请求接口方法注解@RateLimiter,前置通知拦截判断请求次数,做出限流操作。Gitee代码仓库-rate-limiter1、application.yml配置redis参数在application.yml中配置redis基......
  • 十四、使用Sentinal进行限流熔断
    内容sentinal限流降级:限流是接口流量太大要进行限制,限制后的流量进行降级。sentinal熔断降级:熔断是A调用B,而B不靠谱,就熔断不调用,并降级。sentinal+nacos组合。常见的限流算法静态窗口限流动态窗口限流例如:当前是第2.5秒静态:统计第2秒到现在的请求数......
  • 限流算法
    固定窗口缺陷:最简单,但是不能精确限制,由于是计算的时间差,比如每10秒只能10个请求,8-10秒请求了10个,那么10-18秒就也无法请求了importjava.util.concurrent.atomic.AtomicInteger;importjava.util.concurrent.atomic.AtomicLong;publicclassMyFixedWindow{privatef......
  • Spring Cloud Alibaba Sentinel实现熔断限流代码示例
    SpringCloudAlibabaSentinel介绍SpringCloudAlibabaSentinel是一个面向分布式服务架构的流量控制组件,是SpringCloudAlibaba的核心组件之一。主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。代码示例以下是一个使用SpringC......
  • Springboot+Guava实现单机令牌桶限流
    令牌桶算法系统会维护一个令牌(token)桶,以一个恒定的速度往桶里放入令牌(token),这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌(token),当桶里没有令牌(token)可取时,则该请求将被拒绝服务。令牌桶算法通过控制桶的容量、发放令牌的速率,来达到对请求的限制。=================......