微服务网关网关限流

article/2025/9/25 9:23:50

微服务网关Gateway

  • 1.微服务网关Gateway
    • 1.1 微服务网关概述
      • 微服务网关的优点
      • 实现微服务网关的技术:
    • 1.2 微服务网关微服务搭建
      • 步骤
    • 1.3 微服务网关跨域
    • 1.4 微服务网关过滤器
  • 2.网关限流
    • 2.1思路分析
    • 2.2令牌桶算法
    • 2.3令牌桶思路分析
    • 2.4限流代码思路

1.微服务网关Gateway

1.1 微服务网关概述

不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:

  • 客户端会多次请求不同的微服务,增加了客户端的复杂性
  • 存在跨域请求,在一定场景下处理相对复杂
  • 认证复杂,每个服务都需要独立认证
  • 难以重构

网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过网关这一层。这样安全、性能、监控可以交由网关来做。请添加图片描述

微服务网关的优点

  • 安全 ,只有网关系统对外进行暴露,微服务可以隐藏在内网,通过防火墙保护。
  • 易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。(日志的监控与分析)
  • 易于统一认证授权。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
  • 减少了客户端与各个微服务之间的交互次数。

总结:微服务网关就是一个系统,通过暴露该微服务网关系统,方便我们进行相关的鉴权,安全控制,日志统一处理,易于监控的相关功能。

实现微服务网关的技术:

  • nginx
  • Zuul ,Zuul 是 Netflix 出品的一个基于 JVM 路由和服务端的负载均衡器。
  • spring-cloud-gateway, 是spring 出品的 基于spring 的网关项目,集成断路器,路径重写,性能比Zuul好。

gateway官网的地址
https://spring.io/projects/spring-cloud-gateway

1.2 微服务网关微服务搭建

步骤

  1. 创建gateway的maven工程
  2. 添加依赖
		<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
  1. 在启动类上添加注解
    @EnableEurekaClient
  2. 在resources下创建application.yml
spring:cloud:gateway:routes:- id: after_route #要跳转的服务名uri: lb://goods #lb:在eureka上找到goods服务,然后通过后面的网址跳转predicates:‐ Path=/goods/** #goods后面的请求全部通过filters:‐ StripPrefix= 1 #访问时将goods省略掉(如果不明白,就把这个写上就行)

1.3 微服务网关跨域

修改application.yml ,在spring.cloud.gateway节点添加配置:

globalcors:cors-configurations:'[/**]': # 匹配所有请求allowedOrigins: "*" #跨域处理 允许所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETE

1.4 微服务网关过滤器

我们可以通过网关过滤器,实现一些逻辑的处理,比如ip黑白名单拦截、特定地址的拦截等。

/*** 获取用户ip*/
@Component
public class IpFilter implements GlobalFilter, Ordered {//具体逻辑业务实现@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("经过第一个过滤器");//1.获取请求 2.获取远程地址 3.获取ipString ip = Objects.requireNonNull(exchange.getRequest().getRemoteAddress()).getHostName();System.out.println("ip:" + ip);//放行return chain.filter(exchange);}//当前过滤器级别@Overridepublic int getOrder() {return 1;}
}

以上代码是获取用户请求的地址,并没有实现具体逻辑。

2.网关限流

限流:当我们的系统被频繁的请求的时候,就有可能将系统压垮。
所以为了解决这个问题,需要在每一个微服务中做限流操作。
但是如果有了网关,那么就可以在网关系统做限流,因为所有的请求都需要先通过网关系统才能路由到微服务中。

2.1思路分析

请添加图片描述

2.2令牌桶算法

概述:

  1. 所有的请求在处理之前都需要拿到一个可用的令牌才会被处理;
  2. 根据限流大小,设置按照一定的速率往桶里添加令牌;
  3. 桶设置最大的放置令牌限制,当桶满时、新添加的令牌就被丢弃或者拒绝;
  4. 请求达到后首先要获取令牌桶中的令牌,拿着令牌才可以进行其他的业务逻辑,处理完业务逻辑之后,将令牌直接删除;
  5. 令牌桶有最低限额,当桶中的令牌达到最低限额的时候,请求处理完之后将不会删除令牌,以此保证足够的限流。

2.3令牌桶思路分析

请添加图片描述

2.4限流代码思路

需求:每个ip地址1秒内只能发送1次请求,多出来的请求返回429错误。

  1. 添加依赖, gateway 默认使用redis的RateLimter限流算法来实现。
<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId><version>2.1.3.RELEASE</version></dependency>
  1. 定义KeyResolver

GatewayApplicatioin引导类中添加如下代码,KeyResolver用于计算某一个类型的限流的KEY也就是说,可以通过KeyResolver来指定限流的Key。

 //指定限流的key@Beanpublic KeyResolver keyResolver() {return exchange -> {//根据ip限流String ip = Objects.requireNonNull(exchange.getRequest().getRemoteAddress()).getHostName();return Mono.just(ip);};}
  1. 修改application.yml中配置项,指定限制流量的配置以及REDIS的配置
routes:- id: goodsuri: lb://goodspredicates:- Path=/goods/**filters:- StripPrefix= 1- name: RequestRateLimiter #请求数限流 名字不能随便写args:key-resolver: "#{@keyResolver}"redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平均速率redis-rate-limiter.burstCapacity: 1 #令牌桶总容量

以上是在原来的配置文件中修改,在predicates:下添加依赖。

  1. burstCapacity:令牌桶总容量。

  2. replenishRate:令牌桶每秒填充平均速率。

  3. key-resolver:用于限流的键的解析器的 Bean 对象的名字。它使用 SpEL 表达式根据#{@beanName}从 Spring 容器中获取 Bean 对象。

  4. 在配置文件中配置redis

redis:host: 192.168.200.128port: 6379

以上是针对每一条请求都做了限流,针对单独某一条ip做限流,需要在KeyResolver配置单独的ip。


http://chatgpt.dhexx.cn/article/07uL64iN.shtml

相关文章

钉钉企业应用网关接入(保姆级教程)

背景 在对接钉钉开放平台时, 会出现需要钉钉开放平台回调我们项目的情况. 而一般项目都被部署在公司内网. 因此, 我们需要进行内网穿透. 常用内网穿透工具对比如下表. 可以看到钉钉是在对接钉钉开放平台时, 最优的选择… 本文将详细介绍自己和钉钉企业应用网关对接和搭建的整体…

码住!SpringCloud Gateway企业级网关详解及实践分享

Spring Cloud Gateway是Spring官方基于Spring5.0、SpringBoot2.0、Netty和Project Reactor等技术开发的网关&#xff0c;旨在为微服务框架提供一种简单而有效的统一的API路由管理方式&#xff0c;统一访问接口。 Spring Cloud Gateway作为Spring Cloud生态体系中的网关&#x…

RestCloud企业级网关,支持多种协议转换和接入

RestCloud企业级网关有别于基于Nginx的流量型网关&#xff0c;需要兼容所有业务系统的各种复杂协议&#xff0c;根据不同标准和报文进行数据格式转换映射&#xff0c;提供对所有业务系统API的集中鉴权、错误预警、数据加解密、协议转换、安全防护、日志审计等核心功能。可无缝与…

企业级API网关学习总结

网关的产生背景 微服务架构演变 单体架构 所有服务集中在单个项目中&#xff0c;每次部署需要部署整个项目 好处&#xff1a; 部署简单: 由于是完整的结构体&#xff0c;可以直接部署在一个服务器上即可。技术单一: 项目不需要复杂的技术栈&#xff0c;往往一套熟悉的技术…

模糊控制算法

一.基本原理 模糊计算是依据模糊规则&#xff0c;从几个控制变量的输入得到最终输出的过程&#xff0c;可分为模糊规则库&#xff0c;模糊化&#xff0c;推理方法和去模糊化四个模块。 二.matlab代码实现 (1)建立输入输出代码 &#xff08;2&#xff09;建立规则库代码 三.运行…

PLC模糊控制之模糊化

模糊控制的模糊化方法有很多种,我们这里主要以三角隶属度函数举例来讲 %输入语言变量:实际温度y与温度设定值ySP之差e=y-ySP及其变化率e/TS,TS为采样周期; %输出语言变量:控制通过加热装置的电流的可控硅导通角的变化量u. %温控系统为一个双输入单输出的模糊控制器。 %…

遗传算法优化模糊控制规则

声明&#xff1a;本博客只是为方便交流学习&#xff0c; 不得用于任何商业用途。内容涉及知识产权&#xff0c;版权所有&#xff0c;抄袭翻版必究。 目录&#xff1a; 遗传算法优化模糊控制规则 1、 系统辨识 2、 模糊控制器 3、 遗传算法 4、 代码实现 本文将系统且贯彻分析…

模糊控制基础算法

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq_34445388/article/details/79086584 模糊控制的工作原理&#xff1a; 从模糊控制器的构成我们知道&#xff0c;输入模糊化&#xff0c;模糊推理&#xff0c;去模糊化是实施…

模糊控制算法Fuzzy controller驾驶员制动意图识别模型,模糊控制算法,很好的模糊控制算法学习的例子

模糊控制算法Fuzzy controller驾驶员制动意图识别模型&#xff0c;模糊控制算法&#xff0c;很好的模糊控制算法学习的例子&#xff0c;有word操作&#xff0c;一看就会。 ID:1430638075361666牡丹城幽默的草莓

模糊控制算法在MATLAB/SIMULINK中的应用

模糊逻辑控制简称模糊控制&#xff0c;是以模糊集合论、模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制技术。模糊控制实质上是一种非先行控制&#xff0c;从属于智能控制的范畴。模糊控制的一大特点是既有系统化的理论&#xff0c;又有大量的实际应用背景。 前面在学…

模糊控制算法实例解析(含代码)

首先来看一个实例&#xff0c;控制进水阀S1和出水阀S2&#xff0c;使水箱水位保持在目标水位O处。 按照日常操作经验&#xff0c;有以下规则&#xff1a; 1、 若当前水位高于目标水位&#xff0c;则向外排水&#xff0c;差值越大&#xff0c;排水越快&#xff1b; 2、 若当…

车辆换道决策的模糊控制算法实例

目录 一、模糊控制在换道决策应用上的概念介绍 1.1 模糊化 1.2 建立模糊规则 1.3 解模糊 二、Matlab建立模糊逻辑系统 2.1 Matlab模糊逻辑工具箱 2.2 建立模糊系统的步骤 2.3 建立换道决策的模糊逻辑系统 一、模糊控制在换道决策应用上的概念介绍 实际驾车时&#xff0c;…

模糊控制算法实例matlab程序

参考文献《智能控制——刘金锟》 以水位的模糊控制为例。如图4一4所示&#xff0c;设有一个水箱&#xff0c;通过调节阀可向内注水和向外抽水。设计一个模糊控制器&#xff0c;通过调节阀门将水位稳定在固定点附近。按照日常的操作经验&#xff0c;可以得到基本的控制规则为&am…

模糊控制算法的C++实现

在现代智能控制算法中&#xff0c;模糊控制是在实际控制系统设计中使用比较成熟的一种方法。模糊控制可以使用在一些无法建立系统模型的场合&#xff0c;根据专家经验确定模糊规则&#xff0c;实现对系统的控制。本篇文章适合对模糊控制算法有一定了解的人阅读&#xff0c;给大…

模糊控制算法基础知识

模糊控制的工作原理&#xff1a; 从模糊控制器的构成我们知道&#xff0c;输入模糊化&#xff0c;模糊推理&#xff0c;去模糊化是实施模糊控制的三个主要环节。有时根据这三个环节的作用分别称为&#xff1a;模糊器&#xff0c;模糊推理机和解模糊器。 所以要学会使用模糊控制…

控制算法(二)—— 模糊控制算法

模糊控制是以模糊集理论、模糊语言变量和模糊逻辑推理为基础的一种智能控制方法&#xff0c;它是从行为上模仿人的模糊推理和决策过程的一种智能控制算法。模糊控制首先将操作人员或专家经验编成模糊规则&#xff0c;然后将来自传感器的实时信号模糊化&#xff0c;将模糊化后的…

模糊控制(FL)算法

模糊控制算法(理论知识) 模糊&#xff08;Fuzzy&#xff09;控制是用语言归纳操作人员的控制策略&#xff0c;运用语言变量和模糊集合理论形成控制算法的一种控制。模糊控制的最重要特征是不需要建立被控对象精确的数学模型&#xff0c;只要求把现场操作人员的经验和数据总结成…

【学习笔记】模糊控制算法

本文目录 0. 前言1. 概述2. 模糊集合2.1 集合和论域2.2 模糊集合的概念2.3 模糊集合的表示方式2.4 模糊集合的运算 3. 模糊关系与模糊关系合成3.1 笛卡尔积3.2 关系与模糊关系3.3 模糊关系的运算3.4 模糊关系合成3.5 模糊变换 4. 模糊推理4.1 模糊推理规则【重要&#xff01;】…

图像处理——乘性噪声和加性噪声

加性噪声一般指热噪声、散弹噪声等&#xff0c;它们与信号的关系是相加&#xff0c;不管有没有信号&#xff0c;该类噪声是一直存在的。一般通信中把加性随机性看成是系统的背景噪声。 乘性噪声一般由信道不理想引起&#xff0c;它们与信号的关系是相乘&#xff0c;信号在它在…

给数据增加噪声

例如在POS-bp算法中增加噪声&#xff0c;优点&#xff1a;使输出更光滑从而提升网络的推理能力&#xff0c;提升泛化能力。添加样本噪声&#xff0c;使线条更光滑。 这个地方是添加了一个正太分布均值为0&#xff0c;方差为0.01的1xSamLnNum的随机数矩阵。