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网关
。
- Spring Cloud Gateway的愿景:议题材料中有一段话,表明了此项目的愿景和价值,如下图:
2.基本原理
2.1.职责
Gateway的本质就是一组路由转发规则集+按规则进行路由转发:
即,当Gateway发现:如果调用方的请求满足某些条件,则在路由转发过程中do something。
其中,在路由转发过程中do something
具备如下大颗粒的能力:
- 熔断:集成 Hystrix 断路器。
- 动态路由
- 限流
- 请求修改:修改请求的输入输出、路径重写等。
- ……
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的代码地址:
3.1.一个简单的Route配置
- 演讲人首先展示了一个简单的Route配置:
- Path=/uuid:这个断言表示客户端请求为
http://localhost/uuid
时,则匹配成功。 - uri=https://httpbin.org:表示断言匹配成功后,将客户端请求转发到
https://httpbin.org
。
- Path=/uuid:这个断言表示客户端请求为
如下是执行效果:
3.2.Host断言
- 红框:在3.1的配置基础上增加了Host断言,表示客户端请求为
http://localhost/uuid
,且http的Host=example.com,则匹配成功。 - 绿框:演示了客户端请求虽然是
http://localhost/uuid
但Host没有值时,无法匹配,进而转发失败。 - 蓝框:演示了客户端请求是
http://localhost/uuid
且Host=example.com时,成功匹配,进而转发成功。
3.3.转发过滤器
- SetPath=/uuid:表示客户端请求
http://localhost/demo
,Gateway会将此请求转发为http://httpbin.org/uuid
- 测试结果如下:
3.4.灰度发布
- Gateway支持设置路由的权重,进而实现灰度发布。
- 演讲人演示了配置了两个
Route
,如果将route1
的Weight
属性改小,将会引流到route2
,进而实现灰度发布。
3.5.熔断
- Demo中,熔断器定义5秒内接口必须返回。
- 配置文件中,使能熔断器
- 执行效果:
- 红框:如果接口在4秒内返回,Gateway正常响应
- 绿框:如果接口在10秒才能返回,Gateway熔断
4.总结
- 在本议题,演讲者Cora lberkleid展示了
Spring Cloud Gateway
的原理和Demo。 Spring Cloud Gateway
采用”断言=>过滤器链=>转发“的思想实现了API网关,开发效率不错。