网关选型
网关简介
-
网关是将一个网络与另一个网络进行相互连通,提供特定应用的网络间设备,应用网关必须能实现相应的应用协议。应用网关可以看做是运行于要求特定业务的客户机与提供所需业务的服务器之间的中间过程。应用网关在这类过程中,从用户侧来看它起着服务器的作用,从服务器侧来看它是一个客户机。
网关能力要求
-
异步的,高性能的,跨语言的。
-
支持多种语言和协议。
-
插件化设计思想,插件热插拔,易扩展。
-
丰富的插件种类,如鉴权、分流、限流、熔断等等。
-
流量配置动态化,实例无需下线。
-
支持集群部署,支持 A/B Test,蓝绿发布。
网关类型
-
脚本型(Kong、Apache apisix )
-
Kong
-
是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,开源的API Gateway项目。
-
Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。
-
整体架构:
-
-
-
-
Apache apisix
-
APISIX 是一个云原生、高性能、可扩展的微服务 API 网关。
-
它是基于 Nginx 和 etcd 来实现。
-
APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 API 管理。
-
APISIX 是基于云原生的微服务 API 网关,它是所有业务流量的入口,可以处理传统的南北向流量,也可以处理服务间的东西向流量,也可以当做 k8s ingress controller 来使用。
-
APISIX 通过插件机制,提供动态负载平衡、身份验证、限流限速等功能,并且支持你自己开发的插件。
-
整体架构:
-
插件加载过程:
-
插件顺序:
-
-
-
应用型(Spring Cloud Gateway 、Apache ShenYu)
-
Spring Cloud Gateway
-
基于Spring Framework 5、Project Reactor和Spring Boot 2.0。
-
能够在任何请求属性上匹配路由。
-
谓词和过滤器是特定于路由的。
-
断路器的集成。
-
Spring Cloud DiscoveryClient集成。
-
易于编写谓词和过滤器。请求速率限制。
-
路径重写。
-
整体架构:
-
-
-
Apache ShenYu
-
是一个异步的,高性能的,跨语言的,响应式的
API
网关。 -
支持各种语言(http 协议),支持 Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars 等协议。
-
插件化设计思想,插件热插拔,易扩展。
-
灵活的流量筛选,能满足各种流量控制。
-
内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。
-
流量配置动态化,性能极高。
-
支持集群部署,支持 A/B Test,蓝绿发布。
-
整体架构:
-
网关后台流程:
-
网关配置变更同步流程:
-
-
-
网关对比
注:此对比为综合功能对比,除去后续研发插件、服务日常维护操作
-
对比内容
-
多语言支持
-
多协议支持
-
插件机制、易扩展、维护
-
动态路由
-
ACL、Auth2 等鉴权机制
-
流控规则
-
请求转发、重写、重定向、指定负载
-
集群与SpringCloud 生态易集成
-
监控集成(Skywalking、Prometheus)
-
网关界面化
-
与Nacos集成
-
-
综合功能对比
功能名称 | 支持的网关 | 功能优先级 |
---|---|---|
多语言支持 | 无 | 一般 |
多协议支持 | Apache Apisix、Apache ShenYu | 高 |
插件机制、易扩展、维护 | Apache ShenYu、Apache Apisix、SpringCloud Gateway | 极高 |
动态路由 | Apache ShenYu、Apache Apisix、Kong | 极高 |
ACL、Auth2 等鉴权机制 | Apache ShenYu、Apache Apisix | 极高 |
流控规则 | Apache ShenYu、Apache Apisix、SpringCloud Gateway | 一般 |
请求转发、重写、重定向、指定负载 | Apache ShenYu、Apache Apisix、SpringCloud Gateway | 极高 |
集群与SpringCloud 生态易集成 | Apache ShenYu、SpringCloud Gateway | 高 |
监控集成(Skywalking、Prometheus) | Apache ShenYu、Apache Apisix | 极高 |
网关界面化 | Apache ShenYu、Apache Apisix | 极高 |
与Nacos集成 | SpringCloud Gateway、Apache Apisix(不满足生产要求)、Apache ShenYu(待验证) | 极高 |
-
脚本类型对比
网关名称 | 网关类型 | 对比结论 | 建议选型 | 文档地址 |
---|---|---|---|---|
Kong | 脚本型 | 详见最下方官方对比 | ❌ | Kong Gateway - v3.3.x | Kong Docs |
Apache Apisix | 脚本型 | 详见最下方官方对比 | ✅ | Apache APISIX® -- Cloud-Native API Gateway |
-
应用类型对比
网关名称 | 网关类型 | 对比结论 | 建议选型 | 文档地址 |
---|---|---|---|---|
SpringCloud Gateway | 应用型 | 无界面化,仅简单插件,高级特性需要定制(spring默认粗实现,更多业务需求需要自己开发),不支持局部处理,每次请求需要执行所有filter效率低 | ❌ | Spring Cloud Gateway |
Apache ShenYu | 应用型 | 多语言支持,界面化,支持多维度自定义插件 | ✅ | Overview | Apache ShenYu |
-
网关功能使用验证
网关功能 | 网关名称(应用型简称AS) | 网关名称(脚本型简称AA) | 要求 | 对比结论 | 验证结果 |
---|---|---|---|---|---|
路由 | Apache ShenYu | Apache Apisix应用型 | 进行请求路由到配置ID服务 | 均支持 | AA ✅ AS ✅ |
请求重写 | 将请求重写进行调用 | AS 通过请求参数替换支持 | AA ✅ AS ❌ | ||
重定向 | 将请求重新转发到指定的URL | AA ✅ AS ✅ | |||
请求参数替换 | 将请求路径中部分参数进行对应替换 | AA 通过请求重写支持 | AA ❌ AS ✅ | ||
静态负载 | AA ✅ AS ✅ | ||||
动态负载 | AA 基于Ng upstram ,AS基于注册中心 | AA ✅ AS ✅ | |||
插件机制 | 均类似基于责任链,按顺序调用插件处理 | AA ✅ AS ✅ | |||
与Nacos集成 | AA 界面支持实际功能不支持 AS多种注册中心支持,如Nacos、Eureka、Zookeeper 等 | AA ❌ AS ✅ | |||
与Skywalking集成 | 均支持 | AA ✅ AS ✅ | |||
与Prometheus集成 | 均支持,AS 刚开始支持,还需要迭代 | AA ✅ AS ✅ | |||
限流 | AA 基于NG ,AS 基于Sentinel 、Redis | AA ✅ AS ✅ | |||
语言支持 | 最好Java,有多语言客户端 | AA Lua ,AS Java 社区有 go、python sdk 计划 | AA ❌ AS ✅ |
-
多类型多维度对比
网关名称 | 网关类型 | 对比结论 | 建议选型 |
---|---|---|---|
Apache ShenYu | 应用型 | 可与Eureka、Nacos等注册中心结合使用,用过bootstart方式依赖插件,与Apisix一样支持多维度自定义插件路由使用,Java语言开发 https://github.com/apache/incubator-shenyu/releases | ✅ |
Apache Apisix | 脚本型 | 满足于ShenYu相同功能,与Nacos集成(当前版本不满足生产使用,刚支持Nacos做发现,存在Bug,https://github.com/apache/apisix/blob/release/2.12/CHANGELOG.md#2121),lua语言开发,属于云原生网关 | ❌ |
参考文章
-
官方Apache Apisix 与 Kong 对比图
-
基础功能对比:
Features
Apache APISIX
KONG
Dynamic upstream Yes Yes Dynamic router Yes Yes Health check Yes Yes Dynamic SSL Yes Yes L4 and L7 proxy Yes Yes Opentracing Yes Yes Custom plugin Yes Yes REST API Yes Yes CLI Yes Yes -
高级功能对比:
Features
Apache APISIX
Kong
Features
Apache APISIX
Kong
Belongs to Apache Software Foundation Kong Inc. Tech Architecture Nginx + etcd Nginx + Postgres Communication channels Mail list, Wechat group, QQ group, GitHub, Slack, meetup GitHub, Freenode, forum Single-core CPU, QPS(enable limit-count and Prometheus plugins) 18000 1700 Latency 0.2 ms 2 ms Dubbo Yes No Configuration rollback Yes No Route with TTL Yes No Plug-in hot loading Yes No Custom LB and route Yes No REST API <--> gRPC transcoding Yes No MQTT Yes No Configuration effective time Event-driven, < 1ms polling, 5 seconds Dashboard Yes No IdP Yes No Configuration Center HA Yes No Speed limit for a specified time window Yes No Support any Nginx variable as routing condition Yes No -
-
Apache 基金会开源项目活跃排名