微服务(八)-服务网关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百万个流量去流入到我们的服务里去了,这肯定是不允许的。以固定速率放入令牌,如果发现令牌满的话,直接就丢弃了,相当于就达到了限流的效果了。

相关文章
|
17天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
15天前
|
负载均衡 监控 API
dotnet微服务之API网关Ocelot
Ocelot 是一个基于 .NET 的 API 网关,适用于微服务架构。本文介绍了如何创建一个 Web API 项目并使用 Ocelot 进行 API 请求路由、负载均衡等。通过配置 `ocelot.json` 和修改 `Program.cs`,实现对 `GoodApi` 和 `OrderApi` 两个项目的路由管理。最终,通过访问 `https://localhost:7122/good/Hello` 和 `https://localhost:7122/order/Hello` 验证配置成功。
25 1
dotnet微服务之API网关Ocelot
|
23天前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
30 1
Gateway服务网关
|
2月前
|
Kubernetes 负载均衡 Docker
构建高效后端服务:微服务架构的探索与实践
【10月更文挑战第20天】 在数字化时代,后端服务的构建对于任何在线业务的成功至关重要。本文将深入探讨微服务架构的概念、优势以及如何在实际项目中有效实施。我们将从微服务的基本理念出发,逐步解析其在提高系统可维护性、扩展性和敏捷性方面的作用。通过实际案例分析,揭示微服务架构在不同场景下的应用策略和最佳实践。无论你是后端开发新手还是经验丰富的工程师,本文都将为你提供宝贵的见解和实用的指导。
|
18天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
23天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
25天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
45 3
|
25天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
47 2
|
2月前
|
监控 API 持续交付
构建高效后端服务:微服务架构的深度探索
【10月更文挑战第20天】 在数字化时代,后端服务的构建对于支撑复杂的业务逻辑和海量数据处理至关重要。本文深入探讨了微服务架构的核心理念、实施策略以及面临的挑战,旨在为开发者提供一套构建高效、可扩展后端服务的方法论。通过案例分析,揭示微服务如何帮助企业应对快速变化的业务需求,同时保持系统的稳定性和灵活性。
46 9
|
2月前
|
安全 5G 网络性能优化