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

相关文章
|
30天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
17天前
|
NoSQL 前端开发 测试技术
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
65 8
|
25天前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态。
|
27天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
1月前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
65 8
|
1月前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
144 6
|
2月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
55 1
|
30天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
160 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型

热门文章

最新文章