您的位置:首页 > 编程语言 > Java开发

SpringCloudGateWay实战(一)- Zuul及其实现原理

2020-06-06 04:21 330 查看

1 微服务架构的两种方式

  • 点对点

    API-网关,应用最广泛的方式

2 Zuul 的生命周期


在SoringQloud Finchley正式版之前,Spring Cloud推荐的网关是Netfix提供的Zuul:
Zuul 1.x, 是一个基于阻塞IO的API Gateway,基于Servlet 2. 5使用阻塞架构,它不支持任何长连接(如WebSocket)
Zuul的设计模式和Nginx较像,每次I/ 0操作都是从工作线程中选择一 个执行,请求线程被阻塞到工作线程完成,但是差别是Nginx用C++实现,Zuul用Java实现,而JVM本身会有第一次加载较慢的情况,使得Zuul的性能相对较差。

2.x理念更先进,想基于Netty非阻塞和支持长连接,但SpringCloud目前还没有整合。Zuul 2.x的性能较Zuul 1.x有较大提升, 在性能方面,根据官方提供的基准测试, Spring Cloud Gateway的RPS (每秒请求数)是Zuul的1. 6倍。

Spring Cloud Gateway建立在 Spring Framework 5、 Project Reactor和Spring Boot2之上, 使用非阻塞API。Spring Cloud Gateway还支持WebSocket, 并且与Spring紧密集成拥有更好的开发体验

3 上述的缺点

servlet是一个简单的网络I0模型,当请求进入servlet container时, servlet container就会为其绑定一个线程,在并发不高的场景下这种模型是适用的。一旦高并发(此如抽风用jemeter压测),线程数量就会上涨,而线程资源代价是昂贵的(上线文切换,内存消耗大)严重影响请求的处理时间。
在一些简单业务场景下, 不希望为每个request分配个线程, 只需要1个或几个线程就能应对极大并发的请求,这种业务场景下servlet模型没有优势。

所以Zuul 1.X是基于servlet之上的一个阻塞式处理模型,即spring实现了处理所有request请求的个servlet (DispatcherServlet) 并由该servlet阻

Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票, SpringCloud最后自己研发了一个网关替代Zuul,那就是SpringCloud Gateway : gateway是原zuul1.x版的替代

SpringCloud Gateway是Spring Cloud的一个全新项目,基于Spring 5.0+Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为
微服务架构提供-种简单有效的统一的API路由管理方式。
SpringCloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0上
最新高性能版本进行集成,仍然还是使用的Zuul 1.x非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty.
Spring Cloud Gateway的目标提供统-的路由方式且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

因为Zuul1.0已经进入了维护阶段,而且Gateway是SpringCloud团队研发的, 是亲儿子产品,值得信赖。而且很多功能Zuul都没有用起来也非常的简单便捷。

Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心。虽然Netflix早就发布了最新的Zuul 2.x,但Spring| Cloud貌似没有整合计划。而且Netflix相关组件都宣布进入维护期;前景无望。
多方面综合考虑Gateway是很理想的网关选择。

4 网关的架构位置

  • 注意负载均衡依旧是 Nginx

特性

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: