栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Cloud Gateway学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Cloud Gateway学习

1.概念

        Spring Cloud Gateway是Spring Cloud的一个开源API网关项目,用于替换原有的Zuul,基于Spring5.0+Spring Boot2.0+webFlux等技术开发,性能优于Zuul。

2.为什么需要网关

        业务系统微服务改造后,如何在多个内外部系统之间实现跨系统、跨协议的服务能力开放和分享成为新的挑战:

  • 缺少应对突发流量手段   

        痛点描述:传统方式通过控制入口流量,无法解决个别服务在突发流量压力下不能正常响应的问题,导致异常快速传递到上游服务,最终导致整个系统雪崩。

        解决方案:通过 API 级流量控制、熔断、降级等服务治理功能,可以有效保障电商大促、突发事件等场景下关键服务正常运行,降低系统性风险发生概率。

  • 重复开发通用功能

        痛点描述:服务对外开放需要考虑用户认证、鉴权、限流、监控等一系列通用能力,多个服务需要重复开发相关功能,增加了开发成本,降低了开发效率。

        解决方案:通过统一认证鉴权机制、限流、监控、灰度发布等对外开放服务所需的通用功能,开发人员无需重复开发通用功能,只需专注于业务开发。

  • 非 RESTFUL 接口开放难

        痛点描述:传统基于 Web Service、gRPC 和 Dubbo RPC 等非 RESTFUL 接口标准开发的应用,无法直接对外暴露服务。

        解决方案:通过协议转化功能,支持将 Web Service、gRPC 和 Dubbo RPC 等接口以 RESTFUL 接口形式对外开放,用户无需适配开发新的接口标准。

  • 缺少API灰度发布机制

       痛点描述:随着业务发展不可避免多个版本同时在线的情况,存在多个版本管理、灰度测试等一系列问题,缺少 API 灰度发布机制,严重影响管理效率。

        解决方案:通过服务多个版本发布,支持配置各版本流量百分比、根据请求参数路由请求到不同版本,满足不同灰度版本要求。

3.核心元素 3.1路由 3.1.1概念

        网关的基本组成,由路由id(唯一)以及一系列的断言与过滤器组成。

3.1.2基本组成
  • id:路由的唯一标识
  • uri:请求最终被转发到的目标地址
  • order:路由优先级,数字越小优先级越高
  • predicates:断言数组,如果返回值为true,则转发请求到uri指定的服务
  • filters:过滤器数组,在请求传递过程中,对请求做一些修改
3.2断言 3.2.1概念

        Predicate是来自于Java8之后提供的接口,接受一个输入参数,返回一个布尔值结果,可通过使用“与或非”进行组合,是路由如何进行转发的判断条件。

3.2.2内置的断言
  • The After Route Predicate Factory
  • The Before Route Predicate Factory
  • The Between Route Predicate Factory
  • The Cookie Route Predicate Factory
  • The Header Route Predicate Factory
  • The Host Route Predicate Factory
  • The Method Route Predicate Factory
  • The Path Route Predicate Factory
  • The Query Route Predicate Factory
  • The RemoteAddr Route Predicate Factory
  • The Weight Route Predicate Factory
  • The XForwarded Remote Addr Route Predicate Factory
3.3过滤器 3.3.1概念

        路由转发请求时所经过的一系列过滤逻辑。

3.3.2生命周期
  • PRE:这种过滤器在请求被路由之前调用,一般可用来做身份验证、鉴权、流量监控、日志输出、协议转换等。
  • POST:这种过滤器在路由到微服务以后执行,一般用来为响应添加标准的HTTP Header,日志输出、流量监控、收集统计信息等
3.3.3作用范围
  • 局部过滤器GatewayFilter:作用于单个路由或者一组路由。
  • 全局过滤器GlobalFilter:作用于所有的路由,多个GlobalFilter可以通过@Order或者getOrder()指定执行顺序,order值越小优先级越高。
4.核心功能
  • API 全生命周期管理:支持 API 发布、API 下线、API 版本管理等生命周期管理功能。
  • 统一认证鉴权:支持 AK/SK、JWT 、OAuth2 等认证方式,提供网关、服务和 API 级鉴权管理功能。
  • 服务治理:支持多场景流控、静态/动态降级、超时重试、缓存和熔断等功能。
  • 服务路由:支持根据请求方法、Path、Host、Header、Query String 动态路由,以及负载均衡和版本分流。
  • 安全防护:支持 IP 黑白名单,支持 CORS 和 JSONP 跨域访问标准。
  • 协议转换:支持 Web Service 、gRPC 和 Dubbo RPC 接口转为 RESTFUL 接口对外开放。
  • 数据转换:支持请求 Header、 Query String 转换,以及请求 Path 重写。
  • 应用集成:支持以低代码可视化方式编排上百种协议类型的 API。
  • 运维监控:支持查看服务或接口调用记录和调用统计,支持自定义配置告警规则。
 5.工作流程
  • 1)客户端向Gateway发送请求,NettyWebServer接收到请求,其持有ReactorHttpHandlerAdapter,ReactorHttpHandlerAdapter#apply先将接收到的HttpServerRequest或者最终需要返回的HttpServerResponse包装转换为ReactorServerHttpRequest和ReactorServerHttpResponse,然后将它们传给HttpWebHandlerAdapter处理。
  • 2)HttpWebHandlerAdapter#handle犯法通过createExchange构造网关上下文ServerWebExchange,然后通过getDelegate方法通过委托的方式获取一些列需要处理的WebHandler。
  • 3)ExceptionHandlingWebHandler#handle处理全局异常,委托org.springframework.web.server.handler.FilteringWebHandler执行handle。
  • 4)org.springframework.web.server.handler.FilteringWebHandler执行handle。
  • 5)网关上下文被传递到DispatchHandler,DispatchHandler接收到请求,匹配HandlerMapping,此处会匹配到RoutePredicateHandlerMapping。
  • 6)RoutePredicateHandlerMapping遍历所有的route规则的predicate遍历一遍,看哪个predicate能够命中,返回org.springframework.cloud.gateway.handler.FilteringWebHandler。
  • 7)SimpleHandlerAdapter#handler执行FilteringWebHandler获取局部和全局过滤器,将两种过滤器放到一起组成过滤器链DefaultGatewayFilterChain,DefaultGatewayFilterChanin#filter然后执行过滤器链。
  • 8)HandlerResultHandler#handleResult处理结果并响应给客户端。
6.典型应用场景
  • 对外能力开放:将企业内部服务能力以标准 API 的形式开放给外部合作伙伴或第三方,与外部用户可管可控地共享服务、能力和数据,达成深度合作,共建新生态。
  • 内部业务集成:规范系统间 API 接口,快速完成企业内部系统的解耦及前后端分离,实现可观可控的相互访问。
  • 交付标准化:实现软件交付的标准化,促进交付质量,并确保软件可迭代。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号