SpringCloudGateWay之限流
一、引言
在高并发系统中,经常需要限制系统中的电流化妆。一方面是防止大量的请求使服务器过载,导致服务不可用,另一方面是防止网络攻击。
常用的限流方法,如hystrix、应用线程池隔离、超过线程池的负载和go融合逻辑。一般来说,应用服务器(如Tomcat容器)通过限制线程数量来控制并发性,而流量也由时间窗口的平均速度来控制。常见的限流纬度包括IP、URI和用户访问频率的限流。
_当前的限制通常在网关层完成,如nginx、openresty、kong、zuul、spring cloud gateway等,也可以通过aop在应用层完成。
2。限流算法
1。计数器算法
_计数器算法利用计数器来实现限流是有点简单和粗糙的,一般我们会限制一秒钟内可以传递的请求数,比如限流qps是100,算法的思想是从第一个请求开始计时,在下一个1s中,每个请求的计数都会增加1,如果累积ve数达到100,随后的请求将完成。部门拒绝了。1s后,将计数恢复为0并重新开始计数。具体实现如下:对于每个服务调用,可以添加计数器1和Atomiclong incrementandget()方法返回的最新值,并将最新值与阈值进行比较。这种实现方式,我相信大家都知道有一个缺点:如果我在一个单位时间的前10毫秒内通过了100个请求,那么后面的990毫秒只能眼睁睁地拒绝请求。我们称这种现象为“尖峰现象”。
2。漏桶算法
为了消除“尖峰现象”,可以采用漏桶算法来实现电流限制。漏桶算法的名字非常生动。算法中有一个容器,类似于日常生活中使用的漏斗。当请求进入时,相当于水倒入漏斗,然后从下小口缓慢均匀地流出。无论上面的流量有多大,下面的流量保持不变。无论服务调用者多么不稳定,都会使用泄漏桶算法来限制电流,并每隔10毫秒处理一次请求。因为处理速度是固定的,所以传入请求的速度是未知的。可能有许多请求突然出现。无法处理的请求首先放在存储桶中。因为它是一个桶,所以必须有一个容量上限。如果存储桶满了,新的请求将被丢弃。
_在算法的实现中,可以准备一个队列来保存请求,可以使用线程池(调度执行器服务)来定期从队列中获取请求并执行它们,从而一次获得多个并发执行。
该算法在使用后也有不足之处:不能处理短突发流量。
三。令牌桶算法
从某种意义上说,令牌桶算法是对漏桶算法的改进。bucket算法可以限制请求调用的速率,而token bucket算法可以限制平均调用速率,同时允许一定程度的突发调用。在令牌存储桶算法中,有一个存储固定数量令牌的存储桶。算法中有一种机制,可以以一定的速率将令牌放入存储桶中。每个请求调用都需要首先获取令牌。只有获得令牌后,才能继续执行。否则,选择是等待可用的令牌或直接拒绝。玩代币是一个连续的动作。如果桶中的令牌数达到上限,则将丢弃这些令牌。所以这种情况存在。桶中有大量可用的令牌。此时,可以通过令牌直接执行传入请求。例如,将qps设置为100,然后在当前限制器初始化后一秒钟,桶中有100个令牌。此时,服务还不可用。启动完成后,限流器能承受100个瞬时请求。因此,请求只在bucket中没有令牌时等待,这相当于以一定的速率执行。
_实现思想:您可以准备一个队列来保存令牌,并通过线程池定期将令牌生成到队列中。每个请求,您都可以从队列中获取一个令牌并继续执行。
三。Spring Cloud网关电流限制
在SpringCloudGateway中,有过滤器,所以上面提到的三个过滤器可以自己实现i
SpringCloudGateWay之限流的更多相关文章
- 使用springcloud gateway搭建网关(分流,限流,熔断)
Spring Cloud Gateway Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 ...
- spring cloud gateway 之限流篇
转载请标明出处: https://www.fangzhipeng.com 本文出自方志朋的博客 在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方 ...
- 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
一.微服务网关Spring Cloud Gateway 1.1 导引 文中内容包含:微服务网关限流10万QPS.跨域.过滤器.令牌桶算法. 在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuu ...
- Spring Cloud Gateway 网关限流
Spring Cloud Gateway 限流 一.背景 二.实现功能 三.网关层限流 1.使用默认的redis来限流 1.引入jar包 2.编写配置文件 3.网关正常响应 4.网关限流响应 2.自定 ...
- 2流高手速成记(之八):基于Sentinel实现微服务体系下的限流与熔断
我们接上回 上一篇中,我们进行了简要的微服务实现,也体会到了SpringCloudAlibaba的强大和神奇之处 我们仅改动了两个注释,其他全篇代码不变,原来的独立服务就被我们分为了provider和 ...
- WebApiThrottle限流框架使用手册
阅读目录: 介绍 基于IP全局限流 基于IP的端点限流 基于IP和客户端key的端点限流 IP和客户端key的白名单 IP和客户端key自定义限制频率 端点自定义限制频率 关于被拒请求的计数器 在we ...
- [WCF编程]9.性能与限流
一.性能概述 WCF服务的性能取决于很多因素.出了CPU.RAM和网络性能等常见的因素外,实例上下文模式.并发模式.数据契约的设计或使用的绑定等与WCF有关的因素都起着重要的作用. 实例上下文模式用来 ...
- 快速入门系列--WCF--06并发限流、可靠会话和队列服务
这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数量并可以起到削峰的作用,最后还会对之前的 ...
- WCF Throttling 限流的三道闸口
WCF Throttling 限流的三道闸口 一.WCF Throttling 流量限制简介 我们期望WCF服务端能够处理尽可能多的并发请求,但是资源是有限的,服务不可能同时处理无限多的并发请求,如 ...
随机推荐
- ACCESS_ONCE的作用
如果你看过 Linux 内核中的 RCU 的实现,你应该注意到了这个叫做 ACCESS_ONCE() 宏. ACCESS_ONCE的定义如下: #define __ACCESS_ONCE(x) ({ ...
- 详解nohup和& 区别
nohup 一.[解释] 不挂断地运行命令.no hangup的缩写,意即“不挂断”.一般理解&记住一个命令最简单的方法是记住它是什么缩写,就自然理解了这个命令.nohup运行由 Comman ...
- springBoot整合spring、springMVC、mybatis
前文 1.为什么使用springBoot 众所周知,spring是Java在搭建后台时非常实用的框架,其整合了市场上几乎所有的主流框架于一体,使后端编程更加高效.快速: 而SpringBoot更是把s ...
- Docker在CentOS下的安装
工欲善其事,必先利其器. 在我们以后的Docker学习中,都推荐使用CentOS6.5作为学习平台,毕竟Docker的内核也是基于Linux的.本文主要分享笔者在CentOS下的安装Docker的过程 ...
- UFIDA
充分匹配了‘用友’的中文品牌的含义,即‘与用户真诚合作,做用户可靠朋友’.其中‘U’代表‘User’,即用户:‘FID’表示忠诚.信任,来源于 Fidelity(诚实)等英文词的词根:助音词‘A’放在 ...
- 掌握Pod-Pod调度策略
一 Pod生命周期管理 1.1 Pod生命周期 Pod在整个生命周期过程中被系统定义了如下各种状态. 状态值 描述 Pending API Server已经创建该Pod,且Pod内还有一个或多个容器的 ...
- 【HANA系列】SAP HANA SQL获取某字符串的位置
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取某字 ...
- Lua for Mac环境搭建
1⃣️在Mac上安装Lua的运行环境再简单不过了,如果你的Mac Terminal上安装了Homebrew的话,只需要键入`brew install lua`即可. longsl-mac:~ long ...
- Spring boot (一):入门篇
Spring boot 简介 Build Anything with Spring Boot:Spring Boot is the starting point for building all Sp ...
- 类属性与对象实现,init方法的作用,绑定方法,绑定方法与普通函数的区别,继承,抽象与继承,派生与覆盖
今日内容: 1.类属性与对象属性 2.init方法的作用 3.绑定方法 4.绑定方法与普通函数的区别(非绑定方法) 5.继承 6.抽象与继承 7.派生与覆盖 1.类属性与对象属性 类中应该进存储所有对 ...