随着微服务的普及,服务和服务之间的稳定性变得越来越重要。节目,降级和当前限制是保护微服务运行稳定性的三种主要武器。
在这里,我们主要谈论当前限制。当前限制的目的应该是通过在时间窗口中对同一访问/请求或请求的速度限制保护系统。首先,我们需要了解两个最基本的当前限制算法。
让我们谈谈现有的流行当前极限工具
Google Guava工具包提供了当前的限制工具类-RaateLimiter。
Ratelimiter基于“令牌”以达到当前极限。
HyStrix主要通过资源池和信号量数量,可以暂时支持简单的当前限制
三种相对主流的算法:泄漏桶,令牌桶,滑动窗口。Sentinel使用最后一个滑动窗口以达到当前限制。当然,前哨不限于当前限制。它是分布式服务体系结构的高度可用的流程保护组件。它主要使用流量作为起点,从流量限制,流动整形手术,保险丝降级,系统负载保护,热点保护等。维度来帮助开发人员确保微服务的稳定性。
有许多应用程序可以直接限制在呼叫,代理,网关和其他中间层的中间层。以下简短介绍以下
NGINX流量限制方法有三种类型
但是NGINX不够灵活,并且不擅长动态配置。
除了Zuul引入了当前的限制依赖性
相关配置如下:
请注意,如果此处的仓库针对整体限制,那么您可以考虑保存Redis。Zuul.raateLimit.Repository可以将这里设置为Redis,但是如果您扩展了容量信息(INM_Momery)或未解决,以便在扩展和收缩后可以自动扩展它,而无需更改配置,则可以自动扩展。
如果需要动态更新,则可以集成Apollo配置以进行动态更新。
在Spring Cloud Gateway中,有过滤器过滤器,因此可以在“ Pre”类型过滤器中实现上述三个过滤器。
但是当前限制是网关的最基本函数。Spring Cloud Gateway正式提供了RequestRateLimiterGatewayFilterFactory的类别。Redis和LUA脚本用于实现制作水桶的方法。
特定的实现逻辑位于“请求RateLimitGatewayFilterFactory类”中,LUA脚本在下图中所示的文件夹中:
特定的源代码不打算在此处讲述。读者可以自己查看它,并且代码的数量很少。首先,以案例形式说明如何在Spring Cloud Gateway中使用构建的限制过滤器工厂。
首先,在项目的POM文件和REDIS的反应性依赖性中,Gateway的起始依赖关系如下:
在配置文件中复制以下配置:
配置REDIS的信息,并配置RequestRateLimiter的当前限制过滤器。过滤器需要配置三个参数:
您可以通过KeyResolver指定当前密钥。例如,我们需要根据用户进行当前限制,IP作为当前限制等等。
1)IP流量限制
2)用户当前限制
3)接口限制
这仅适用于单个节点限制。
这里没有详细描述前哨。如果您想知道,可以参考以下文档:https://mp.weixin.qq.com/s/4ljnzdg9unqijml6mirieg
如果需要限制Springboot应用程序服务,则提供的解决方案是集成Google的Guava类库。每个人都可以在线搜索很多演示。我在这里没有详细描述,主要是使用以下API:
现在容器相对较热。现在,如果将其部署在容器或虚拟机上,我们需要动态调整资源数量,那么当前限制将更改。这是实现动态电流极限的方法。第一步绝对是实现配置动态更新的集成配置中心。至于有效方法的效果,有几种解决方案:增加听众,当配置更改时,当前的限制对象将重新创建
选项2:定期创建流动对象。此处介绍了应用程序缓存框架。以下是演示。
当然,如果存在与业务相关的电流,则可以根据上述演示达到当前限制。
作者:Lipengxs来源:https://my.oschina.net/lipngxs/blog/4733443