【微服务】SpringCloudGateWay
API 网关
API
网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API
网关封装了系统内部架构
,为每个客户端提供一个定制的
API
。它可能还具有其它职责,如身份验证
、监控
、负载均衡
、缓存
、请求分片与管理
、静态响应
处理。API
网关方式的核心要点是,所有的客户端和消费端都通过
统一的网关接入微服务,在网关层处理所有的非业务功能
。通常,网关也是提供 REST/HTTP 的访问 API
网关
功能
1)性能:API高可用,负载均衡,容错机制
2)安全:权限身份认证,脱敏,流量清洗,后端签名(保证全链路可信调用)
黑名单:(非法调用的限制)
3)日志:日志记录(spainid,traceid)一旦涉及分布式,全链路跟踪必不可少
4)缓存: 数据缓存
5)监控:记录请求响应数据,api耗时分析,性能监控
6)限流:流量控制,错峰流控,可以定义多种限流规则
7)灰度:线上灰度部署,可以减少风险
8)路由:动态路由规则
比较流行的网关:
目前比较流行的网关有:Nginx、Kong、0range 等等
还有微服务网关zuul,spring cloud gateway等等
Spring Cloud Gateway
既然有 Nginx 这样成熟的网关,那为什么还需要 Gateway 呢?
1)像
Nginx 这类网关
,性能肯定是没得说,它适合做那种门户网关
,是作为整个全局的网关
,是对外的,处于最外层的
;而
Gateway
这种,更像是业务网关
,主要用来对应不同的客户端提供服务
的,用于聚合业务
的。各个微服务独立部署,职责单一,对外提供服务的时候需要有一个东西把业务聚合起来。
2)像 Nginx 这类网关,都是用不同的语言编写的,不易于扩展;而 Gateway
就不同,它是用 Java 写的,易于扩展和维护
3)这类网关可以实现熔断、重试
等功能,这是 Nginx
不具备的
4)Spring cloud已经放弃Netflix zuu1了
。现在Spring
cloud中引用的还是 Zuul
1.x版本,而这个版本是基于过滤器的,是阻塞 I0,不支持长连接
。zuu1
2.x版本跟
1.x的架构大一样,性能也有所提升。既然 Spring cloud 已经不再集成 Zuul 2.x了
,那么是时候开始使用
Spring cloud Gateway 了。