三、API 网关详解
1. 网关及作用
主要功能:请求过滤
网关可以为我们提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、降级熔断、日志、监控等功能。
2. 常见的网关系统
2.1 Netflix Zuul
(1)Zuul 是 Netflix 开发的一款提供动态路由、监控、弹性、安全的网关服务。
(2)Zuul 主要通过过滤器(类似于 AOP)来过滤请求,从而实现网关必备的各种功能。
(3)可以自定义过滤器来处理请求,并且,Zuul 生态本身就有很多现成的过滤器供我们使用。
如限流可以直接用国外朋友写的 spring-cloud-zuul-ratelimit (这里只是举例说明,一般是配合 hystrix 来做限流):
(4)Zuul 1.x 基于同步 IO,性能较差。Zuul 2.x 基于 Netty 实现了异步 IO,性能得到了大幅改进。
链接:
官方 Wiki
Github 地址
2.2 Spring Cloud Gateway
2.2.1 简介
(1)为了提升网关的性能,SpringCloud Gateway 基于 Spring WebFlux 。
Spring WebFlux 使用 Reactor 库来实现响应式编程模型,底层基于 Netty 实现异步 IO。
(2)不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能
例如:安全,监控/指标,和限流。
(3)Spring Cloud Gateway 和 Zuul 2.x 的差别不大,也是通过过滤器来处理请求。
不过,目前更加推荐使用 Spring Cloud Gateway 而非 Zuul,Spring Cloud 生态对其支持更加友好。
链接:
官网
Github 地址
原理及应用
详见我另一篇博客,链接:
SpringCloud之Gateway
2.3 Kong
(1)Kong 是一款基于 OpenResty 的高性能、云原生、可扩展的网关系统。
OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。
用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
(2)Kong 提供了插件机制来扩展其功能。比如、在服务上启用 Zipkin 插件
官网
Github 地址
2.4 APISIX
(1)APISIX 是一款基于 Nginx 和 etcd 的高性能、云原生、可扩展的网关系统。
(2)etcd是使用 Go 语言开发的一个开源的、高可用的分布式 key-value 存储系统,使用 Raft 协议做分布式共识。
(3)与传统 API 网关相比,APISIX 具有动态路由和插件热加载,特别适合微服务系统下的 API 管理。
(4)并且,APISIX 与 SkyWalking(分布式链路追踪系统)、Zipkin(分布式链路追踪系统)、Prometheus(监控系统) 等 DevOps 生态工具对接都十分方便。
(5)作为 NGINX 和 Kong 的替代项目,APISIX 目前已经是 Apache 顶级开源项目,并且是最快毕业的国产开源项目。
国内目前已经有很多知名企业(比如金山、有赞、爱奇艺、腾讯、贝壳)使用 APISIX 处理核心的业务流量。
APISIX 已经生产可用,功能、性能、架构全面优于 Kong。
链接:
官网
Github 地址
2.5 Shenyu
(1)Shenyu 是一款基于 WebFlux 的可扩展、高性能、响应式网关,Apache 顶级开源项目。
(2)Shenyu 通过插件扩展功能,插件是 ShenYu 的灵魂。
并且插件也是可扩展和热插拔的。不同的插件实现不同的功能。
Shenyu 自带了诸如限流、熔断、转发 、重写、重定向、和路由监控等插件。
链接:
官网
Github 地址
上一篇跳转—分布式(二) 下一篇跳转—分布式(四)
本篇文章主要参考链接如下:
参考链接1-JavaGuide
持续更新中…
随心所往,看见未来。Follow your heart,see light!
欢迎点赞、关注、留言,一起学习、交流!