AWS Graviton3의 성능은 어떨까요?
API7.ai
June 7, 2022
배경
AWS는 2022년 5월 말에 최신 ARM 기반 AWS Graviton 프로세서 제품군인 AWS Graviton3를 출시했습니다. AWS 공식 데이터에 따르면, Graviton2 프로세서와 비교하여 선도적인 DDR5 메모리 기술을 기반으로 한 Graviton3 프로세서는 최대 25%의 성능 향상, 최대 2배의 부동 소수점 성능, 그리고 50% 더 빠른 메모리 접근 속도를 제공할 수 있습니다; Graviton3은 동일한 유형의 EC2 인스턴스에서 60% 더 적은 에너지를 사용합니다.
그렇다면 실제 데이터는 어떨까요? 네트워크 IO가 집중된 API Gateway를 예로 들어 AWS Graviton3의 성능을 살펴보겠습니다. 여기서는 Apache APISIX를 사용하여 AWS Graviton2 (C6g)와 AWS Graviton3 (C7g) 서버 환경에서 성능 비교 테스트를 수행합니다.
Apache APISIX는 클라우드 네이티브, 고성능, 확장 가능한 API 게이트웨이입니다. NGNIX+LuaJIT와 etcd를 기반으로 하며, 전통적인 API 게이트웨이와 비교하여 APISIX는 동적 라우팅 및 플러그인 핫 로딩 기능을 가지고 있어 클라우드 네이티브 아키텍처 하의 API 관리에 특히 적합합니다.
설치 및 배포
ARM64 칩이 탑재된 서버를 준비합니다. 여기서는 Amazon EC2 C7g(현재 이 모델만 AWS Graviton3를 지원)를 선택하고, 운영 체제는 Ubuntu 20.04를 선택합니다.
Docker 설치를 잊지 마세요:
sudo apt-get update && sudo apt-get install docker.io
Apache APISIX는 최신 버전의 ARM64 이미지를 출시했으며, Docker를 사용하여 한 번에 배포할 수 있습니다. 자세한 과정은 아래를 참조하세요.
- 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
- APISIX 시작
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
- 라우트 등록
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
}
}
}'
- 테스트
curl -i http://127.0.0.1:9080/anything/das
HTTP/1.1 200 OK
.....
AWS Graviton2와 AWS Graviton3의 성능 비교
이전 작업에 따라, 공식 스크립트를 기반으로 AWS Graviton3 프로세서에서 APISIX의 설치 및 호환성 테스트를 성공적으로 완료했습니다. 이제 Apache APISIX가 AWS Graviton2 (C6g)와 AWS Graviton3 (C7g)에서 어떻게 성능을 발휘하는지 살펴보겠습니다.
간단히 하기 위해, 이 테스트에서는 APISIX에서 하나의 Worker만 활성화했으며, 다음 성능 테스트 데이터는 모두 단일 코어 CPU에서 실행되었습니다.
시나리오 1: 단일 업스트림
단일 업스트림을 사용하며, 어떠한 플러그인도 사용하지 않습니다. 이는 순수 프록시 백엔드 모드에서 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
}
}
}'
시나리오 2: 단일 업스트림 + 두 개의 플러그인
단일 업스트림을 사용하며, 두 개의 플러그인을 사용합니다. 이는 limit-count
와 prometheus
라는 두 가지 핵심 성능 소모 플러그인이 활성화된 상태에서 APISIX의 성능을 주로 테스트합니다.
# 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
}
}
}'
데이터 비교
위의 두 시나리오에서, 요청 처리와 지연 시간 두 가지 수준에서 관련 테스트와 비교를 수행했습니다. 결과는 다음과 같습니다:
- QPS 비교
- 지연 시간 비교
위 데이터에서도 볼 수 있듯이, API Gateway와 같은 네트워크 IO 집중 컴퓨팅 시나리오에서 AWS Graviton3은 AWS Graviton2에 비해 성능을 76% 향상시키고, 지연 시간을 38% 줄였습니다. 이 데이터는 처음에 언급한 AWS의 공식 데이터(25% 성능 향상)보다 더 우수합니다.
요약
이 글은 주로 Apache APISIX를 사용하여 AWS Graviton3와 AWS Graviton2의 성능을 비교했습니다. API 게이트웨이의 네트워크 IO 집중 컴퓨팅 시나리오에서 AWS Graviton3은 성능 괴물의 속성을 보여줍니다. 물론, 많은 실습을 권장하며, 앞으로 더 많은 컴퓨팅 집약적인 프로젝트에 대한 테스트 데이터를 기대합니다.