Spring Cloud Gateway 网关限流

2024-05-13

1. Spring Cloud Gateway 网关限流

 在我们平时开发过程中,一般一个请求都是需要经过多个微服务的, 比如: 请求从A服务流过B服务,如果A服务请求过快,导致B服务响应慢,那么必然会导致系统出现问题。因为,我们就需要有限流操作。
                                           限流的key 生成规则,默认是  PrincipalNameKeyResolver 来实现   限流算法,默认是  RedisRateLimiter 来实现,是令牌桶算法。
   在 Spring Cloud Gateway 中默认提供了  RequestRateLimiter  过滤器来实现限流操作。
                                                                                                                            配置文件中的写法(部分) 
    配置文件中的写法(部分) 
    注意⚠️:    这个类需要加上  @Primary  注解。
    https://gitee.com/huan1993/spring-cloud-alibaba-parent/tree/master/gateway-redis-limiter 
   1、 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-redis-ratelimiter 

Spring Cloud Gateway 网关限流

2. SpringCloud—网关简述

 API网关的出现的原因是微服务架构的出现,不同的微服务一般有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成完成一个业务需求,如果让客户端直接与各个微服务通信,会出现以下的问题。
    以上的问题可以借助API网关来解决。API网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过API网关这一层。也就是说,API网关可以完成安全、性能、监控等功能,而服务提供者可以专门的完成具体的业务逻辑。 
                                           在生产环境中,一般需要部署高可用的API网关集群来避免单点故障,这里有两种部署方案。(以Zuul举例)
   这种情况是比较简单的,即多个Zuul客户端注册到Eureka Server上,就可以实现Zuul的高可用。Zuul客户端会从Eureka Server查询Zuul Server列表,然后使用负载均衡组件(Ribbon)请求Zuul集群。
                                           假如我们的客户端是手机APP,那么是客户端是不能注册到Eureka Server上。这种情况下,我们可以使用额外的负载均衡器来实现Zuul的高可用,例如Nginx,F5等。
   相关nginx请参考: nginx从入门到精(fang)通(qi) 
                                           客户端将请求发送到负载均衡器,负载均衡器将请求转发到其代理的其中一个Zuul节点上。这样就实现了Zuul节点的高可用。
    API网关性能分析 

3. 又被面试官装到了:Spring Cloud Gateway 网关限流怎么做?

 在我们平时开发过程中,一般一个请求都是需要经过多个微服务的, 比如: 请求从A服务流过B服务,如果A服务请求过快,导致B服务响应慢,那么必然会导致系统出现问题。因为,我们就需要有限流操作。
                                           限流的key 生成规则,默认是 PrincipalNameKeyResolver来实现 限流算法,默认是 RedisRateLimiter来实现,是令牌桶算法。
   在Spring Cloud Gateway中默认提供了 RequestRateLimiter 过滤器来实现限流操作。
    1.引入jar包 
    2.编写配置文件 
                                            3.网关正常响应 
                                            4.网关限流响应 
                                            1.自定义限流key 
    配置文件中的写法(部分) 
    2.自定义限流算法 
    配置文件中的写法(部分) 
    注意⚠️:  这个类需要加上 @Primary 注解。
    3.配置文件中的写法 

又被面试官装到了:Spring Cloud Gateway 网关限流怎么做?

4. gateway网关使用

  准备 
   搭建一个eureka服务器和一个普通web模块,然后搭建网关模块。。
   依赖:
   使用很方便,有两种配置方式,一种是配置文件,一种是注入Bean
   简单入门
   打开浏览器 http://localhost:9527/payment/get/1 可以查询到结果
   相同功能的bean配置也非常简单
   将测试结构变成一个服务集群,一个eureka7001+服务提供者8000+服务提供者8001。默认情况下Gateway会根据注册中心注册的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能(不写死地址)。
   修改yml文件开启动态路由
   全部yml
   等价于yml开启动态路由后
   访问 http://localhost:9527/payment/get/1 ,发现可以实现基本的轮询负载均衡8000/8001    注意    Gateway的负载均衡依然使用的是ribbon,按照ribbon的加 @RibbonClient 注解的配置就好
   bean中多个predicate可以用and方法连接

5. 什么叫网关(gateway)?

网关
 网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同时,网关也可以提供过滤和安全功能。大多数网关运行在OSI 7层协议的顶层--应用层。 
大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。 
按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。 
那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程。 
所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。

在和 Novell NetWare 网络交互操作的上下文中,网关在 Windows 网络中使用的服务器信息块 (SMB) 协议以及 NetWare 网络使用的 NetWare 核心协议 (NCP) 之间起着桥梁的作用。网关也被称为 IP 路由器。


计算机主机网关的作用是什么?

假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。

但是你不被允许走出大门,你想与外界发生的一切联系,都必须由门口的李大爷(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家的院子里也有一个看门的王大爷(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器。于是你在家里拨通了门口李大爷的电话,有了下面的对话:

小不点:李大爷,我想找班主任查一下小明的电话号码行吗?

李大爷:好,你等着。(接着李大爷给你的班主任挂了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99

小不点:太好了!李大爷,我想找小明,你再帮我联系一下小明吧。

李大爷:没问题。(接着李大爷向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家那个院子的王大爷那里,然后王大爷把电话给转到小明家)

就这样你和小明取得了联系。


解决跨网关技术 

现行的IPV4的IP地址是32位的,根据头几位再划分为A、B、C三类地址;但由于INTERNET的迅猛发展,IP资源日渐枯竭,可供分配的IP地越来越少,跟一日千里的INTERNET发展严重冲突,在IPV6还远未能全面升级的情况下,惟有以代理服务器的方式,实行内部网地址跟公网地址进行转化而实现接入INTERNET。 

中介作用的代理服务器就是一个网关,也就是这个网关带给现阶段的多媒体通讯系统无尽的烦恼。在IP资源可怜的情况下,惟有以网关甚至多层网关的方式接入宽带网, 因为多媒体通讯系统的协议如H.323等要进行业务的双方必须有一方有公网的IP地址,但是现在的宽带有几个用户能符合这个要求?microsoft的NETMEETING等等多媒体通讯系统就是处于这种尴尬的位置;跨网关成为头疼的难题。 

跨网关: 网络数据通过层层网关,受制于网关节点速度,网络速度大大降低。 跨网关技术基于底层网络协议,突破网关瓶颈,实现客户点对点交流。   

网关的类型
1、传输网关。传输网关用于在2个网络间建立传输连接。利用传输网关,不同网络上的主机间可以建立起跨越多个网络的、级联的、点对点的传输连接。
2、应用网关。应用网关在应用层上进行协议转换。例如,一个主机执行的是ISO电子邮件标准,另一个主机执行的是Internet 电子邮件标准,如果这两个主机需要交换电子邮件,那么必须经过一个电子邮件网关进行协议转换,这个电子邮件网关是一个应用网关。

什么叫网关(gateway)?