《重新定义Spring Cloud实战》——1.2.6 Spring Cloud与网关中间件

举报
华章计算机 发表于 2019/06/04 13:04:37 2019/06/04
【摘要】 本书摘自《重新定义Spring Cloud实战》——书中第1章,第1.2.6节,作者是许进、叶志远、钟尊发、蔡波斯、方志朋、郭芳碧、朱德明。

1.2.6 Spring Cloud与网关中间件

1.网关中间件概述

API Gateway(APIGW/API网关),顾名思义,是出现在系统边界上一个面向API的、串行集中式的强管控服务,这里的边界是企业IT系统的边界,可以理解为企业级应用防火墙,主要起到隔离外部访问与内部系统的作用。在微服务概念流行之前,API网关就已经诞生了,例如银行、证券等领域常见的前置系统,它的设计与出现主要是为了解决访问认证、报文转换、访问统计等问题。网关在微服务架构中所处的位置,如图1-6所示。

image.png

图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的使用方法和实战技巧。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。