微服务(八)-服务网关zuul(四)

简介: 微服务(八)-服务网关zuul(四)

经典的模型:令牌桶的模型

1、比如说在电商中的抢购:一点就说抢购已结束。其实没有结束,只是你没有获得这个令牌就已经没了,所以说它可以限流,电商里的限流也可以用队列。1.1、限流就是如何去限制它的流量,让这个流量尽量控制在可控制的范围当中。2、在微服务当中,做限流都有成熟的框架,谷歌为我们提供成熟的插件guava=>RateLimiter:这个类里面可以直接做限流。2.1、既然做限流是做所有的过滤器之前来处理的。

代码如下:只要这么做就可以达到很好的限流的作用。create方法中的参数permitsPerSecond, long warmupPeriod, TimeUnit unit  

permitsPerSecond :当请求到来的速度超过了permitsPerSecond,保证每秒只处理permitsPerSecond个请求。

参数warmupPeriod和unit决定了其从冷却状态到达最大速率的时间

  1. package com.example.userapigateway.filter;
  2. import com.netflix.zuul.ZuulFilter;
  3. import com.netflix.zuul.context.RequestContext;
  4. import com.netflix.zuul.exception.ZuulException;
  5. import org.springframework.stereotype.Component;
  6. import java.util.concurrent.TimeUnit;
  7. import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
  8. import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVLET_DETECTION_FILTER_ORDER;
  9. @Component
  10. public class RateLimiters extends ZuulFilter {
  11.    //创建一个容量为100的令牌桶
  12.    //每次请求的时候都会获取这个令牌桶
  13.    public static final com.google.common.util.concurrent.RateLimiter RATE_LIMITER =
  14.            com.google.common.util.concurrent.RateLimiter.create(1,2, TimeUnit.SECONDS);
  15.    @Override
  16.    public String filterType() {
  17.        return PRE_TYPE;
  18.    }
  19.    @Override
  20.    public int filterOrder() {
  21.        return SERVLET_DETECTION_FILTER_ORDER-1;
  22.    }
  23.    @Override
  24.    public boolean shouldFilter() {
  25.        return true;
  26.    }
  27.    @Override
  28.    public Object run() throws ZuulException {
  29.        RequestContext context = RequestContext.getCurrentContext();
  30.        //获取令牌桶里的令牌
  31.        //如果为true,就是获取到了令牌,然后就直接放行
  32.        //如果没有获取到的话,直接就抛异常了。
  33.        //如果是10003的话代表请求的速度太快了,我这边接收不了,
  34.        //接收不了的话就拿不到令牌了,相当于拿的时候这个令牌已经没了。
  35.        //所以需要等待放进来的时候才可以拿到。拿不到的原因是流量太大了,一下就拿不到了。
  36.        //限制了流量的速率。一个人可以拿多个令牌,看它的线程。
  37.        boolean flag = RATE_LIMITER.tryAcquire();
  38.        if(!flag){
  39.            context.setSendZuulResponse(false);
  40.            context.setResponseStatusCode(400);
  41.        }
  42.        return null;
  43.    }
  44. }

3、去重启下gateway,然后用postman对接口的压测,一秒钟10次的请求,演示多线程的操作:

总结:zuul的限流就是这个流量不能让你一下子过来得太多,比如不能让10000个流量,或者让1百万个流量去流入到我们的服务里去了,这肯定是不允许的。以固定速率放入令牌,如果发现令牌满的话,直接就丢弃了,相当于就达到了限流的效果了。

相关文章
|
9天前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2025 年 6 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 6 月产品动态
|
13天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 6 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
3月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
|
4月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态
|
27天前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
90 14
|
2月前
|
API
微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
317 43
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 5 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
|
3月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2025 年 3 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要