对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试:它们能否交付实时 API?

原文作者:Alessandro Fael Garcia of F5

原文链接:对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试:它们能否交付实时 API?

转载来源:NGINX 开源社区


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

速度 — 这在当今数字环境中尤为重要,如果您的应用性能太慢,消费者会毫不犹豫地选择您的竞争对手。应用速度最终取决于 API 的响应能力、运行状况和适应性,而影响 API 响应能力的关键因素之一就是 API 网关引入的延迟。但是,并非所有 API 网关的性能都是相同水平。

这点让我想起去年秋天,一位 NGINX 客户(消费信贷行业的一家知名公司)告诉我们,随着越来越多的应用和其他组件需要彼此通信以提供用户期望的数字体验,“实时” API 性能的重要性正日益提高。我们很高兴得知 NGINX Plus 是唯一能实现客户所需的超短 API 延迟(低至 10 毫秒)的 API 网关。其他许多客户,例如 Capital One,也与我们分享了如何通过使用 NGINX 开源版或 NGINX Plus 作为 API 网关来缩短延迟和提高吞吐量。

我们决定对 API 生态系统进行更深入的研究,并尝试弄清 API “实时”意味着什么。基于大量的考虑因素,我们最终确定了实时 API 处理端到端 API 调用的时间,前 99 百分位必须在 30 毫秒内(这意味着平均只有百分之一的调用用时超过 30 毫秒)。

比较 API 管理解决方案

我们的内部测试一致表明,当您定义、发布 API 并进行全生命周期管理和监控时,通过我们的 API 管理解决方案可以轻松实现实时 API 性能,该解决方案将 NGINX Plus 用作处理 API 调用的 API 网关,并使用 NGINX Controller API 管理模块(现已并入 NGINX Management Suite)来管理两个 NGINX Plus 实例以及您的 API。

但是我们知道,仅凭我们的一面之词,可能很难取信于您。因此,我们委托独立技术研究和分析公司 GigaOm 对我们的 API 管理解决方案和市场上的其他流行解决方案进行了客观透明的基准测试,这包括两款类似 NGINX 的可部署在本地或云中的解决方案 Apigee 和 Kong Enterprise,以及两款完全托管的云产品 Amazon API Gateway 和 Kong Cloud。

在本文中,我们概述了 GigaOm 的测试结果(最佳表现者:NGINX Plus 在每种测试条件下均能实时提供 API,而其他解决方案则不能)。有关解决方案、测试方法和结果的全部详情,请联系我们的团队成员。

注:Apigee 最终用户许可协议 (EULA) 禁止未经 Google 明确许可发布测试结果,因此很遗憾,该报告和本文中均未包含有关 Apigee 的信息。

基准测试概述

GigaOm 使用 Vegeta HTTP 负载测试工具生成请求(API 调用),并测量了在各种吞吐率 (RPS) 下 API 网关引入的延迟,即将响应返回给 API 调用所花费的时间。GigaOm 将 RPS 称为“攻击速率”。GigaOm 在从 1,000 到 5,000、10,000、20,000 及更高 RPS 的攻击速率下,不断运行测试,直到 Vegeta 报告错误状态代码为止。每次测试持续 60 秒,并重复 3 次。如下图所示,GigaOm 捕获了在 50、90、95、99、99.9 和 99.99 百分位下的延迟,并且还记录了在测试运行期间观察到的最长延迟(即图中的最大)。

结果:NGINX 与 Kong Enterprise

GigaOm 进行了两次基准测试,对 NGINX Plus(使用 NGINX Controller 部署)和 Kong Node(使用 Kong Enterprise 部署)进行了比较。在第一次基准测试中,只有一个工作节点(一个 NGINX Plus 或 Kong Node 实例)。在第二次基准测试中,3 个工作节点由 NGINX 开源版通过轮询调度算法进行负载均衡。(GigaOm 强调,使用 NGINX 开源版作为负载均衡器并不会给 NGINX Plus 带来优势,甚至 Kong 建议将其用作集群 Kong 实例的负载均衡器。)

如下图所示,在第 99 百分位之前,NGINX 和 Kong 之间的延迟差异可以忽略不计,但之后 Kong 的延迟开始呈指数增长。在两次基准测试中,在第 99.99 百分位下,Kong 的延迟均为 NGINX 的两倍或三倍。

API 在每个百分位下,直到第 99 百分位为止都能保持低延迟才能被定义为实时,但 GigaOm 指出,在实际部署中,在更高的百分位(如第 99.9 和 99.99)下保持低延迟“极其重要”。该报告说明:

延迟结果随时间的推移趋向于多模式,陡变的顶端代表响应时间中的“停顿”。

这些停顿关系重大。如果响应时间或延迟的中位数小于 30 毫秒,但存在 1 秒或更长时间延迟的停顿,则实际上会对后续用户体验产生累积影响。例如,如果您开车去一家快餐店,平均等餐时间为 1 分钟,您可能会认为这还是一种不错的客户体验。但是,如果您前面的客户订单出现问题,需要 10 分钟才能解决,那会怎样?这意味着您的等餐时间实际上是 11 分钟。由于您的请求是出现停顿之后,因此第 99.99 百分位的延迟也可能会成为您的延迟。

在高百分位下,超长延迟带来的负面影响在分布式应用中会变得更加明显,因为在此类应用中,单个客户端请求实际上可能会产生多个下游 API 调用。例如,假设 1 个客户端请求创建了对子系统的 10 个 API 调用,发生缓慢响应的概率为 1%。缓慢响应影响 1 个客户端请求的概率在 10% 左右,这点从数学上可以证明。有关详细信息,请参阅《谁动了我第 99 百分位的延迟?》。

图 1 描述了在单个工作节点和 30,000 RPS 攻击速率下的结果。在第 99.99 百分位,Kong 的延迟是 NGINX 的 3 倍以上,并且超过了实时 API 30 毫秒的阈值。相比之下,NGINX Plus 在每个百分位下均实现了实时延迟,其最高记录的(最大)延迟仅有 13 毫秒,还不到实时阈值的一半。

图 1.在单节点和 30,000 RPS 下的 NGINX Controller(现已并入 NGINX Management Suite)和 Kong Enterprise

图 2 显示了在三个工作节点下,同样也是在 30,000 RPS 攻击速率下的基准测试结果。有趣的是,在第 99 百分位和第 99.9 百分位下,Kong 表现优于 NGINX,但到第 99.99 百分位再次经历了延迟飙升,这时的延迟大约是 NGINX 的两倍。与第一个基准测试一样,NGINX 在所有百分位均保持小于 30 毫秒的实时阈值。

图 2.在三节点和 30,000 RPS 下的 NGINX Controller(现已并入 NGINX Management Suite)和 Kong Enterprise

衡量 API 网关性能的另一种方法是,利用单节点和三节点配置,确定在百分百成功(无 5xx 或 429 [Too Many Requests] 错误)并且在所有百分位延迟都小于 30 毫秒的情况下,它可以处理的最大 RPS。图 3 显示了根据此测量方法,NGINX 支持比 Kong 高出 50% 的 RPS:30,000 VS. 20,000。

图 3.无误情况下实现的最大吞吐量

结果:NGINX 与 Kong Cloud 和 Amazon API Gateway

在第三组基准测试中,GigaOm 将 NGINX Plus 同 Kong Cloud 和 Amazon API Gateway 进行了比较。GigaOm 强调,直接比较存在很大问题,因为 Kong Cloud 和 Amazon API Gateway 是完全托管的 SaaS 产品,而 NGINX Controller(现已并入 NGINX Management Suite)是 PaaS 产品,目前不作为 SaaS 提供。特别是,这两种 SaaS 产品都无法揭示其使用的实例类型、运算能力、内存或网络功能。因此,GigaOm 必须就与 NGINX Plus 相当的设置做出最佳猜测。

实际上,即使不与 NGINX Plus 进行比较,也能轻松发现,SaaS 产品在任何测试百分位下均无法实时提供 API,即便在图 4 所示的第二低攻击速率(5,000 RPS)下也是如此。在第 50 百分位下,SaaS 产品的延迟就已超过 30 毫秒阈值的 7 倍;而在第 99.99 百分位下,它比该阈值高出 8000% 以上。显而易见,在任何情况下,Kong Cloud 或 Amazon API Gateway 都无法百分百保证小于 30 毫秒的延迟。

图 4.在单节点和 5,000 RPS 下的 NGINX Controller(现已并入 NGINX Management Suite)、Amazon API Gateway 及 Kong Cloud

验证 NGINX 是唯一的实时 API 解决方案

总而言之,NGINX 是业经 GigaOm 测试的唯一符合实时 API 处理标准的解决方案,在每个百分位下的延迟均小于 30 毫秒。Kong Enterprise 在第 99 百分位获得了实时性能,但在较高的百分位下,其延迟急剧上升。因此,它不适合即便是只需适量实时 API 处理的生产环境。测试中的 SaaS 解决方案均不能被归类为实时。

GigaOm 报告证实了我们以前的基准测试结果以及客户向我们提供的反馈。NGINX Plus 是市场上最快的 API 网关,并且是唯一能够在所有百分位下都保持小于 30 毫秒延迟的 API 解决方案。而且,如果将其与 NGINX Controller (现已并入 NGINX Management Suite)搭配使用,您将可以获得具有独特架构的 API 管理解决方案。通过精心的解耦设计,API 管理控制平面 (NGINX Controller,现已并入 NGINX Management Suite) 不会对 API 网关数据平面 (NGINX Plus) 的性能产生任何影响。

您可以使用我们的 rtapi 延迟测量工具测试您自己的 API 性能。请联系我们,探讨我们可如何帮助您实现实时 API。


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源: 开源社区官网 | 微信公众号

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

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

相关文章

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程 📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 ✨stm32使用硬件I2C去读取角度数据,通过STM32CubeMX工具配置工程,读取角度数据,只需要调用一个函数&#xf…

使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控

在物联网(IoT)背景下,处理实时数据会遇到一些特定的障碍,如边缘计算资源不足、网络条件限制、扩展性存在问题、设备间有多样性差异。要克服这些挑战,需要高效的边缘计算技术、强大的安全措施、标准化协议、可扩展的管理…

接口自动化框架搭建(六):多进程执行

1,背景目的 当测试用例太多之后,想缩短执行时间,就需要多线程或者多进程执行。 多线程执行: 每条测试用例是独立的,测试用例之间的参数不能共同使用 采坑举例:接口自动化中请求头是公共参数,…

WebGIS 地铁交通线网 | 图扑数字孪生

数字孪生技术在地铁线网的管理和运维中的应用是一个前沿且迅速发展的领域。随着物联网、大数据、云计算以及人工智能技术的发展,地铁线网数字孪生在智能交通和智慧城市建设中的作用日益凸显。 图扑软件基于 HTML5 的 2D、3D 图形渲染引擎,结合 GIS 地图…

人人都离不开的算法:AI 时代的生存指南

文章目录 一、算法在生活中的“无处不在”二、算法在工作学习中的“智慧助力”三、算法在社会发展中的“驱动力量”四、算法带来的“双刃剑”效应五、应对算法挑战的策略《人人都离不开的算法——图解算法应用》编辑推荐1、通俗易懂2、技术科普3、贴近时代、贴近生活4、启发思考…

基于DWT(离散小波变换)的图像加密水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

华尔街基金经理为什么开始押注MVP币了?

目前,市场非常流行一种新兴的上市策略。 依靠正在被市场认可并有明显增长动力的 Meme 币,并围绕它构建一个社区,继而完成整个生态,最终,将由一系列产品完成生态的繁荣。 通过启动一个与热门 Meme 币原生集成的项目&a…

The Google File System [SOSP‘03] 论文阅读笔记

原论文:The Google File System 1. Introduction 组件故障是常态而非例外 因此,我们需要持续监控、错误检测、容错和自动恢复! 按照传统标准,文件数量巨大大多数文件都是通过添加新数据而不是覆盖现有数据来改变的,因…

大数据实验统计-1、Hadoop安装及使用;2、HDFS编程实践;3、HBase编程实践;4、MapReduce编程实践

大数据实验统计 1、Hadoop安装及使用; 一.实验内容 Hadoop安装使用: 1)在PC机上以伪分布式模式安装Hadoop; 2)访问Web界面查看Hadoop信息。 二.实验目的 1、熟悉Hadoop的安装流程。 2、…

Mybatis plue(二) 核心功能

核心功能 P5 条件构造器 mybatisplus支持各种复杂的where条件,可以满足日常开发的所有需求 wrapper就是条件构造器,wrapper就是顶层的, 示例: 查询出名字带0,存款大于等于1000的人的id,username,info,balance字段 Testvoid te…

简单的安全密码生成器PwGen

什么是 PwGen ? PwGen 是一个简单的 Docker Web 应用程序,旨在生成具有可自定义选项的安全密码或密码短语。用户可以选择生成具有特定标准的随机密码或由随机单词组成的密码。其他功能包括在密码中包含大写字母、数字和特殊字符的选项,或者将…

如何在比特币上验证ZK Proofs

1. 引言 前序博客有: 基于BitVM的乐观 BTC bridgeBitVM:Bitcoin的链下合约Bitcoin Bridge:治愈还是诅咒?BitVM2:比特币上的无需许可验证以比特币脚本来实现SNARK VerifierClementine:Citrea的基于BitVM的…

【性能测试】接口测试各知识第1篇:接口测试,学习目标【附代码文档】

接口测试完整教程(附代码资料)主要内容讲述:接口测试,学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标,RESTFUL1. 理解接口的概念,2.什么是接口测试…

Day65-企业级防火墙iptables精讲1

Day65-企业级防火墙iptables精讲1 补充:1.什么是防火墙?2.防火墙种类2.1 商用防火墙介绍2.2 Linux下防火墙介绍 3.选择何种防火墙?4.企业级架构最佳防火墙场景5.学好iptables的技术栈基础6.Iptables是什么?7.Iptables企业常用场景…

C++的并发世界(三)——线程对象生命周期

0.案例代码 先看下面一个例子&#xff1a; #include <iostream> #include <thread>void ThreadMain() {std::cout << "begin sub thread:" << std::this_thread::get_id()<<std::endl;for (int i 0; i < 10; i){std::cout <&…

海豚调度任务类型Apache SeaTunnel部署指南

Apache DolphinScheduler已支持Apache SeaTunnel任务类型&#xff0c;本文介绍了SeaTunnel任务类型如何创建&#xff0c;任务参数&#xff0c;以及任务样例。 一、Apache SeaTunnel SeaTunnel 任务类型&#xff0c;用于创建并执行 SeaTunnel 类型任务。worker 执行该任务的时…

前端学习<四>JavaScript基础——01-编程语言和JavaScript简介

计算机语言 概念 计算机语言&#xff1a;人与计算机之间通信的语言。它是人与计算机之间传递信息的媒介&#xff0c;它通过特定的语法规则和语义约定&#xff0c;将人类可理解的指令转化为计算机可以执行的机器指令。 计算机程序&#xff1a;就是计算机所执行的一系列的指令…

关联对象介绍

关联对象的作用 在分类里面&#xff0c;不可以直接为分类添加属性 在代理中&#xff0c;不可以直接为代理添加属性 在普通类中&#xff0c;property (assign, nonatomic) int age; 会做三件事&#xff1a; 生成age的成员变量生成age的get、set方法的声明生成age的get、set方…

使用 Docker 部署 Puter 云桌面系统

1&#xff09;Puter 介绍 :::info GitHub&#xff1a;https://github.com/HeyPuter/puter ::: Puter 是一个先进的开源桌面环境&#xff0c;运行在浏览器中&#xff0c;旨在具备丰富的功能、异常快速和高度可扩展性。它可以用于构建远程桌面环境&#xff0c;也可以作为云存储服…

codeforces Edu 142 D. Fixed Prefix Permutations 【思维、字典树求LCP】

D. Fixed Prefix Permutations 题意 给定 n n n 个长度为 m m m 的排列 a 1 , a 2 , . . . a n a_1,a_2,...a_n a1​,a2​,...an​ 定义一个排列 p p p 的 价值 为 最大顺序长度 k k k&#xff1a; p 1 1 , p 2 2 , p 3 3 , . . . p k k p_1 1,p_2 2, p_3 3, ...…