springcloud笔记 (8) -网关 Gateway

网关 

出国需要过海关

网关:网络的关卡

 网关的作用

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.rhkb.cn/news/168146.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

用“价值”的视角来看安全:《构建新型网络形态下的网络空间安全体系》

文章目录 写在前面安全认知的硬核概念威胁的演化路径与发展趋势构建网络空间安全体系好书推荐 写作末尾 写在前面 网络空间安全体系是建立在先进技术、严密监控和综合策略之上的综合性框架&#xff0c;旨在保护网络免受恶意攻击、数据泄露和网络犯罪的威胁&#xff0c;其核心包…

window11安装Python环境

python环境安装 访问Python官网:https://www.python.org/ 点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS/Linux等) 选择下载最新版本的Python cmd命令如果出现版本号以及>>>则表示安装成功 如果出现命令行中输入python出现如下错误 可能…

现在大火的低代码是怎么回事?进来聊聊低代码

一、前言 开发过程中&#xff0c;只是觉得前端后端合起来&#xff0c;有很多冗余信息&#xff0c;被代码一遍遍重复表达&#xff0c;是一件很枯燥、无聊的事情。 这些枯燥的重复工作&#xff0c;完全可以由机器来做&#xff0c;以便解放出我们的时间&#xff0c;来做更有价值的…

wordpress搬家后,更改固定链接404文章无法打开,找不到网页与解决办法

出现这个问题的原因可能是服务没有设置伪静态设置&#xff0c;需要配置nginx服务器或者apach服务器 1.问题描述 WordPress中修改固定链接&#xff0c;如下。 保存后再打开网页出现类似于如下404错误。 2.解决办法 打开Nginx的配置文件(如果你没有自己写过那就是默认的nginx.…

sql server2014如何添加多个实例 | 以及如何删除多个实例中的单个实例

标题sql server2014如何添加多个实例 前提&#xff08;已安装sql server2014 且已有默认实例MSSQLSERVER&#xff09; 添加新的实例 其实就是根据安装步骤再安装一次&#xff08;区别在过程中说明&#xff09; 双击安装 选择“全新独立安装或添加现有功能” 然后下一步下一…

博客后台模块续更(五)

十一、后台模块-菜单列表 菜单指的是权限菜单&#xff0c;也就是一堆权限字符串 1. 查询菜单 1.1 接口分析 需要展示菜单列表&#xff0c;不需要分页。可以针对菜单名进行模糊查询。也可以针对菜单的状态进行查询。菜单要按照父菜单id和orderNum进行排序 请求方式 请求路径…

【数据结构】——二叉树的基础知识

数概念及结构 数的分类 二叉树、多叉树 数的概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做树的原因是它看起来像一颗倒挂的树&#xff0c;也就是说它是跟朝上&#xff0c;而叶朝下的。 有一个特殊的节点&…

java读取指定文件夹下的全部文件,并输出文件名,文件大小,文件创建时间

import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.*; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { try { Path startingDir Paths.get("你的目…

Spring中动态代理设计模式

目录 一、什么是动态代理 二、动态代理开发步骤 2.1 搭建开发环境 2.2 具体过程 三、动态字节码技术 四、动态代理开发简化代理开发 一、什么是动态代理 其实不管是静态代理还是动态代理其本质都是一样的&#xff0c;都是通过代理类为目标类增加额外功能&#xff0c;从而方便目…

自然语言处理---Transformer模型

Transformer概述 相比LSTM和GRU模型&#xff0c;Transformer模型有两个显著的优势&#xff1a; Transformer能够利用分布式GPU进行并行训练&#xff0c;提升模型训练效率。 在分析预测更长的文本时&#xff0c;捕捉间隔较长的语义关联效果更好。 Transformer模型的作用 基于seq…

蓝桥杯每日一题0223.10.23

第几天 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 简单枚举&#xff08;用k来记录经过的天数&#xff09; #include<bits/stdc.h> using namespace std; bool is_ren(int n) {if(n % 400 0 || (n % 4 0 && n % 100 ! 0))return true;return false; } int …

【Android知识笔记】Webview专题

WebView 核心组件 类名作用常用方法WebView创建对象加载URL生命周期管理状态管理loadUrl():加载网页 goBack():后退WebSettings配置&管理 WebView缓存:setCacheMode() 与JS交互:setJavaScriptEnabled()WebViewClient处理各种通知&请求事件should

为什么红黑树比AVL树效率高?

文章目录 前言红黑树的提出都知道的几个定义理解红黑树的高效总结 前言 红黑树为什么这么火呢&#xff1f;大家应该都很清楚&#xff0c;面试的时候不管三七二十一&#xff0c;就问你&#xff1a;什么是红黑树&#xff0c;为什么要用红黑树&#xff1f;就好像他很懂&#xff0…

CUDA学习笔记5——CUDA程序错误检测

CUDA程序错误检测 所有CUDA的API函数都有一个类型为cudaError_t的返回值&#xff0c;代表了一种错误信息&#xff1b;只有返回cudaSuccess时&#xff0c;才是成功调用。 cudaGetLastError()用来检测核函数的执行是否出错cudaGetErrorString()输出错误信息 #include <stdi…

项目快讯|深汕特别合作区气膜羽毛球馆正式开工

“永不坍塌”的气膜运动馆 “安全”是每个行业可持续发展的核心原则、是每个企业长久生存的重要底线、是每个人追求幸福生活的基本保障。 任何新行业、新技术、新材料、新工艺的发展都需要逐步规范化的企业标准、行业标准、国家标准。 气承膜技术发展的初期&#xff0c;面临行业…

springboot+vue基于Spark的共享单车数据存储系统的设计与实现【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain----《BadNets:识别机器学习模型供应链中的漏洞》 背景&#xff1a; 许多用户将训练过程外包给云计算&#xff0c;或者依赖于经过训练的模型&#xff0c;然后根据特定的任务对模型进行微调。这…

【python】机器学习-K-近邻(KNN)算法

目录 一 . K-近邻算法&#xff08;KNN&#xff09;概述 二、KNN算法实现 三、 MATLAB实现 四、 实战 一 . K-近邻算法&#xff08;KNN&#xff09;概述 K-近邻算法&#xff08;KNN&#xff09;是一种基本的分类算法&#xff0c;它通过计算数据点之间的距离来进行分类。在…

TCP--拥塞控制

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 TCP中另一个重要的点就是拥塞控制&#xff0c;TCP是无私的当它感受到网络拥堵了&#xff0c;就…