热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ApacheAPISIX在AmazonGraviton3上的安装和性能测试

前言亚马逊云科技在2022年5月底正式推出基于AmazonGraviton3处理器的计算优化型实例C7g[1]。与AmazonGraviton2处理器相比,基于领先的

ff0568ecccffe1da0d196279c18f163f.gif

前言

亚马逊云科技在 2022 年 5 月底正式推出基于  Amazon Graviton3 处理器的计算优化型实例C7g[1]。

与 Amazon Graviton2 处理器相比,基于领先的 DDR5 内存技术,Graviton3 处理器可提供高达 25% 的性能提升、高达 2 倍的浮点性能以及 50% 的内存访问速度;在性能与同类 EC2 实例相同的情况下,Graviton3 还可减少 60% 的能源。

那么实际数据会怎样呢?让我们以网络 IO 密集型的 API 网关为例,来看看 Graviton3 的表现如何。在这里我们使用 Apache APISIX 在 Graviton2 (C6g) 和 Graviton3 (C7g) 两种服务器环境下进行性能对比测试。

Apache APISIX 是一个云原生、高性能、可扩展的 API 网关。基于 NGNIX+LuaJITetcd 来实现,和传统 API 网关相比,APISIX 具备动态路由和插件热加载的特点,特别适合云原生架构下的 API 管理。

0896b75e353fd86046428b054a152e14.png

准备:安装部署

在进行测试前,需要准备一台搭载 ARM64 芯片的服务器,这里我们选用了 Amazon EC2 C7g(现在只有这个型号才搭载 Amazon Graviton3),操作系统选择了 Ubuntu 20.04

f8a3e7acd8544c6f9c2edadfd47c4833.png

同时安装 Docker。

sudo apt-get update && sudo apt-get install docker.io

目前,APISIX 已经发布了最新版本的 ARM64 镜像,可以使用 Docker 方式进行一键部署。具体过程可参考下方:

1. 启动 etcd

sudo docker run -d \

--name etcd -p 2379:2379 -e ETCD_UNSUPPORTED_ARCH=arm64 \

-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \

-e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 \

rancher/coreos-etcd:v3.4.16-arm64

2. 启动 APISIX

sudo docker run --net=host -d apache/apisix:2.14.1-alpine

3. 注册路由

curl "http://127.0.0.1:9080/apisix/admin/routes/1" \

-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '

{

 "uri": "/anything/*",

"upstream": {

   "type": "roundrobin",

   "nodes": {

"httpbin.org:80": 1

   }

 }

}'

4. 访问测试

curl -i http://127.0.0.1:9080/anything/das

HTTP/1.1 200 OK

.....

 Graviton2 和  Graviton3 的性能对比

根据前文的操作,基于官方脚本 [2] 成功完成了 APISIX 在 Amazon Graviton3 处理器上安装和兼容性测试。下面让我们来看看 APISIX 在 Graviton2 (C6g) 和  Graviton3 (C7g) 上的性能表现。

为了方便测试,本示例中 APISIX 只开启了一个 Worker,下面的性能测试数据都是在单核 CPU 上运行的。

场景一:单个上游

该场景下使用单个上游(不包含任何插件),主要测试 APISIX 在纯代理回源模式下的性能表现。在本地环境中进行测试:

# apisix: 1 worker + 1 upstream + no plugin

#注册路由

curl http://127.0.0.1:9080/apisix/admin/routes/1 \

-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

{  

   "uri": "/hello",

   "plugins": {

   },

   "upstream": {

       "type": "roundrobin",

       "nodes": {

           "127.0.0.1:1980":1

       }

   }

}'

场景二:单上游+多插件 

另一场景则使用单上游与多插件配合,在这里使用了两个插件。主要测试 APISIX 在开启 limit-count prometheus 两个核心消耗性能插件时的性能表现。

# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)

#注册路由

curl http://127.0.0.1:9080/apisix/admin/routes/1 \

-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

{

   "uri": "/hello",

   "plugins": {

       "limit-count": {

           "count": 2000000000000,

           "time_window": 60,

           "rejected_code": 503,

           "key": "remote_addr"

       },

       "prometheus": {}

   },

   "upstream": {

       "type": "roundrobin",

       "nodes": {

 "127.0.0.1:1980":1

       }

   }

}'

数据对比

在上述两种场景下,分别从请求处理和延迟时间两个层面进行了相关测试与对比。结果如下:

1. QPS 对比

5c7e1c188b410bc97afe3d146f115173.png

2. Latency 对比

9e9b3aa648599da9bb2a4c51b89d128c.png

2e6b4a7f004bb176d1fe090f7f3085cc.png

从上方数据可以看到,在 API 网关这样 网络 IO 密集型的计算场景下,Amazon Graviton3 比 Amazon Graviton2 的性能提升了 76%,同时延迟还降低了 38%。这个数据比开头提到的(25%性能提升)还要优异。

总结

本文主要通过使用 Apache APISIX 进行了  Graviton3 与  Graviton2 的性能对比,可以看到在 API 网关 这种网络 IO 密集型的计算场景下,Amazon Graviton3 可谓展示了性能怪兽的属性。当然,也推荐大家多多进行实践,期待后续更多计算密集型项目的测试数据。

参考资料:

[1]https://aws.amazon.com/cn/blogs/aws/new-amazon-ec2-c7g-instances-powered-by-aws-graviton3-processors/

[2]https://github.com/apache/apisix/blob/master/benchmark/run.sh

关于 Apache APISIX

Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。

作为 API 网关,Apache APISIX 可以帮助企业快速、安全地处理 API 和微服务流量,可应用于网关、Kubernetes Ingress 和服务网格等场景。目前已被普华永道数据安全团队、腾讯蓝军、平安银河实验室、爱奇艺 SRC 和源堡科技安全团队等专业网络安全机构测试,并得到了高度认可。

54ba9e07b8209ef615d03bff93cd4d38.gif

 



推荐阅读
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • redis知识汇总[随笔记录]
      ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 在ubuntu服务器上安装vscode,但是目前使用的方法都无法成功。第一次安装经历:安装完anaconda后有自动安装vscode的选项,输入yes后,没有出现错误,但是在终端输 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Harmony 与 Game Space 达成合作,在 Shard1 上扩展 Web3 游戏
    旧金山20 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
  • 用ESP32与Python实现物联网(IoT)火焰检测报警系统
    下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明。在硬件连线完成之后我们建议您先使用“一分钟上云体验”功能预先体验本案例的实际运行效果 ... [详细]
author-avatar
勤劳的蛇zhong_138
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有