SpringOne 2022第3个议题《Protect Your Microservices with Spring Cloud Gateway》,主要展示Spring Cloud Gateway的特性,演讲者:Cora lberkleid。

1.项目简介

  • Spring Cloud Gateway不是一个新项目:它能入选SpringOne 2022的议题,应该是它的确非常实用。

PS:SpringOne的每个议题不一定都是讲新技术,演讲者也很接地气(不太甩大词和抛概念),赞!

  • Spring Cloud Gateway的架构地位:在整个架构中的位置是API网关

image-20230207101213825

  • Spring Cloud Gateway的愿景:议题材料中有一段话,表明了此项目的愿景和价值,如下图:

image-20230207103316835

2.基本原理

2.1.职责

Gateway的本质就是一组路由转发规则集+按规则进行路由转发

即,当Gateway发现:如果调用方的请求满足某些条件,在路由转发过程中do something。

其中,在路由转发过程中do something具备如下大颗粒的能力:

  • 熔断:集成 Hystrix 断路器。
  • 动态路由
  • 限流
  • 请求修改:修改请求的输入输出、路径重写等。
  • ……

image-20230207105042685

2.2.How it works?

  • Gateway提出了3个架构概念Route(路由)Predicate(断言)Filter(过滤器)
  • 这3个架构概念的关系是:1个Route(路由)配置=N个Predicate(断言)+N个Filter(过滤器)+1个URI
  • 路由匹配和路由转发的过程:
    • STEP1.Gateway拦截到Client侧的请求。
    • STEP2.用STEP1拦截到的请求去匹配Route(路由)中的Predicate(断言)
    • STEP3.如果STEP2成功匹配到某个Route(路由)配置,则将STEP1拦截到的请求转发到该Route(路由)配置中的URI上。
    • STEP4.在转发到目标URI的过程中,执行该Route(配置)中的N个Filter(过滤器)

3.Demo

演讲人Cora lberkleid现场演示了如何使用Spring Cloud Gateway快速开发1个API网关,Demo的代码地址:

https://github.com/ciberkleid/spring-cloud-gateway-sample

3.1.一个简单的Route配置

  • 演讲人首先展示了一个简单的Route配置:
    • Path=/uuid:这个断言表示客户端请求为http://localhost/uuid时,则匹配成功。
    • uri=https://httpbin.org:表示断言匹配成功后,将客户端请求转发到https://httpbin.org

image-20230207111959581

如下是执行效果:

image-20230207114627396

3.2.Host断言

  • 红框:在3.1的配置基础上增加了Host断言,表示客户端请求为http://localhost/uuid,且http的Host=example.com,则匹配成功。
  • 绿框:演示了客户端请求虽然是http://localhost/uuid但Host没有值时,无法匹配,进而转发失败。
  • 蓝框:演示了客户端请求是http://localhost/uuid且Host=example.com时,成功匹配,进而转发成功。

image-20230207114804353

3.3.转发过滤器

  • SetPath=/uuid:表示客户端请求http://localhost/demo,Gateway会将此请求转发为http://httpbin.org/uuid
  • 测试结果如下:

image-20230207135559062

3.4.灰度发布

  • Gateway支持设置路由的权重,进而实现灰度发布。

image-20230207140904664

  • 演讲人演示了配置了两个Route,如果将route1Weight属性改小,将会引流到route2,进而实现灰度发布。

image-20230207141250833

3.5.熔断

  • Demo中,熔断器定义5秒内接口必须返回。

image-20230207142305789

  • 配置文件中,使能熔断器

image-20230207142345120

  • 执行效果:
    • 红框:如果接口在4秒内返回,Gateway正常响应
    • 绿框:如果接口在10秒才能返回,Gateway熔断

image-20230207142641006

4.总结

  • 在本议题,演讲者Cora lberkleid展示了Spring Cloud Gateway的原理和Demo。
  • Spring Cloud Gateway采用”断言=>过滤器链=>转发“的思想实现了API网关,开发效率不错。