《重新定义Spring Cloud实战》——1.2.6 Spring Cloud与网关中间件
1.2.6 Spring Cloud与网关中间件
1.网关中间件概述
API Gateway(APIGW/API网关),顾名思义,是出现在系统边界上一个面向API的、串行集中式的强管控服务,这里的边界是企业IT系统的边界,可以理解为企业级应用防火墙,主要起到隔离外部访问与内部系统的作用。在微服务概念流行之前,API网关就已经诞生了,例如银行、证券等领域常见的前置系统,它的设计与出现主要是为了解决访问认证、报文转换、访问统计等问题。网关在微服务架构中所处的位置,如图1-6所示。
图1-6 网关在微服务架构中所处的位置
随着微服务架构概念的提出,API网关成为微服务架构的一个标配组件。作为一个网关中间件,至少具备如下四大功能。
(1)统一接入功能
为各种无线应用提供统一的接入服务,提供一个高性能、高并发、高可靠的网关服务。不仅如此,还要支持负载均衡、容灾切换和异地多活。
(2)协议适配功能
网关对外的请求协议一般是HTTP或HTTP2协议,而后端提供访问的服务协议要么是REST协议要么是RPC协议。网关需要根据请求进来的协议进行协议适配,然后协议转发调用不同协议提供的服务。比如网关对外暴露是HTTP协议的请求,而网关后端服务可能是Dubbo提供的RPC服务,可能是Spring Cloud提供的REST服务,也可能是其他PHP编写的服务。当一个HTTP请求经过网关时,通过一系列不同功能的Filter处理完毕之后,此时就需要进行协议适配,判断应该协议转发调用RPC服务,调用REST服务,还是调用PHP提供的服务。
(3)流量管控功能
网关作为所有请求流量的入口,当请求流量瞬间剧增,比如天猫双11、双12或者其他大促活动,流量会迅速剧增,此时需要进行流量管控、流量调拨。当后端服务出现异常,服务不可用时,需要网关进行熔断和服务降级。在异地多活场景中需要根据请求流量进行分片,路由到不同的机房。
(4)安全防护功能
网关需要对所有请求进行安全防护过滤,保护后端服务。通过与安全风控部门合作,对IP黑名单和URL黑名单封禁控制,做风控防刷,防恶意攻击等。
2. Spring Cloud第一代网关Zuul
Spring Cloud生态圈的第一代网关是在Netflix公司开源的网关组件Zuul之上,它基于Spring Boot注解,采用Starter的方式进行二次封装,可以做到开箱即用。目前Zuul融合了Spring Cloud提供的服务治理体系,根据配置的路由规则或者默认的路由规则进行路由转发和负载均衡。它可以与Spring Cloud生态系统内其他组件集成使用,例如:集成Hystrix可以在网关层面实现降级的功能;集成Ribbon可以使得整个架构具备弹性伸缩能力;集成Archaius可以进行配置管理等。但是Spring Cloud Zuul如果需要做一些灰度、降级、标签路由、限流、WAF封禁,则需要自定义Filter做一些定制化实现。
3. Spring Cloud第二代网关Gateway
Spring Cloud Zuul处理每个请求的方式是分别对每个请求分配一个线程来处理。根据参考数据统计,目前Zuul最多能达到1000至2000 QPS。在高并发的场景下,不推荐使用Zuul作为网关。因此出现了Spring Cloud的第二代网关,即Spring Cloud Gateway。
Spring Cloud Gateway是Spring官方基于Spring 5.0、Spring Boot 2.0和Project Reactor等技术开发的网关,旨在为微服务架构提供一种简单、有效、统一的API路由管理方式。Spring Cloud Gateway底层基于Netty实现(Netty的线程模型是多线程reactor模型,使用boss线程和worker线程接收并异步处理请求,具有很强大的高并发处理能力),因此Spring Cloud Gateway出现的目的就是替代Netflix Zuul。其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如,安全、监控/埋点、限流等。在本书的第17章和18章,详细地介绍了Spring Cloud Gateway的使用方法和实战技巧。
- 点赞
- 收藏
- 关注作者
评论(0)