微服务:Gateway

发布时间 2023-11-17 10:31:31作者: ShineLe

学习自:SpringCloud Gateway 简介、工作流程、快速入门_springcloud工作流程_豆恭梓的博客-CSDN博客

建议与微服务:Eureka原理关联查看。

1、网关

网关位于微服务最边缘直接暴露给用户,作为用户微服务的桥梁。

没网关:C端直接通过完整的IP:Port/url来访问微服务,需要在C端配置很多IP:Port,这在服务并发大的情况下,无法完成负载均衡

有网关C端访问网关,网关访问微服务。Gateway通常与Eureka(注册中心)整合,通过服务名就能找到目标IP:Port,这样在访问服务时只需要服务名称,可以实现负载均衡,还可以实现token拦截、权限验证、限流等操作。

2、SpringCloud Gateway工作流程

  1. C端向SpringCloud Gateway发出请求;
  2. 在Handler Mapping中找到与请求相匹配的路由,之后该请求会发往Gateway Web Handler;
  3. Handler通过指定的过滤器Filter将请求发到实际的服务的业务逻辑(Proxied Service),之后返回。Filter之间存在虚线是因为Filter可能会在发送请求前(Pre)、后(Post)执行业务逻辑,对其进行加强处理

Pre类型的Filter可以做参数校验、权限校验、流量监控、日志输出、协议转换等;

Post类型的Filter可以做响应内容、header的修改、日志输出、流量监控

总之,Gateway的核心逻辑是:路由转发、执行过滤器链

3、SpringCloud Gateway三大概念

1)Route-路由(和Eureka结合成为动态路由)

Gateway和Eureka结合可以做成动态路由

一个Route由以下信息组成:ID、目的URL、一组断言工厂、一组filter。

如果路由断言为True,说明请求的URL与配置路由相匹配。

2)Predicate(断言)(一个返回Bool的表达式)

Java 8中的断言函数

SpringCloud Gateway的断言函数允许开发者去定义匹配来自于HTTP请求中的任何信息,比如请求头参数

3)Filter(过滤)

一个标准的Spring WebFilter。

SpringCloud Gateway中的Filter分为两种类型:Gateway Filter和Global Filter。

Filter会对请求、响应进行修改处理:

  • Gateway Filter针对某个路由的Filter对某个接口做限流;
  • Global Filter针对全局的Filter token ip黑名单。

4、Nginx和Gateway的区别

  • Nginx在做路由、负载均衡、限流之前,需要修改nginx.conf配置文件,将负载均衡、路由、限流规则加入其中;
  • Gateway和Eureka高度集成,实现自动路由;和Ribbon结合,实现负载均衡;也能轻易实现限流】权限认证
  • Nginx用C编写,Gateway用Java编写,Nginx性能更高;
  • Nginx用于服务器级别,Gateway用于项目级别