微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍
上一篇关于网关的文章:
微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍,介绍了为什么会有网关及以 Nginx 为基础的网关 。
一、网关 zuulzuul 网关使用 java 语言开发,是 Netflix 公司出品的开源网关 。它是 SpringCloud 的组件之一 。zuul 有 2 个大的版本:
- zuul1:zuul1 wiki
- zuul2:zuul2 wiki
文章插图
(netflix blog: https://netflixtechblog.com/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems-45947377fb5c)
这种处理线程模型,当后端API延迟增加或错误导致重试,线程数也会随之增加 。这种情况发生时,就会给节点服务器带来麻烦,使服务器负载激增,为了消除这种麻烦,构建了限流机制(比如hystrix)保持系统的稳定 。
zuul1 中网关功能怎么实现,在请求周期通过 Filter 实现,如下图:
文章插图
?(from:https://github.com/Netflix/zuul/wiki/How-it-Works)
1.2 zuul2 架构zuul2 对 zuul1 进行了重大的重构,采用异步和事件驱动模式处理程序 。请求和响应的生命周期通过事件和回调机制来处理 。没有像 zuul1 那样针对每个请求使用一个线程,不需要大量的线程成本,只需要一个文件描述符和一个监听器 。而且像 zuul1 发生后端延迟和“重试风暴”,不是增加线程,zuul2 中是在队列中增加事件,这个开销比多个线程开销小得多 。
文章插图
(netflix blog: https://netflixtechblog.com/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems-45947377fb5c)
关于高性能网络IO编程模型,可以看我之前的文章,点击这里看文章zuul2 网关中那么多功能是怎么实现的呢?是在请求周期(request cycle)中,通过 Filter 来处理实现 。
文章插图
?(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
经验总结扩展阅读
- 微信如何一键转发(朋友圈一键转发功能)
- 怎么把别人的微信转发给别人(微信怎么转发别人的朋友圈)
- 天涯明月刀9月28日微信每日一题答案是什么
- 黑色沙漠手游9月28日微信每日一题答案是什么
- 新剑侠情缘9月28日微信每日一题答案分享
- 火影忍者9月28日微信每日一题答案是什么
- TCL电视安装注意事项 TCL电视售后服务
- 微信公众号怎么转发(微信上面的公众号如何转发)
- 怎样转发微信内容到朋友圈(如何将微信中的内容转发到朋友圈)
- 微信如何转发(微信朋友圈一键转发)