网关选型对比

news2024/10/6 6:50:49

网关选型

网关简介

  • 网关是将一个网络与另一个网络进行相互连通,提供特定应用的网络间设备,应用网关必须能实现相应的应用协议。应用网关可以看做是运行于要求特定业务的客户机与提供所需业务的服务器之间的中间过程。应用网关在这类过程中,从用户侧来看它起着服务器的作用,从服务器侧来看它是一个客户机。

网关能力要求

  • 异步的,高性能的,跨语言的。
  • 支持多种语言和协议。
  • 插件化设计思想,插件热插拔,易扩展。
  • 丰富的插件种类,如鉴权、分流、限流、熔断等等。
  • 流量配置动态化,实例无需下线。
  • 支持集群部署,支持 A/B Test,蓝绿发布。

网关类型

  • 脚本型(Kong、Apache apisix )

    • Kong
      • 是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,开源的API Gateway项目。

      • Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

        • 整体架构:                      

          Kong

  • Apache apisix
    • APISIX 是一个云原生、高性能、可扩展的微服务 API 网关。

    • 它是基于 Nginx 和 etcd 来实现。

    • APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 API 管理。

    • APISIX 是基于云原生的微服务 API 网关,它是所有业务流量的入口,可以处理传统的南北向流量,也可以处理服务间的东西向流量,也可以当做 k8s ingress controller 来使用。

    • APISIX 通过插件机制,提供动态负载平衡、身份验证、限流限速等功能,并且支持你自己开发的插件。

      • 整体架构:

        flow-software-architecture

      • 插件加载过程:

        flow-load-plugin

      • 插件顺序:

      flow-plugin-internal

  • 应用型(Spring Cloud Gateway 、Apache ShenYu)

    • Spring Cloud Gateway
      • 基于Spring Framework 5、Project Reactor和Spring Boot 2.0。

      • 能够在任何请求属性上匹配路由。

      • 谓词和过滤器是特定于路由的。

      • 断路器的集成。

      • Spring Cloud DiscoveryClient集成。

      • 易于编写谓词和过滤器。请求速率限制。

      • 路径重写。

        • 整体架构:

          spring_cloud_gateway_diagram

    • Apache ShenYu
      • 是一个异步的,高性能的,跨语言的,响应式的 API 网关。

      • 支持各种语言(http 协议),支持 Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars 等协议。

      • 插件化设计思想,插件热插拔,易扩展。

      • 灵活的流量筛选,能满足各种流量控制。

      • 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。

      • 流量配置动态化,性能极高。

      • 支持集群部署,支持 A/B Test,蓝绿发布。

        • 整体架构:

          shenyu-framework-0a0c9cfb4419185cca8bbeeecdf57b06

              

        • 网关后台流程:

          68747470733a2f2f7368656e79752e6170616368652e6f72672f696d672f7368656e79752f6461746153796e632f7368656e79752d636f6e6669672d70726f636573736f722d656e2e706e67

        • 网关配置变更同步流程:

          1

网关对比

注:此对比为综合功能对比,除去后续研发插件、服务日常维护操作

  • 对比内容

    • 多语言支持
    • 多协议支持
    • 插件机制、易扩展、维护
    • 动态路由
    • 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 ShenYuApache Apisix应用型进行请求路由到配置ID服务均支持AA ✅ AS ✅
请求重写将请求重写进行调用AS 通过请求参数替换支持AA ✅ AS ❌
重定向将请求重新转发到指定的URLAA ✅ 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 、RedisAA ✅ 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 upstreamYesYes
      Dynamic routerYesYes
      Health checkYesYes
      Dynamic SSLYesYes
      L4 and L7 proxyYesYes
      OpentracingYesYes
      Custom pluginYesYes
      REST APIYesYes
      CLIYesYes
    • 高级功能对比:

    Features

    Apache APISIX

    Kong

    Features

    Apache APISIX

    Kong

    Belongs toApache Software FoundationKong Inc.
    Tech ArchitectureNginx + etcdNginx + Postgres
    Communication channelsMail list, Wechat group, QQ group, GitHub, Slack, meetupGitHub, Freenode, forum
    Single-core CPU, QPS(enable limit-count and Prometheus plugins)180001700
    Latency0.2 ms2 ms
    DubboYesNo
    Configuration rollbackYesNo
    Route with TTLYesNo
    Plug-in hot loadingYesNo
    Custom LB and routeYesNo
    REST API <--> gRPC transcodingYesNo
    MQTTYesNo
    Configuration effective timeEvent-driven, < 1mspolling, 5 seconds
    DashboardYesNo
    IdPYesNo
    Configuration Center HAYesNo
    Speed limit for a specified time windowYesNo
    Support any Nginx variable as routing conditionYesNo
  • Apache 基金会开源项目活跃排名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL练习题(6)

创建两个表插入数据 CREATE DATABASE beifen;use beifen;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Learning MySQL, 2010),(11033, Study Html, 2011),(11035, How to u…

Linux—实操篇:组管理和权限管理

目录 1、Linux组基本介绍 2、文件/目录 所有者 2.1、查看文件所有者 2.1、修改文件的所有者 3、组的创建 4、文件/ 目录所在组 4.1、查看文件/目录所在组 4.2、修改文件/ 目录所在组 5、其他组 6、改变用户所在组 7、权限基本介绍 8、rwx权限详解 8.1、rwx作用到文…

除了单测、写main方法,还有其他验证方式吗?试试Java JShell吧!

文章首发地址 JShell 概述 Java JShell 是 JDK 9 中引入的一个交互式命令行工具&#xff0c;可以方便地测试 Java 代码片段和进行试验性的 Java 编程。JShell 可以帮助开发人员轻松地创建和测试 Java 代码&#xff0c;而无需编写和运行完整的应用程序或测试用例。以下是 JShe…

了解刚性、惯量、响应时间及伺服增益之间的关系,提高系统的性能和稳定性!

在伺服系统选型及调试中&#xff0c;刚性、惯量、响应时间及伺服增益调整之间的关系错综复杂&#xff0c;这些因素在控制系统中相互影响&#xff0c;对于系统的稳定性和性能至关重要。但在实践中如何调整取值比较合理&#xff0c;这些就算是工程师都会经常感到困惑。所以了解它…

Django 分布式路由

简介&#xff1a; Django中&#xff0c;主路由配置文件(urls.py)可以不处理用户具体路由&#xff0c;主路由的配置文件可以配置成做请求的分发&#xff08;分布式请求处理&#xff0c;分发到子路由而不是具体的视图函数&#xff09;。具体的请求可以由各自的应用来处理。 步骤…

stm32(SPI读写W25Q18)

SPI 是什么&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总 线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为PC…

【Nginx】rewrite简单使用

前言 没有对正式的rewrite进行了解&#xff0c;为了能快速了解它是干嘛怎么用&#xff0c;找了一些有例子的博客进行简单学习了一下&#xff1b;由于每次看的间隔有点大&#xff0c;老忘记&#xff0c;这回专门写个超级快速理解的例子。 PS&#xff1a;下面的解释可能会不太对…

Serverless和EDA是绝配,亚马逊云科技CTO Werner表示需要用开放心态来重新审视架构

前一段有个很火的博客&#xff0c;讲的是一家全球流媒体企业的监测系统从Serverless微服务改成了单体&#xff0c;成本居然降低了90%&#xff01;这一下子可在网上炸锅了&#xff0c;特别是一些看不惯微服务的、单体应用的拥趸&#xff0c;更是坐不住了。但这并不像吃瓜群众看到…

ret2syscall-执行系统调用

题目 checksec一下&#xff1a; 32位程序&#xff0c;没有canary、PIE&#xff0c;开了NX&#xff0c;放入IDA看一下&#xff1a; 有gets&#xff0c;可以溢出&#xff0c;不过没有system函数&#xff0c;也不能执行shellcode&#xff0c;查看字符发现有/bin/sh&#xff0c;那就…

消息中间件系列 - RocketMQ

前言 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 【尚硅谷】RocketMQ教程丨深度掌握MQ消息中间件_哔哩哔哩_bilibili 第一章 RocketMQ概述 一、MQ概述 1 、MQ简介 MQ&#xff0c;Message Queue&#xff0c;是一种提供消息队列服务的中间件&#…

SpringBoot(七)Filter的使用

思考一个问题&#xff0c;服务端对于客户端的请求&#xff0c;真的应该照单全收吗&#xff1f;不是的。比如拿我们之前实现的用户注册功能来看&#xff0c;如果用户的昵称带了一些不友好的字母或汉字&#xff0c;你是给他过滤掉呢还是让他注册呢&#xff1f;毫无疑问&#xff0…

Zint-条码生成软件-命令行调用-一维条码和二维条码

文章目录 1.Zint简介2.术语3.命令行3.1.输入数据3.2.直接输出3.3.选择条码类型3.4.调整高度3.5.调整空白3.6.添加边界条和框3.7.颜色设置3.8.旋转3.9.调整图像尺寸 4.界面5.总结 1.Zint简介 Zint项目旨在提供一个完整的跨平台开源条形码生成解决方案。该软件包目前包括一个基于…

零拷贝是如何实现的

零拷贝是如何实现的 零拷贝&#xff08;Zero-copy&#xff09;是一种优化技术&#xff0c;用于在数据传输过程中减少数据的拷贝次数&#xff0c;从而提高数据传输的效率和性能。传统的数据传输涉及多次内存拷贝操作&#xff0c;而零拷贝通过减少或避免这些拷贝操作来实现性能优…

HDC.Cloud 2023|邂逅AI,华为云CodeArts铸就研发效能10倍提升

2023年7月7日-9日&#xff0c;华为开发者大会2023&#xff08;Cloud&#xff09;在东莞松山湖隆重举行。期间&#xff0c;华为云主办了以“AI‘邂逅’一站式软件开发&#xff0c;CodeArts以10倍效能“绘”企业应用远景”为主题的分论坛。 华为云PaaS服务产品部副部长汪维敏携一…

用户注册倒计时案例

代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </hea…

ORA-00845: MEMORY_TARGET not supported on this system

memory_target的值需要比tmpfs的小。 解决&#xff1a; vim /usr/local/oracle/admin/orcl/pfile/init.ora.6132023154657 强制加载init.ora.6132023154657文件启动数据库 SQL> startup force pfile/usr/local/oracle/admin/orcl/pfile/init.ora.6132023154657;

【原生基础篇】JavaScript中常用的数据输出方式解析

​ 在 JavaScript 中&#xff0c;一般使用如下几种方式进行数据的输出&#xff1a; JavaScript 基础到高级 Canvas游戏开发 原生JavaScipt案例合集 JavaScript DOM基础 1. 在浏览器的控制台输出 浏览器F12打开浏览器控制台(一般前端开发人员必备浏览器为谷歌浏览器&#xff0…

ArcGIS一张图的制作过程

来源&#xff1a;GIS荟 数据 首先&#xff0c;第一步是数据的准备和处理&#xff0c;这里没什么好说的。 使用的所有数据都是在网上下载的 OSM 数据。 第一步 主视觉 为了更好的说明该地图的完整操作过程&#xff0c;同时又要有条理、比较好理解&#xff0c;所以我采用拆分…

matlab处理数据

Matlab异常值处理https://blog.csdn.net/weixin_57345774/article/details/126965835?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126965835%22%2C%22source%22%3A%22qq_53011270%22%7D&fromshareblogdetail 异常值识别和…

SAP从放弃到入门系列之WIP Batch(Work-in-Process)-Part2

文章目录 一、前言二、系统操作2.1 数据设置2.2 业务数据2.3 相关的NOTE&#xff1a;1473025 - FAQ: WIP 批次 三、其他 一、前言 这个测试验证的过程真的是很难受&#xff0c;由于资料太少&#xff0c;查到的SAP官方的文档也描述的非常粗略。因为我从一开始就是有目的的去验证…