IP限流平台的设计及实现--已经开源了

基于 AOP + Redis + 自定义注解 实现细粒度的接口IP访问限制 | 开源微服务项目 一般向外暴露的接口,都需要加上一个访问限制,以防止有人恶意刷流量或者爆破,访问限制的做法有很多种,从控制粒度上来看可以分为:全局访问限制和接口访问限制,本文讲的是接口访问的限制。本章讲解的主要内容在项目中的位置:scblogs / common / common-web / src / main / java / cn / sticki / common / web / anno /我的写法是基于AOP + 自定义注解 + Redis,并且封装在一个单独的模块common-web。 阅读详情

项目的开源地址:https://gitee.com/laofeng/ip-limiter

 

一、背景说明

1、为什么要做IP限流

网络世界中,真实的用户与爬虫机器人等混杂在一起,正常的请求与异常请求也是相互交织,做为服务的提供方都希望请求来自于真实的用户的真实请求,这么才能够达到成本收益的最大化,但是总会有一些人来非法尝试获取提供方的信息,爬取有价值的数据供自己使用。作为数据的拥有者,肯定不希望自己的数据被非常利用,因为就需要做一些防御措施,达到数据保护的目的,IP限流就是其中一种比较有效的方案。因为通常用于爬取数据的爬虫机器人,都是在一台或者固定的几台服务器上执行的数据爬取操作(当然他可以购买更多的动态,只是会花更多的成本),针对这种访问量异常的IP进行记录和跟踪,然后就可以确认来自这些IP的请求是不是真实的用户请求了。

0

2、要达到的目标

  • 监控IP的访问行为,将其访问量及访问行为进行记录(完成);
  • 支持手动将单个IP、IP段加入到黑名单中,并对加入到黑名单中的IP进行过滤(完成);
  • 支持手动将单个IP、IP段加入到白名单中,并对加入到白名单中的IP进行过滤(完成);
  • 在基于一定的规则下,能够自动将异常访问的IP加入的IP黑名单中(完成);
  • 并对异常访问的IP进行告警,并支持应用自定义IP黑名单发现规则及告警实现(待实现);
  • 支持针对集群应用进行汇总统计(完成);
  • 高效的数据统计、存储及读取,减少对应用效率的影响,目前存在Redis中(完成);
  • 支持对规则不同存储的扩展支持,如可将规则持久化到DB中、ZK中等,实现已经抽象化,Redis的已经完成,其它存储逻辑可根据情况自定义(完成);
  • 能够支持按分纬度及秒纬度对访问的IP进行统计(完成);
  • 有一定的管理界面,能够对黑名单及TOP IP的访问情况进行查询及操作(完成);
  • 支持将统计数据输出到不同的存储,如Redis、Influxdb等,实现已经抽象化,Redis的已经完成,其它存储逻辑可根据情况自定义(完成);
  • 支持多平台对访问数据进行呈现,如以后数据可以在Grafana中呈现,目前有基本的管理界面,更精细的管理界面及Grafana中展示数据后期再考虑实现(部分完成);
  • 支持对IP及IP段访问最高TPS进行统一配置(完成),也支持对单个IP及IP段进行访问控制(完成);
  • 多应用集群统一流量管控平台,可管理所有接入的应用的访问情况(完成);

二、架构

1、交互架构

0

2、实现架构

3、系统模块

  • 收集访问纬度数据的Agent模块,需要应用集成;
  • 用于查看及管理的控制台模块,控制台模块为Master/Slave架构,Master用于执行定时任务、对节点进行检查、检查系统收集的IP黑名单情况等;

三、设计原则

1、高性能

  • 访问纬度数据的统计、过滤及收集,必须是高效的,并且尽可能的减少由于这些纬度数据的收集给集成应用带来的性能损耗;
  • 访问纬度数据收集时,尽可能的采用全内存操作,减少或避免本地IO及远程IO的操作;
  • 访问纬度数据的上报、从远程同步数据,使用异常操作;

2、高可用

  • 当IP限流系统的控制台不可用时,不能够影响到集成访问纬度数据的统计的应用端;
  • 对集成访问纬度统计的应用定期健康检查,确保其可用性;
  • IP限流系统的控制台支持水平扩展,且无状态;

3、高可扩展

  • 纬度数据的存储支持扩展,可以根据实际情况支持不同的后端存储结构,默认支持Redis,可扩展为支持MySQL、Elasticsearch、Influxdb等;
  • 对超限访问IP处理规则的可扩展性,同时支持在控制台及集成客户端进行扩展,且提供默认的处理规则;

4、简单易用

  • 集成简单,尽可能的除了在pom.xml中引入Jar包以外,不需要做其它任何的操作;
  • 使用简单,提供基本的管理界面给用户,可对IP的访问情况、IP白名单、IP黑白单、QPS设置等进行管理和查看;

四、存储设计

系统默认设计只会保存最多一个小时的访问纬度数据,数据量不大,此处就使用Redis做为存储。

1、black-ips

用于存储全局黑名单IP的Key,存储结构为Hash,HashKey为IP,HashValue为对象com.eeefff.limiter.common.vo.BlackIpVO,其定义的字段如下:

0

注:

每个应用的IP黑名单数据都会单独存储到不同的Key中,其命名规则为"应用名称-black-ips",如IP限制平台控制台的IP黑名单数据,保存的Key为:ip-limiter-dashboard-black-ips;

2、white-ips

用于存储全局白名单IP的Key,存储结构为Hash,HashKey为IP,HashValue为对象com.eeefff.limiter.common.vo.WhiteIpVO,其定义的字段如下:

0

注:

每个应用的IP白名单数据都会单独存储到不同的Key中,其命名规则为"应用名称-white-ips",如IP限制平台控制台的IP白名单数据,保存的Key为:ip-limiter-dashboard-white-ips;

3、minute-access

用于存储所有接入了IP限流平台的应用客户端的每分钟的访问统计汇总的Key,存储结构为Hash,HashKey为代表访问的分钟,HashValue为对象List,com.eeefff.limiter.common.vo.AccessVO定义的字段如下:

0

注:

每个应用的分钟访问纬度数据都会单独存储到不同的Key中,其命名规则为"应用名称-minute-access",如IP限制平台控制台的分钟访问纬度数据,保存的Key为:ip-limiter-dashboard-minute-access;

每个应用每个节点的的分钟访问纬度数据都会单独存储到不同的Key中,其命名规则为"应用名称-ip及端口-minute-access",如IP限制平台控制台的分钟访问纬度数据,保存的Key为:ip-limiter-dashboard-127.0.0.1:20520-minute-access;

4、ip-limit

用于存储全局IP QPS设置的Key,存储结构为Hash,HashKey为IP,HashValue为对象com.eeefff.limiter.common.vo.IpLimitVO,其定义的字段如下:

0

注:

每个应用的IP QPS设置数据都会单独存储到不同的Key中,其命名规则为"应用名称-ip-limit",如IP限制平台控制台的IP白名单数据,保存的Key为:ip-limiter-dashboard-ip-limit;

5、registered-clients

用于存储注册到IP限流平台管理控制台的Key,存储结构为Hash,HashKey为应用名称,HashValue为对象Map,用于存储该应用所有注册的客户端,Map的Key为应用客户端的IP+端口,com.eeefff.limiter.common.vo.Client对定义的字段如下:

0

6、ip-limiter-dashboard-master

用于存储IP限流平台的Master节点的Key,存储结构为普通的字符串,其值为当前master节点的IP+端口。

7、permitsPerSecondEachIp

用于存储每个IP默认的最大QPS值的Key,存储结构为普通的数字,其值为当每个IP默认的最大QPS值。

注:

每个应用都会单独存储IP默认值最大QPS值,存储结构为普通的数字,其值为当前应用每个IP默认的最大QPS值,存储每个应用默认访问QPS的Redis的Key命名规则为“应用名称-permitsPerSecondEachIp”,如ip-limiter-dashboard的key为"ip-limiter-dashboard-permitsPerSecondEachIp"。

五、系统设计

1、IP限流Agent

该Agent用于集成到应用端,提供了一些方便性的功能,如IP访问数据的收集与上报、从远程控制台获取IP黑/白名单等;

每个节点本地默认保留60份以1分钟为纬度的访问统计数据,即保存60分钟以分钟为纬度统计的访问数据,默认保留60份以秒为统计纬度的访问数据,这都可以根据相应的配置项进行调整。

1)功能模块

0

2)限流算法

常用的限流算法有以下四种:

  • 计数器(固定窗口)算法
  • 滑动窗口算法
  • 漏桶算法
  • 令牌桶算法

各种算法的优缺点,可以查看这里。

选择的算法为计数器(固定窗口)算法,因为我们的应用场景为单个IP的限流,而不是针对所有请求限流,且该算法实现简单,能够满足一定的突发情况的处理,该算法的实现类为com.eeefff.limiter.core.interceptor.IpQpsRateLimiter。

3)核心功能

IP流控请求合法性检查:确保IP的访问不会超过QPS的限制,如果是黑名单的IP直接拒绝访问,确保系统的安全性

本地访问数据的上报:目前只是以分纬度主动上报了每分钟IP的访问统计数据

从远程更新IP黑白名单及QPS限制配置:更新到的配置会存放在本地缓存中,以确保本地检查合法性访问的高效性

提供秒纬度访问统计接口:远程控制台可以调用本地以秒纬度统计的实时QPS,更方便的了解当前应用的运行情况

4)核心流程

请求合法性检查

0

注:IP白名单、IP黑名单及IP的QPS都是在本地内存或本地缓存中,没有远程的IO操作,因而该校验过程仅会对整体性能产生非常微弱的影响。

请求合法性检查 子逻辑之 IP白名单校验逻辑

0

请求合法性检查 子逻辑之 IP黑名单校验逻辑

0

请求合法性检查 子逻辑之 IP QPS超限访问校验及增加IP的访问量

0

请求合法性检查 子逻辑之 IP QPS超限访问校验及增加IP的访问量 子逻辑之 当前IP是否超限访问的判断

0

从远程更新配置

0

5)核心配置

#IP Limiter控制台的地址
ip.limiter.core.dashboardAddress = [不配置则默认为系统自动判断,如果指定则例用指定值]
#当前服务器的IP地址
ip.limiter.core.serverAddress = [不配置则自动获取,如果指定则例用指定值]
#本地缓存中保留多少份以秒纬度统计的数据,单位为秒
ip.limiter.core.secondsMetricLocalKeeped = 60
#本地应用最多保留多少份以分钟为单位的统计,如值为60时,则表示本地会保留60份以分钟为统计纬度统计的访问最多的Ip,也可以理解为保留60分钟每分钟访问最多的Ip的统计
ip.limiter.core.maxTopAccessMinutes = 60
#IP的QPS限制配置及IP黑/白名单从远程控制台更新时间间隔,单位为毫秒
ip.limiter.core.ipQpsLimitAndBlackIpUpdateTimeInterval = 10000

2、IP限流控制台

1)功能模块

0

2)核心功能

a)超限访问IP自动限制访问

针对超限访问的IP,会临时将其加入到黑名单中,以临时阻止其对系统的访问。

限制分为四个等级:

  • 限制访问一分钟
  • 限制访问一小时
  • 限制访问二十四小时
  • 限制永久访问

限制规则及限制升级规则:

  • 针对首次访问超限的IP,会将其加到黑名单中,并限制其访问一分钟,如果一分钟后没有超限访问的行为,则将解除其访问限制;
  • 针对被限制访问一分钟的IP,如果在一分钟后解除其访问限制后,还有继续超限访问的行为,则会将其访问限制升级为限制访问一小时,如果没有系统则会自动将其从黑名单中移除;
  • 针对被限制访问一小时的IP,如果在一小时后解除其访问限制后,还有继续超限访问的行为,则会将其访问限制升级为限制访问一天,如果没有系统则会自动将其从黑名单中移除;
  • 针对被限制访问二十四小时的IP,如果在二十四小时后解除其访问限制后,还有继续超限访问的行为,则会将其访问限制升级为限制记久访问,如果没有系统则会自动将其从黑名单中移除;

b)IP黑/白名单的管理

支持针对指定应用设置IP黑/白名单,生效范围为指定的应用,也支持从全局上设置IP黑/白名单,应用到所有应用中,管理功能包括IP黑/白名单增加、删除、查询的操作。

c)IP的最大QPS管理

IP的最大QPS设置分为以下几块内容:

  • 针对指定应用指定IP的最大QPS进行设置,判断IP是否超限访问最优先适用的规则;
  • 针对指定应用所有默认IP的最大QPS进行设置,这个设置适用于访问该应用所有未指定最大QPS的IP,判断IP是否超限访问次优先适用的规则;
  • 针对所有应用默认IP的最大QPS进行设置,判断IP是否超限访问最后适用的规则;

满足以上任何规则,都认为该IP是超限访问IP。

d)注册客户端健康检查

定期对注册到控制台中所有的应用及每个应用的所有节点进行健康检查,检查逻辑如下:

  • 应用的某个节点连续三次都检查不成功,那该节点就会从该应用删除掉;
  • 应用的所有节点都检查不成功,或者该应用本身已经没有了任何可用的节点,那该应用就会被删除;

e)系统对自动增加为黑名单的IP进行自检

  • 针对首次访问超限的IP,如果一分钟后没有超限访问的行为,则将解除其访问限制,系统会将其从黑名单中删除;
  • 针对被限制访问一分钟的IP,如果在一分钟解除其访问限制后,没有继续超限访问的行为,系统会自动将其从黑名单中移除;
  • 针对被限制访问一小时的IP,如果在一小时解除其访问限制后,没有继续超限访问的行为,系统会自动将其从黑名单中移除;
  • 针对被限制访问二十四小时的IP,如果在二十四小时解除其访问限制后,没有继续超限访问的行为,系统会自动将其从黑名单中移除;

f)查询应用的实时访问情况

在控制台查询指定应用端节点的实时IP访问情况。

3)核心流程

a)注册客户端健康检查

0

b)系统对自动增加为黑名单的IP进行自检

4)核心配置

#Sentinel相关的配置,需要应用引入方在应用的application.properties配置文件中增加以下几个配置项
#[应用必填]Sentinel客户端端口
sentinel.apiPort = 20521

#active.env= DEV
# 将 Apollo 配置加载提到初始化日志系统之前,需要托管日志配置时开启
apollo.bootstrap.eagerLoad.enabled = true
# 应用全局唯一的身份标识
app.id = ip-limiter-dashboard
# Apollo Meta Server 地址
#apollo.meta = http://apollo.dev.xxx.com:8072
# 自定义本地配置文件缓存路径
apollo.cacheDir = ./config
# 设置在应用启动阶段就加载 Apollo 配置
apollo.bootstrap.enabled = true
# 注入 application namespace
apollo.bootstrap.namespaces = application

###################配置项都在Apollo中配置(开始)####################
#每秒每个IP最大允许的QPS的默认值
#ip.limiter.dashboard.permitsPerSecondEachIp = 50
#将应用上报上来的分/秒纬度的统计数据,根据其访问量做倒序排序,取指定数量的Top个IP的访问数据用于后续处理
#ip.limiter.dashboard.maxTopAccessIps = 10
#以分钟为单位统计,并根据访问量做倒序排序,Redis中每分钟保留的访问最多的IP的数量,也即每分钟最多保留Top个IP的访问数据
#ip.limiter.dashboard.maxRedisTopAccessIps = 50
#(Global)以分钟为单位统计,并根据访问量做倒序排序,Redis中每分钟保留的访问最多的IP的数量,也即每分钟最多保留Top个IP的访问数据
#ip.limiter.dashboard.globalMaxRedisTopAccessIps = 50
#单个应用Redis最多保留多少份以分钟为单位的统计,如值为60时,则表示Redis中会保留60份以分钟为统计纬度统计的访问最多的Ip,也可以理解为保留60分钟每分钟访问最多的Ip的统计
#ip.limiter.dashboard.maxRedisTopAccessMinutes = 60
#(Global)Redis最多保留多少份以分钟为单位的统计,如值为60时,则表示Redis中会保留60份以分钟为统计纬度统计的访问最多的Ip,也可以理解为保留60分钟每分钟访问最多的Ip的统计
#ip.limiter.dashboard.globalMaxRedisTopAccessMinutes = 60
#从Redis中获取锁的最大等待时间,单位为毫秒
#ip.limiter.dashboard.redisLockMaxWaitMillis = 60000

#HTTP请求的最大重试次数
#ip.limiter.dashboard.maxHttpRetryTimes = 5
#每次HTTP请求重试的间隔时间,单位为毫秒
#ip.limiter.dashboard.httpRetryIntervalTime = 20
#应用客户端健康检查的频率,以分钟为单位
#ip.limiter.dashboard.appClientHealthCheckRate = 1
#检查由于超限访问的IP被系统自动加入到黑名单中的IP,并对其进行释放操作的频率,以分钟为单位
#ip.limiter.dashboard.systemAddBlackIpCheckRate = 1

#Redis相关配置
#spring.redis.host = 192.168.10.232
#spring.redis.port = 6379
#spring.redis.password = xxxx
#spring.redis.database = 10
###################配置项都在Apollo中配置(结束)####################

5)功能界面

(单个应用)分纬度访问TOP统计

0

(单个应用)秒纬度访问TOP统计

0

(单个应用)IP白名单设置

0

(单个应用)IP黑名单设置

0

(单个应用)单个IP的QPS设置

0

(分局)分纬度访问TOP统计

0

(全局)黑名单设置

0

(全局)白名单设置

0

(全局)单个IP的QPS设置

0

六、IP限流平台的搭建

1. 下载源码并安排

git clone https://gitee.com/laofeng/ip-limiter.git
cd ip-limiter

2. 修改必要的核心配置文件

首先需要启动IP限流控制台,IP限流控制台默认使用Redis做为存储,因而需要先对Redis进行配置,否则应用运行时会报错,修改IP控制台的核心配置文件ip-limiter-dashboard/src/main/resources/application.properties,只需要修改其中的redis配置,其它的都可以使用默认值,如下所示:

spring.redis.host = 192.168.12.111
spring.redis.port = 6379
spring.redis.password = 8lFvrZh7d7Ik8LtNwpBMakleishen
spring.redis.database = 12
spring.redis.timeout = 5000
spring.redis.jedis.pool.max-idle = 8
spring.redis.jedis.pool.min-idle = 0
spring.redis.jedis.pool.max-wait = 8
spring.redis.jedis.pool.max-active = 20

3. 启动IP限流平台控制台

cd ip-limiter-dashboard
./start.sh

注:启动会报一些与Apollo相关的警告,可以不用理会,这个是方便配置后续接入Apollo的,如果实在是不喜欢,可以在pom中删除Apollo的引入,并且删除Apollo相关的代码即可。

控制台访问地址:

4. 启动演示应用

演示应用的目录ip-limiter-samples,里面包括了三个演示应用,分别为:

  • ip-limiter-spring-boot-sample: 用于演示spring boot集用IP限流平台
  • ip-limiter-spring-mvc-sample: 用于演示普通的spring mvc应用集用IP限流平台
  • ip-limiter-spring-gateway-sample: 用于演示spring gateway集用IP限流平台

这三种应用类型应该包含了大部份的应用类型,每种应用都有自己的一些不同的集成方式及特点。

1)启动ip-limiter-spring-boot-sample

首先进入ip-limiter-spring-boot-sample目录,通过以下命令启动:

./install.sh
./start.sh

其默认的端口为10000,启动成功后,可以通过http://localhost:10000/hello访问验证,待控制台打印出往IP限流平台注册成功字样后,就可以在控制台的左上角的下拉框中看到该应用了。

2)启动ip-limiter-spring-mvc-sample

该演示应用为了启动上的方便,需要先在/etc/maven/setting.xml的pluginGroup中增加jetty的插件:

  <pluginGroups>
    <pluginGroup>org.mortbay.jetty</pluginGroup>
  </pluginGroups>

直接保存退出即可。

然后进入ip-limiter-spring-mvc-sample目录,通过以下命令启动:

./runJetty.sh

启动的过程中可能会报一些Jetty的错误,这个不需要理会,待启动完成后其默认的端口为10001,启动成功后可以通过http://localhost:10001/app/health访问验证,待控制台打印出往IP限流平台注册成功字样后,就可以在控制台的左上角的下拉框中看到该应用了。

3)启动ip-limiter-spring-boot-sample

首先进入ip-limiter-spring-boot-sample目录,通过以下命令启动:

./install.sh
./start.sh

其默认的端口为10002,启动成功后,可以通过http://localhost:10002/api_hello/hello访问验证,该请求实通过网关访问http://localhost:10000/hello,因而ip-limiter-spring-boot-sample需要先启动才可以验证该应用,待控制台打印出往IP限流平台注册成功字样后,就可以在控制台的左上角的下拉框中看到该应用了。

七、应用的集成

目前应用的最新版本为1.1.0。

  1. Spring Boot应用的集成

引入限流依赖的客户端starter核心模块

		<dependency>
		    <groupId>com.eeefff.limiter</groupId>
		    <artifactId>ip-limiter-core-web</artifactId>
		    <version>${ip-limiter-core.version}</version>
		</dependency>

其它的什么也不用做了,方便吧@_@。

  1. Spring MVC应用的集成

Spring MVC应用的接入就会多一些步骤,不过也不麻烦。 1)引入限流依赖的客户端starter核心模块

		<dependency>
		    <groupId>com.eeefff.limiter</groupId>
		    <artifactId>ip-limiter-core-web</artifactId>
		    <version>${ip-limiter-core.version}</version>
		</dependency>

2)将IP限流平台的包加入扫描及增加Inteceptor

因为IP限流平台是基于Inteceptor的,在Spring的配置文件中增加如下配置:

<context:component-scan base-package="com.eeefff.limiter"></context:component-scan>
<mvc:interceptors>
    <ref bean="ipLimiterInterceptor" />
</mvc:interceptors>

如果遇到了集成上的问题,可以参考ip-limiter-spring-mvc-sample示例应用。

  1. Spring Gateway的集成

Spring Gateway使用的是Netty做为通信模块,不能够像其它应用一样使用Inteceptor来实现,需要使用其本身的GlobalFilter结合WebFilter来实现,因而需要集成不同的包:

		<dependency>
		    <groupId>com.eeefff.limiter</groupId>
		    <artifactId>ip-limiter-core-spring-gateway</artifactId>
		    <version>${ip-limiter-core.version}</version>
		</dependency>

和普通的Spring Boot应用一样,也是不需要做任何事情,就是这么简单。

基于令牌桶算法的braum限流工具设计源码 本项目是一款基于令牌桶算法的限流工具设计源码,包含218个文件,涵盖75个GIF动画、71个Java源文件、26个JavaScript文件、10个XML配置文件、5个CSS样式文件、4个Git忽略文件、4个属性文件以及3个命令行文件。该工具支持本地和分布式限流,提供注解式接口以简化使用,并具备动态规则配置功能。 立即下载

相关推荐

Python画常见分布的概率密度图

因为做概随大作业,了解了一些python画概率分布图的方法。

qq_44807946的博客 5204

Ip-Limit: Java轻量级注解式IP限流(黑名单/白名单)组件【一】

基于JVM缓存的轻量级、注解式IP限流组件,方便项目快速引用,满足多线程场景。 项目地址: https://github.com/DDAaTao/ip-limiter

AT的博客 2413

学习笔记——神经科学的数学基础

m%3D2X_%7Bi%7DiNy%3DAxW%3DABx_%7Bj%7Dy_%7Bi%7Dy%3DWxt=N7T8卷积神经网络(CNN)详细介绍及其原理详解_IronmanJay的博客-优快云博客https://blog.youkuaiyun.com/IronmanJay/article/details/128689946?

zxyopenstar的博客 1374

ip限流功能的实现

IP防护功能的实现

王村头的博客 3283

Excel数据清洗实战:8个必学函数搞定90%的脏数据问题(附案例)

本文通过一个完整的销售数据清洗案例,详细讲解了如何组合使用TRIM、CLEAN、SUBSTITUTE等8个核心Excel函数,构建自动化清洗流水线,高效解决日常办公中90%的脏数据问题,从而将时间留给更有价值的分析工作。

weixin_29215391的博客 582

VINS技术路线与代码详解

VINS技术路线 写在前面:本文整和自己的思路,希望对学习VINS或者VIO的同学有所帮助,如果你觉得文章写的对你的理解有一点帮助,可以推荐给周围的小伙伴们,当然,如果你有任何问题想要交流,欢迎随时探讨。话不多说,下面上正文。 VINS代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono 参考文档:1.VINS-Mono A R...

wangshuailpp的博客 7万+

Ip-Limit: Java轻量级注解式IP限流(黑名单/白名单)组件【二】

基于JVM缓存的轻量级、注解式IP限流组件,方便项目快速引用,满足多线程场景。 默认为滑动窗口限流器,内置令牌桶限流器,可通过注解的属性配置修改 项目地址: https://github.com/DDAaTao/ip-limiter

AT的博客 811

目标检测——布匹缺陷检测数据集

结构瑕疵指的是布料本身的缺陷,包括嵌结、抽纱、错纱、断纱、预缩等问题,这些问题通常是在布料生产过程中出现的。而质量瑕疵则是指布料在使用过程中出现的问题,如污渍、断裂、鼓囊、针眼等,这些问题可能由生产过程中的结构瑕疵导致,也可能是在运输、存放和使用过程中引起的。布匹瑕疵如缺纬、断纬、粗纬、松纬、缺经、断经、粗经、筘痕、污点、破损等,若未得到及时有效的检测,这些瑕疵产品可能会流向市场,导致消费者的不满和退货,严重影响企业的声誉和品牌形象。织疵包括缺经、缺纬、跳花、弓纱、错纱、厚薄段、油污渍等;

zzjlhlcd的博客 612

java 使用Guava的RateLimiter做接口限流+redis的lua脚本做IP防刷

需求: 每个IP在指定的时间内可以请求某一个接口多少次,如果请求次数超过指定数,就返回拒绝信息 没做IP防刷之前,请求多了之后服务蹦了 做防刷之后 当然,还有限流 直接上代码 接口注解代码: import java.lang.annotation.*; /** * 限流注解 * * @author lixx * @version 1.0 * @date 2020-07-14 15:58 */ @Target({ElementType.MET..

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2639

置顶必读(1) | 滚雪球学Oracle教程导航帖,带你弯道超车(持续更新中)

什么是数据库管理系统(DBMS),Oracle在行业中的领先地位Oracle数据库的市场竞争与主要应用场景Oracle数据库的核心功能模块与未来技术发展趋势约束的高级应用:主键、唯一性、外键设计与管理表分区、视图、同义词与序列的最佳实践PL/SQL编程的设计哲学,如何高效使用Oracle SQL DeveloperPL/SQL代码调试与优化技巧RAC集群中的高可用性设计,负载均衡与并行查询的配置集群中的缓存一致性管理。

**My Coding Family** 1万+

RGB渐变颜色转换公式及例程

设Step=51,将RGB(255,0,0)颜色渐变为RGB(0,255,0),即RGB(255,0,0)经过51次颜色渐变转为RGB(0,255,0);设Step=51,将RGB(0,255,0)颜色渐变为RGB(0,0,255),即RGB(0,255,0)经过51次颜色渐变转为RGB(0,0,255);设Step=51,将RGB(0,0,255)颜色渐变为RGB(255,0,0),即RGB(0,0,255)经过51次颜色渐变转为RGB(255,0,0);分步骤的方式,使其渐变色循环整个颜色值;

1万+

基于Sentinel实现对不同ip进行限流熔断

基于Sentinel实现对不同ip进行限流熔断

xundefined的博客 3771

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2347

【智能排班系统】基于Redis的increment命令和lua脚本实现IP限流

本文介绍了一种基于Redis的IP限流机制,用于保护服务器资源、防范恶意攻击并提升用户体验。通过使用Lua脚本确保限流操作的原子性,文中详细展示了如何实现IP限流,并提供了关键的Java代码示例,包括限流工具类、过滤器及验证码接口的限流处理。此外,还介绍了如何根据不同接口的需求配置不同的限流策略。

我只管埋头前行,剩下的交给时间。 1719

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java常见限流用法介绍和实现

在固定时间窗口的基础上进行优化,对大的时间窗口进行划分,每个小窗口对应大窗口中的不同时间点,每个窗口独立计数。又如在最后1个毫秒内请求了100个请求,下一个毫秒开始新的时间窗口,计数清0,此时又涌入了100个请求,虽说固定时间窗口内没有超过阈值,但是全局看来,这两个毫秒内就涌入了200个请求,对于限流100的概念是不可接受的。与漏桶算法相反,系统以固定的速率往桶里放入令牌,称为令牌桶,如果有请求需要这个令牌,这可以从桶里拿一个,拿到了令牌即允许放行,直到令牌被拿完即令牌不足,则请求需等待或被丢弃。

YY-帆S的博客 5708

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Redis+Lua脚本实现分布式限流(Nginx+Lua IP限流)

在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一、京东618、秒杀、抢购促销等,这些都是典型的大流量高并发场景。关注【冰河技术】微信公众号,解锁更多【高并发】专题文章。注意:由于原文篇幅比较长,所以被拆分为:理论、算法、实战(HTTP接口实战+分布式限流实战)三大部分。理论篇:《》算法篇:《》本文是在《》一文的基础上进行实现,有关项目的搭建可参见《》一文的内容。小伙伴们可以关注【冰河技术】微信公众号来阅读上述文章。

MayMatrix 的博客 3075

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Springboot集成sentinel实现接口限流入门

Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。 在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。 之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。来看一下sentinel的简介: https://...

tianyaleixiaowu的专栏 3万+

Spring Cloud Gateway 之限流

话说在 Spring Cloud Gateway 问世之前,Spring Cloud 的微服务世界里,网关一定非 Netflix Zuul 莫属。但是由于 Zuul 1.x 存在的一些问题,比如阻塞式的 API,不支持 WebSocket 等,一直被人所诟病,而且 Zuul 升级新版本依赖于 Netflix 公司,经过几次跳票之后,Spring 开源社区决定推出自己的网关组件,替代 Netflix Zuul。从 18 年 6 月 Spring Cloud 发布的 Finchley 版本开始,Spring

weixin_51216079的博客 48万+

【Java API接口限流的几种实现方式】

在高并发的互联网应用中,API接口限流是一种重要的保护机制,它通过控制单位时间内的请求数量来防止系统过载,确保服务的稳定性和可用性。本文将介绍Java中API接口限流的概念、实现方式,并提供一个简单的Java示例。限流(Rate Limiting)是指在一定时间范围内限制请求的处理速率,以避免系统因请求过多而崩溃。这些方法各有优势,可以根据具体的业务场景和需求选择合适的限流方案。Sentinel是阿里巴巴开源的分布式系统流量防卫组件,它提供了丰富的流量控制功能,包括QPS(每秒查询率)限制。

qq_33545255的博客 2832

.NET Core WebApi接口IP限流实践技术指南

在当今的Web开发中,接口的安全性和稳定性至关重要。面对恶意请求或频繁访问,我们需要采取有效的措施来保护我们的WebApi接口。IP限流是一种常见的技术手段,通过对来自同一IP地址的请求进行频率控制,可以有效地防止恶意攻击和过度消耗服务器资源。本文将详细介绍如何在.NET Core WebApi中实现IP限流。一、IP限流概述IP限流,简单来说,就是根据客户端的IP地址,对其发出的请求进行频率控制...

dotNET跨平台 385

分布式限流算法及实现介绍

分布式系统架构下面对突增的高并发访问请求,如何实现限流以保护系统的可用性是需要关注的一个问题。分布式限流实现机制上有很多中,包括基于网关实现、基于中间件如Redis实现等,本文简要介绍限流的常用算法以及实现方案。

牧羊人的方向 1865

200行代码实现接口限流,探究开源项目eladmin接口限流原理

eladmin的接口限流是如何实现的呢?eladmin的接口限流是如何实现的呢?1、下载eladmin后端项目2、接下来我们用idea打开项目,分析注解3、AOP切入解析注解 eladmin的接口限流是如何实现的呢? 今天闲来无事的时候,看了一下eladmin这个开源项目。发现了其中真的有非常多我们可以借鉴的地方。今天我们就来看看eladmin中接口限流这个小功能是如何实现。可能会对你之后的项目有所帮助。 这里预先给大家说一下他的实现用到了如下技术: 自定义注解 Spring提供的Aop redis+lu

qq_43080270的博客 912

阿里开源的限流神器 Sentinel,轻松搞定接口限流!

Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。 在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。 之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。 来看一下sentinel的简介: https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

lisheng19870305的专栏 933

限流实现与解决方案

一、限流操作: 为什么限流,是防止用户恶意刷新接口,因为部署在外部服务器,并且我们采用websocket的接口实现的,公司没有对硬件升级,导致程序时长崩溃,为了解决这个问题,请教公司的大佬,提出一个方案,限流操作。但是最后找到原因所在,解决了,吞吐量1万6左右,用的测试服务器,进行测试的,我开发的笔记本进行压测,工具是Jmeter,结果我的电脑未响应,卡了,服务器还没有挂。 限流那些方法 常见的...

点点的博客 5312

Sentinel实现限流,竟是如此的简单!

点击上方 "程序员小乐"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!关注订阅号「程序员小乐」,收看更多精彩内容每日英文Remember the three w...

程序员小乐 937
上一篇: 基于Sentinel的高可用限流系统的Grafana报表展示
下一篇: 一个操作阿里云K8S容器的简易命令
冯立彬
冯立彬 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄21年 5458粉丝 593原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值