2

谐云产品总监高家祺:企业级Spring Cloud Gateway网关优化实践

 1 year ago
source link: https://blog.csdn.net/m0_46700908/article/details/126416764
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
86ca84f21601aa5783d2dbc9eaeeaa07.gif

嘉宾 | 高家祺  整理 | 黄文勤

出品 | CSDN云原生

时下,网关作为微服务架构的组成部分,发挥着举足轻重的作用。Spring Cloud Gateway是Spring官方基于Spring5.0、SpringBoot2.0、Netty和Project Reactor等技术开发的网关,旨在为微服务框架提供一种简单而有效的统一的API路由管理方式,统一访问接口。

2022年7月26日,在CSDN云原生系列在线峰会第14期“Spring Cloud峰会”上,谐云产品总监高家祺分享了《企业级Spring Cloud Gateway网关优化实践》。

1c40f0d035f524051645f8172aa08e32.png

Spring Cloud Gateway核心原理

Spring Cloud Gateway和其他网关对比,展现出五个核心特点:

  • 采用非阻塞IO网络框架支撑;

  • 与Spring Cloud生态组件无缝集成,符合大部分业务系统的集成需求,成本低;

  • 基于WebFlux响应式Web模型,事件驱动与非阻塞IO结合,满血使用CPU性能,性能吞吐量更优秀;

  • 只需掌握Route原理,会编写Filter即可上手网关开发;

  • 基于Spring Boot Actuator提供完整开箱即用的生产级监控。

由此可见,Spring Cloud Gateway是一款定位面向业务友好的网关。

451a98011306387f1e5c5ca9aec02d2f.png

Spring Cloud Gateway主要由三部分组成:

  • Route(路由):即一套路由规则,是集URI、Predicate、Filter等属性为一体的元数据类;

  • Predicate(断言):可以参考Java8函数断言,看作是满足什么条件时,Route规则生效,它允许开发者去定义匹配来自于Http Request中的任何信息,如请求头或者请求参数;

  • Filter(过滤器):Filter针对请求和响应进行增强、修改处理。Filter可以认为是Spring Cloud Gateway最核心的模块,熔断、安全、逻辑执行、网络调用都是Filter来完成的,其中又细分为Gateway Filter和Global Filter。 

Spring Cloud Gateway的核心原理,可以从宏观和微观两个方面进行分析。

7652c4eede0d9a3b58a14a94c6bdf34f.png

从宏观上看,SpringCloud Gateway作为内部网络与外部应用的衔接器,是所有访问内部网络流量必须统一经过网关的入口,以此避免外部不受控的非法访问,增强内部安全性。在实现内部衔接的过程中,首先,需要建立内部微服务纳管的协议。其次,网关与外部微服务也建立起统一的访问协议。在整个访问过程中,网关在路由策略、协议转换、过滤、API组合等方面发挥着重要作用。

从微观上看,在整个过程中,有一个SeverWebExchange的上下文,将Header、Path、RequestBody、RequestParam、Status、Response放入后,即可从SeverWebExchange内拿到想要的信息。

fad48ee301195cb7f3bb16de264bb147.png

如上图所示,通过一次请求的调用流程来看Spring Cloud Gateway的核心原理。

  • RoutePredicateHandlerMapping:通过lookupRoute方法,对路由逐个正则匹配,找到第一个可以匹配的Route路由。

  • FilteringWebHandler:创建过滤器链,按顺序调用Filter。Filter分为PreFilter前置过滤器和PostFilter后置过滤器。

  • 整个请求的调用流程,通过ServerWebExchange作为上下文贯穿启动。对于一次请求的信息从ServerWebExchange获取,修改则保存在ServerWebExchange中。但基于Reactive特性,ServerWebExchange是只读的,修改Exchange需重新builder。 

Spring Cloud Gateway路由条件匹配器是一个断言,根据Http Request中的请求报文来进行匹配,当满足条件则路由生效。它提供了12种路由匹配方式,分别是After、Before、Between、Cookie、Header、Host、Path、Method、Query、RemoteAddr、Weight、XForward。

8e38ea07bb5e44c27d97e47e8bda0120.jpeg

Spring Cloud Gateway的路由过滤器针对HTTP请求报文中的Header、Body、Param等元素进行操作。最新的Spring Cloud Gateway版本内置了32种Filter拓展。

c6c2d3ceb9b144247aef0ccb0d0adc8d.png

过滤器的应用主要体现在八个方面:

  • 对于请求报文(Header、Path、Param、Body)进行设值、添加、修改、删除、缓存等操作,根据修改的环节又分为请求与响应;

  • 对网关流量计数,实现熔断限流功能;

  • 设置请求重定向地址;

  • 设置请求状态;

  • 保存Session;

  • 请求重试;

  • 设置请求大小;

  • Token传递。

93b04be35984f74bc5682af708ba5653.png

Spring Cloud Gateway优化实践

Spring Cloud Gateway的优化实践,可以从路由匹配性能优化、动态路由、弹性架构、服务发现、多协议转换、网关鉴权、标准接口定义这七个方面来看。

313413f11b37b09a129da8626a8cfbf9.png

在路由匹配性能优化方面:

采用MRU算法维护一个最近常用的繁忙队列,先在常用路由匹配路由规则。引入路由层级逐层进行匹配,即先进行第一级路径匹配,再逐个匹配。

920ba28b0f5852a1de3bc731d8ba6885.jpeg

在动态路由方面:

通过拓展RouteLocator组件实现CachingRouteLocator,允许每个网关实例到“配置中间件”获取路由定义信息,配置中间件可以是Nacos、Redis、Zookeeper等。动态路由作为网关控制分离的重要实现方式,支持集中管理路由规则,弹性扩展实例。

eacd73c5d267f992864b015e822ecc7c.png

在弹性架构方面:

针对网关Broker数据面进行组织分化形成共享微服务网关、专有微服务网关、特性微服务网关,实现企业级业务系统的网关集中化管理的同时实现网关分布式化,避免单点故障,又满足不同业务系统不同路由策略、协议、业务流量情况的需求,同时以特性微服务网关来提供对Nginx、Kong、Envoy的适配。

2532588270eac6a2d6e566c558a3d761.png

在服务发现方面:

服务发现模块拓展Spring Cloud Gateway现有的LoadBalancerClientFilter实现,通过便携轻量级的NacosClient、EurekaClient、K8sClient、OpenshiftClient统一多种注册中心的服务发现模式,并支持灵活配置,通过GatewayDiscoveryClient抽象统一返回ServiceList。

b75781017c2d5c6312bd18dd996034cc.png

在多协议转换方面:

协议转换需要将Gateway进入的Http协议进行转换,适配支持Dubbo、WebService、gRPC协议,将协议转换拆分为三个组件来实现,如对于Dubbo协议由Http2Dubbo转换器、DubboInvoker调用器、DubboWriteResponse响应适配器组成。

5773f14bd72fe25454fe3cf62fb693d9.png

在网关鉴权方面:

网关在微服务架构中是鉴权的最佳实现方式,具有非侵入、易维护的特点。鉴权可分为Token校验、权限验证、数据权限验证、操作记录几个步骤,实现业务系统的安全增强。

d05a7f53dd35a34b1a775ebe8b024890.png

在标准接口定义上:

API网关里有一些较常用的功能。

  • 接口调试。网关数据面Broker代理内部微服务,承接来自外部流量的请求;对于接口调试场景,Console服务将用户请求翻译成标准Http格式协议,Broker实时感知请求并调试目标服务,返回调试结果。

  • 流量录制。对于网关经过的请求,在网关通过请求转换接口定义来获得接口定义录制,随后可以随时发起流量回放,用来排查问题或者自动化测试。

  • 流量复制。对于网关经过的请求,网关如果开启流量复制策略,则首先将流量转换为接口定义,再下发转发到对应的微服务。

6f5742c1506d37e5d2b8f7b3cf0763e9.png

企业级网关的应用场景

场景一:微服务网关

5bb719f2733306a56253fe72695ac65f.jpeg

主要作用体现在:

  • 通过API网关,将所有微服务接入网关,并实现微服务之间的互通互访;

  • 微服务系统所有API接口服务的请求接入点,统一流量入口;

  • 统一由网关进行路由转发、认证鉴权安全工作;

  • 提供微服务间、微服务与外部访问的负载均衡、限流、熔断等治理功能。

场景二:业务系统集成

a5bdb9c98cb550ff132e7c12784e6ef6.jpeg

主要作用体现在:

  • 业务服务的接入聚合点;

  • 规范化、标准化纳管各业务系统接口,快速完成企业内部系统的解耦及前后端分离;

  • 对不同系统接口进行协议适配和转化,满足不同客户端需求;

  • 复用已有能力,避免重复性开发;

  • 实现可观可控的相互访问。

场景三:企业能力开放

c7a2f549e7016165e2a843010a76c27c.png

主要作用体现在:

  • 通过API网关将企业内部服务能力以标准API的形式开放给合作伙伴、开发者;

  • 与外部用户可管可控地共享服务、能力和数据,达成深度合作,共建新生态。

场景四:接口生命周期管理

af90b54ee84ce41e830a0e7e4f233c46.jpeg

主要作用体现在:

  • 解决开发团队面临的协作开发、接口文档管理、在线测试等问题;

  • 定义Mock接口,使得接口调用方与接口开发者解耦,实现同步工作;

  • 实现软件开发的标准化,提升交付质量,并确保软件可迭代。 

场景五:架构治理

dcd09d570541d64361541f68ff0cfc8f.png

主要作用体现在:

  • 解决企业级服务治理问题,管理微服务调用关系、接口定义、服务分层;

  • 在UAT环境,服务需统一注册在API网关,经过网关调用目标服务,服务调用关系需经过申请;

  • 架构管理员可以进行服务访问审批、接口定义审批、拓扑分析复查;

  • 实现软件开发的标准化,分层清晰合理,从源头实现微服务架构治理。

d670d330917c728258a1c469887694da.png

总结

总的来说,如今Spring Cloud Gateway经过优化迭代后,应用场景日益丰富,不断满足开发者的需求,已经成为应用开发中的一柄利器。


本片文章整理来自@黄文勤,由CSDN修订完成 。

想要参与到专家技术分享的一手整理过程中并获得相应权益吗?关注【CSDN云原生】公众号并回复关键词“志愿者”了解详情,我们期待你的加入~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK