麦斯科技 · 2022年06月13日

Apache APISIX 在Amazon Graviton3 上的安装和性能测试

https://mp.weixin.qq.com/s/VX...

作者:赵士瑞 2022年6月10日

前言

亚马逊云科技在 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+LuaJIT 和 etcd 来实现,和传统 API 网关相比,APISIX 具备动态路由和插件热加载的特点,特别适合云原生架构下的 API 管理。

640.png

准备:安装部署

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

640_003.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 对比
    640_002.jpg
  2. Latency 对比
    640.jpg
    640_002.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 和源堡科技安全团队等专业网络安全机构测试,并得到了高度认可。

推荐阅读
关注数
5845
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息