微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍
上一篇关于网关的文章:
微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍,介绍了为什么会有网关及以 Nginx 为基础的网关 。
一、网关 zuulzuul 网关使用 java 语言开发,是 Netflix 公司出品的开源网关 。它是 SpringCloud 的组件之一 。zuul 有 2 个大的版本:
- zuul1:zuul1 wiki
- zuul2:zuul2 wiki
![11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍](https://m.360buyimg.com/jdcms/jfs/t1/67928/26/18866/31926/63528e96E2921a341/da5f288e399c4f18.png)
文章插图
(netflix blog: https://netflixtechblog.com/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems-45947377fb5c)
这种处理线程模型 , 当后端API延迟增加或错误导致重试,线程数也会随之增加 。这种情况发生时,就会给节点服务器带来麻烦,使服务器负载激增,为了消除这种麻烦 , 构建了限流机制(比如hystrix)保持系统的稳定 。
zuul1 中网关功能怎么实现,在请求周期通过 Filter 实现,如下图:
![11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍](https://m.360buyimg.com/jdcms/jfs/t1/21075/31/18762/57142/63528e97E7b0e3b49/58e79baf2eff1b52.png)
文章插图
?(from:https://github.com/Netflix/zuul/wiki/How-it-Works)
1.2 zuul2 架构zuul2 对 zuul1 进行了重大的重构 , 采用异步和事件驱动模式处理程序 。请求和响应的生命周期通过事件和回调机制来处理 。没有像 zuul1 那样针对每个请求使用一个线程 , 不需要大量的线程成本,只需要一个文件描述符和一个监听器 。而且像 zuul1 发生后端延迟和“重试风暴”,不是增加线程 , zuul2 中是在队列中增加事件 , 这个开销比多个线程开销小得多 。
![11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍](http://img.zhejianglong.com/231018/1Z431CE-2.jpg)
文章插图
(netflix blog: https://netflixtechblog.com/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems-45947377fb5c)
关于高性能网络IO编程模型,可以看我之前的文章 , 点击这里看文章zuul2 网关中那么多功能是怎么实现的呢?是在请求周期(request cycle)中,通过 Filter 来处理实现 。
![11 微服务架构学习与思考:开源 API 网关02-以 Java 为基础的 API 网关详细介绍](https://m.360buyimg.com/jdcms/jfs/t1/114837/32/29263/39334/63528e98E19b4f260/1e6f2a8c7c594b2c.png)
文章插图
?(from:https://github.com/Netflix/zuul/wiki/How-It-Works-2.0)
Filter:
Filter 过滤器是 zuul2 业务逻辑处理的核心,它可以在请求-响应周期的不同部分运行 。分为 3 个 Filter:更多 zuul2 Filter 用法请查看 Filter wiki 。
- Inbound Filters:Inbound 过滤器 , 在请求到源之前执行,可用于身份验证、路由和装饰请求等处理操作
- Endpoint Filters:Endpoint 过滤器,可用于返回静态响应,否则内置的 ProxyEndpoint 过滤器会将请求路由到源 。
- Outbound Filters:Outbound 过滤器,请求处理之后执行,可用于度量、装饰处理之后的请求或增加自定义 header 。
说明:在 zuul2 中编写 Filter , 使用的是 groovy 语言,它可以动态更新,不需要重启服务器 。1.3 zuul2 特性
- Core Features
- Service Discovery
- Load Balancing
- Connection Pooling
- Status Categories
- Retries
- Request Passport
- Request Attempts
- Origin Concurrency Protection
- HTTP/2
- Mutual TLS
- Proxy Protocol
- GZip
- Push Messaging
它是构建在 Spring 生态之上,包括 Spring5、Spring2 和 Project Reactor(Spring WebFlux) 。
Spring WebFlux 框架底层使用了 Reactor 模式高性能通信框架 Netty 。
官网:官网地址2.2 Spring Cloud Gateway 特性Features:
github: github 地址
Spring Cloud Gateway 是用来替代 zuul 网关,因为 zuul2 开发进度落后 。
- 基于 Spring Framework 5、Project Reactor 和 Spring 2.0 构建
- 能够在任何请求属性上匹配路由
- 如何修改微信密码(怎样修改微信密码教程)
- 如何重新设定微信密码(微信密码8-16位)
- 微信独立密码怎么改(微信登录新手机三天不能改密码)
- 怎么修改微信号,怎么修改微信密码(微信修改微信号的方法)
- 微信怎么修改密码,如何修改微信密码(微信手势密码忘了进不了微信)
- 我的微信密码怎么修改(微信为了账号安全暂不能修改密码)
- 怎样修改微信加密密码(微信如何加密隐藏某个人聊天记录)
- 微信三天以后改密码怎么解决(新版微信三天过后才能改密码)
- 微信不记得原密码怎么修改密码(微信怎样100%申诉成功)
- 天涯明月刀9月28日微信每日一题答案是什么