springcloud笔记 (8) -网关 Gateway

news2024/11/19 0:21:42

网关 

出国需要过海关

网关:网络的关卡

 网关的作用

1:路由转发

2:安全控制  保护每个服务,不需要将每个暴露出去

3:负载均衡

1.没有网关:客户端直接访问我们的微服务,会需要在客户端配置很多的port,如果
user-service并发比较大,则无法完成负载均衡
2.有网关:客户端访问网关,网关来访问微服务,(网关可以和注册中心整合,通过服务名
称找到目标服务)这样只需要使用服务名称即可访问微服务,可以实现负载均衡,可
以实现token拦截,权限验证,限流等操作


 

网关的核心是一组过滤器,按照先后顺序来执行过滤操作

web三大组件 servlet、listener filter 过滤器

interceptor拦截器 springmvc主要拦截进入controller的请求

gateway的核心逻辑就是路由转发 +执行过滤器链

Gateway 和 zuul 的区别 ZuulFilter

Zuul 也是 web 网关,本质上就是一组过滤器,按照定义的顺序,来执行过滤操作 二者的区别:

1. 两者均是 web 网关,处理的是 http 请求

2. Gateway 是 springcloud 官方的组件,zuul 则是 netflix 的产品

springcloud,netflix ,alibaba(nacos,sentinel,dubbo zk,seata,rocketmq)

3. gateway 在 spring 的支持下,内部实现了限流、负载均衡等,扩展性也更强,但同时也 限制了仅适合于 Spring Cloud 套件。而 zuul 则可以扩展至其他微服务框架中,其内部没有 实现限流、负载均衡等。

4. Gateway(Netty NIO)很好的支持异步(spring5.x ,webFlux 响应式编程默认是异步的), 而 zuul1.0 仅支持同步 BIO zuul2.0 以后也支持异步了

Spring Cloud Gateway三大核心概念

Route(路由)(重点和eureka结合做动态路由)


路由信息的组成:
由一个ID、一个目的URL、一组断言工厂、一组Filter组成。
如果路由断言为真,说明请求URL和配置路由匹配。

 Predicate(断言)(就是一个返回bool的表达式)


Java8中的断言函数。lambda|
四大接口供给形,消费性,
函数型,断言型
Spring Cloud Gateway中的断言函数输入类型是Spring5.0框架中的
ServerWebExchange。Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于
Http Request中的任何信息比如请求头和参数。

Filter(过滤)(重点)


一个标准的Spring WebFilter。
web三大组件(servlet listener filter)
mvc
interceptor
Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理。
一个是针对某一个路由的filter对某一个接口做限流
一个是针对全局的filter  token  ip黑名单

gateway网关是项目级别的,nginx是服务器级别的。

 nginx就像医院的前台,gateway是一个科室的前台。

快速入门

先建一个module,再在module上建包

 

新建一个包

 

gateway-server的配置 

 直接访问80端口+path即可转发请求至对应controller

网关的集群

再改nginx配置文件

 代码方式写路由

访问localhost/guochuang,会跳转对应uri

 代码方式写路由,和配置文件不冲突,两者可以共存

动态路由

如果一个服务有100个路径,只用配置文件写就很麻烦

解决:结合eureka实现动态路由

1)在gatewayserver里添加配置,添加eureka。

改为用应用名称 

 2)将服务注册到eureka中

启动应用,访问 使用应用名称/路径即可。(再上线新服务,网关不用重启)

predicate断言工厂的使用

断言就是匹配规则,匹配上了,返回结果。匹配不上,404。

 断言 after,在这个时间点之后,才能访问。可用于如双12零点之后才可以访问这种业务场景

 

过滤

 

黑名单拦截

 

token校验 

 

gateway集成redis做限流

 

什么是限流

通俗的说,限流就是限制一段时间内,用户访问资源的次数,减轻服务器压力,限流大致分为 两种:

1. IP 限流(5s 内同一个 ip 访问超过 3 次,则限制不让访问,过一段时间才可继续访问) 2. 请求量限流(只要在一段时间内(窗口期),请求次数达到阀值,就直接拒绝后面来的访问了, 过一段时间才可以继续访问)(粒度可以细化到一个 api(url),一个服务)

本次限流模型

限流模型:漏斗算法 ,令牌桶算法,窗口滑动算法 计数器算法

入不敷出

1)、所有的请求在处理之前都需要拿到一个可用的令牌才会被处理;

2)、根据限流大小,设置按照一定的速率往桶里添加令牌;

3)、桶设置最大的放置令牌限制,当桶满时、新添加的令牌就被丢弃或者拒绝; 4)、请求达到后首先要获取令牌桶中的令牌,拿着令牌才可以进行其他的业务逻辑,处理完 业务逻辑之后,将令牌直接删除; 5)、令牌桶有最低限额,当桶中的令牌达到最低限额的时候,请求处理完之后将不会删除令 牌,以此保证足够的限流;

Spring Cloud Gateway 已经内置了一个 RequestRateLimiterGatewayFilterFactory,我们 可以直接使用。 目前 RequestRateLimiterGatewayFilterFactory 的实现依赖于 Redis,所以我们还要引入 spring-boot-starter-data-redis-reactive。

引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>

创建配置类 RequestRateLimiterConfig

 配置文件

IP地址限流 

 连续访问,会被限流。429是请求限制的意思。

按照路径限制

总结

网关可以实现跨域,路由(动态路由,负载均衡)ip 黑名单拦截,Token 的校验,对请求进行过滤(请求 参数校验) 对响应做处理(状态码,响应头) 熔断 限流

微服务的网关,可以很好地将具体的服务和浏览器隔离开,只暴露网关的地址给到浏览器 在微服务网关中,可以很好的实现校验认证,负载均衡(lb),黑名单拦截,限流等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql第三篇---响应太慢?数据库卡顿?如何优化?

Mysql第三篇—响应太慢&#xff1f;数据库卡顿&#xff1f;如何优化&#xff1f; 统计SQL的查询成本&#xff1a;last_query_cost 一条SQL查询语句在执行前需要确定查询执行计划&#xff0c;如果存在多种执行计划的话&#xff0c;MySQL会计算每个执行计划所需要的成本&#x…

联盟认证 | 聚铭网络正式成为中国反网络病毒联盟成员

近日&#xff0c;聚铭网络凭借强劲的技术实力和产品优势&#xff0c;被认证为中国反网络病毒联盟&#xff08;以下简称“ANVA联盟”&#xff09;成员单位。作为国内领先的安全运营商&#xff0c;聚铭网络一直致力于网络安全智能分析和检测&#xff0c;提供全面的信息安全防护&a…

从一个webpack loader中学习

chalk&#xff1a;给终端输出加一些自定义的样式 loader-utils&#xff1a;webpack的loader配置中会通过options传入一些用户自定义参数&#xff0c;就可以通过该包提供的getoptions()获取 node-fetch&#xff1a;Node.js的模块&#xff0c;用于从远程服务器获取数据 关于bab…

vue按特定字符串切割后端传输的图片路径

一、分隔字符 /userfiles/1/attachment/null/2023/10/13967b6b8332413f92ab67735873aa76.jpg|/userfiles/1/attachment/null/2023/10/17fd6e2c16144e66b8cd3ec495e6745f.png 后端传来图片的路径是按照 | 进行分隔的 首先在return中定义数组 在methods中添加分隔方法 //将查询…

请求转发和响应重定向

请求转发与响应重定向是什么&#xff1f; 请求转发和响应重定向是两种在HTTP协议中常见的操作&#xff0c;用于在服务器和客户端之间传递数据。 请求转发&#xff08;RequestDispatcher&#xff09;是服务器收到请求后&#xff0c;从一个资源跳转到另一个资源的操作。这种操作…

机器学习-学习率:从理论到实战,探索学习率的调整策略

目录 一、引言二、学习率基础定义与解释学习率与梯度下降学习率对模型性能的影响 三、学习率调整策略常量学习率时间衰减自适应学习率AdaGradRMSpropAdam 四、学习率的代码实战环境设置数据和模型常量学习率时间衰减Adam优化器 五、学习率的最佳实践学习率范围测试循环学习率&a…

递归方法实现字符串反转函数

递归函数是一种在函数内部调用自身的函数。它通过将复杂的问题分解成更小的子问题来解决。递归函数通常包含两部分&#xff1a;基本情况和递归调用。请使用递归方法实现字符串反转的C语言函数。 #include <stdio.h>void reverseString(char* str) {///Begin///// 递归基…

【M365运维】给从本地同步到O365的DL添加 Send As权限

【问题】在一个混合部署的M365环境里&#xff0c;邮件系统已经从本地迁移到O365&#xff0c;相关的AD用户、AD 组等账号数据也都同步到了Azure AD。用户提出要求想为一个DL 添加 Send As 权限。 由于DL是从本地迁移到O365的&#xff0c;在O365的Exchange 管理中心里进行设置时…

外汇天眼:如何快速玩转外汇市场?这个技巧你必须知道!

在外汇市场中&#xff0c;决定交易成功与否的关键在于投资者的技能和知识扎不扎实&#xff0c;这对投资者获取利润至关重要。然而对于投资者来说&#xff0c;外汇交易市场又是一个复杂且多变的市场&#xff0c;要在外汇市场中获得成功并不容易&#xff0c;需要深入地了解、不断…

leetcode每日一题复盘(10.23~10.29)

leetcode 450 删除二叉搜索树中的节点 见到二叉搜索树第一时间就应该想起用中序遍历,知道中序遍历之后接下来想如何删除节点了(左右遍历根据节点大小决定向左向右移动) 遍历找不到目标节点,就不用进行操作直接返回根节点就好了 当遍历找到要删除的节点(root)时,根据子树情况…

MES管理系统的生产模块与ERP有何差异

随着信息化技术的不断发展&#xff0c;企业对于生产管理系统的要求也日益提高。MES生产管理系统和ERP系统都是企业生产管理的重要工具&#xff0c;而它们的生产模块存在一些差异。 首先&#xff0c;MES管理系统的生产模块更加注重于生产过程的实时管理和控制。它可以通过数据采…

我试图扯掉这条 SQL 的底裤。只能扯一点点,不能扯多了

之前不是写分页嘛,分页肯定就要说到 limit 关键字嘛。 然后我啪的一下扔了一个链接出来: https://dev.mysql.com/doc/refman/8.0/en/limit-optimization.html 这个链接就是 MySQL 官方文档,这一章节叫做“对 Limit 查询的优化”,针对 limit 和 order by 组合的场景进行了较…

如何提高广告投放转化率?Share Creators 资产库与Appsflyer营销数据的全面结合

如何提高广告投放转化率&#xff1f;Share Creators 资产库与Appsflyer营销数据的全面结合 全球经济进入了低迷期。 营销成本越来越高&#xff0c; 营销需要更务实&#xff0c;注重投入产出比。众所周知&#xff0c;除了渠道、客群画像以外&#xff0c; 优秀的广告设计图&#…

Cesium冷知识:Sandcastle新增示例组

Cesium.js的SandCastle中有很多示例 他们根据不同类型分为不同的组 在cesium.js的源码中&#xff0c;把示例的 <meta content"自己定义新的组名">值改为自定义的组名 然后执行npm run build&#xff0c;就可以创建出一个新的组 这种方法在下面这些Cesium.js版…

c语言进阶部分详解(详细解析自定义类型——结构体,内存对齐,位段)

上篇文章介绍了一些常用的字符串函数&#xff0c;大家可以去我的主页进行浏览。 各种源码大家可以去我的github主页进行查找&#xff1a;Nerosts/just-a-try: 学习c语言的过程、真 (github.com) 今天要介绍的是&#xff1a;结构体的相关内容 目录 一.结构体类型的声明 1.…

Jmeter之处理session、cookie以及如何做关联

session和cookie的概念 按照我的理解就是&#xff1a; cookie保持你访问的权限信息。 session限制你访问权限信息的有效时间&#xff0c;一旦过期就不能在访问了&#xff0c;比如说我们经常遇到了&#xff0c;很长一段时间网页没有去操作&#xff0c;就会自动退出登陆。你要…

ZooKeeper下载、安装、配置和使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

node-red常用包分析

node-red-contrib-opcua Use OpcUa-Item to define variables. Use OpcUa-Client to read / write / subscribe / browse OPC UA server. 需要想通过OpcUa-Item节点来指定一个数据点。 触发器-->opcua_item----->opcua_client opcua_client的Action项解析&#xff1a; …

LVS负载均衡集群+NAT部署

集群的概念和目的 集群的定义 Cluster&#xff0c;集群&#xff08;也称群集&#xff09;由多台主机构成&#xff0c;但对外只表现为一一个整体&#xff0c;只提供一-个访问入口(域名或IP地址)&#xff0c; 相当于一台大型计算机。 集群的作用 对于企业服务的的性能提升一般…

感觉真的要被淘汰了,工作3年,不懂自动化,看着公司的新员工都是自动化岗....

这两天和朋友谈到软件测试的发展&#xff1a;这一行的变化确实蛮大&#xff0c;从开始最基础的功能测试&#xff0c;到现在自动化、性能、安全乃至于以后可能出现的大数据测试、AI测试岗位需求逐渐增多。我也在软件测试这行摸爬滚打了十年了&#xff0c;正好有朋友问我&#xf…