Azure ARM 아키텍처 서버의 성능은 어떨까요?
API7.ai
August 8, 2022
배경
4월에 Microsoft는 Ampere® Altra® Arm 프로세서 기반의 Azure 가상 머신 제품군의 미리 보기를 발표했습니다. 새로운 VM 시리즈에는 범용 Dpsv5와 메모리 최적화 Epsv5 VM이 포함됩니다. 자세한 내용은 다음 그림을 참조하세요:
특히, Ampere® Altra® Arm은 클라우드 네이티브 프로세서이며, Ampere® Altra® Arm 프로세서 기반의 Azure 가상 머신은 확장 가능한 클라우드 네이티브 애플리케이션을 효율적으로 실행할 수 있습니다.
그렇다면 실제 경험과 성능은 어떨까요? 클라우드 네이티브 API 게이트웨이를 예로 들어 Arm 아키텍처 기반의 Azure 가상 머신의 성능을 보여드리겠습니다. 여기서는 범용 Dpdsv5 시리즈 가상 머신 환경에서 Apache APISIX를 설치하고 테스트하도록 선택했습니다.
Apache APISIX는 클라우드 네이티브, 고성능, 확장 가능한 API 게이트웨이입니다. NGNIX + LuaJIT 및 etcd를 기반으로 하는 APISIX는 전통적인 API 게이트웨이와 비교하여 동적 라우팅 및 플러그인 핫 로딩의 특징을 가지고 있어, 클라우드 네이티브 아키텍처 하에서의 API 관리에 특히 적합합니다.
사전 준비
먼저, Azure에서 Dpdsv5 시리즈 인스턴스를 시작하고 운영 체제로 Ubuntu 20.04를 선택해야 합니다.
그런 다음 Docker를 설치하여 이후 컨테이너화된 방식으로 Apache APISIX를 설치하고 배포할 수 있도록 합니다.
sudo apt-get update && sudo apt-get install docker.io
Apache APISIX 배포
Apache APISIX는 etcd를 구성 센터로 사용하므로 먼저 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
그런 다음 Apache 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
.....
Azure Ddsv5 vs Azure Dpdsv5
위의 작업을 통해 Azure Dpdsv5에서 Apache APISIX의 설치 및 호환성 테스트를 성공적으로 완료할 수 있습니다. 그렇다면 Azure Dpdsv5의 실제 성능은 어떨까요? 다음으로, Azure Dpdsv5와 Azure Ddsv5에서 Apache APISIX를 사용하여 성능 테스트 비교를 수행하여 실제 성능을 확인해 보겠습니다.
Azure Ddsv5는 Azure D 시리즈의 또 다른 모델로, Intel® x86 아키텍처를 기반으로 하므로 위의 etcd 설치 단계가 약간 다릅니다:
sudo docker run -d --name etcd
-p 2379:2379
-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
-e ALLOW_NONE_AUTHENTICATION=yes
-e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
bitnami/etcd:3.4.16
단일 업스트림 + 플러그인 없음
단일 업스트림을 사용하고, 플러그인 없이 테스트합니다. 주로 순수 프록시 백엔드 모드에서 APISIX의 성능을 테스트합니다.
# apisix: 1 worker + 1 upstream + no plugin
# create route
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
}
}
}'
단일 업스트림 + 두 개의 플러그인
단일 업스트림을 사용하고, 두 개의 플러그인을 사용합니다. 주로 limit-count와 prometheus와 같은 두 가지 핵심 성능 소모 플러그인이 활성화된 상태에서 APISIX의 성능을 테스트합니다.
# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)
# create route
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(초당 쿼리 수)와 지연 시간 두 가지 수준에서 관련 테스트와 비교를 수행했습니다. 결과는 다음과 같습니다:
-
QPS 비교
-
지연 시간 비교
| | 단일 업스트림 + 플러그인 없음 | 단일 업스트림 + 두 개의 플러그인 | | ------------------ | --------------------------- | ----------------------------- | --------------- | ---------------- | | | Azure Ddsv5 | Azure Dpdsv5 | Azure Ddsv5 | Azure Dpdsv5 | | QPS(request/s) | 14900 | 13400 | 13100 | 11000 | | Latency(ms) | 1.07 | 1.21 | 1.21 | 1.43 |
위 데이터에서도 알 수 있듯이, API 게이트웨이와 같은 네트워크 IO 집약적인 컴퓨팅 시나리오에서 Dpdsv5는 동일한 시리즈의 Ddsv5에 비해 성능 차이가 있습니다. 그러나 또 다른 좋은 소식은 동일한 구성에서 Dpdsv5의 가격이 Ddsv5보다 약 20% 저렴하다는 점입니다. 실제 머신 선택 시 사용자는 자신의 비즈니스 규모에 따라 유연하게 결정할 수 있습니다.
요약
이 글은 주로 Apache APISIX를 사용하여 Azure Ddsv5와 Azure Dpdsv5의 성능을 비교했습니다. API 게이트웨이와 같은 네트워크 IO 집약적인 컴퓨팅 시나리오에서 Azure Dpdsv5는 Ddsv5에 비해 그다지 빛나지 않지만, 이 시리즈 모델이 아직 미리 보기 단계이므로 Microsoft는 지속적인 개선과 최적화를 진행 중입니다. 그 후속을 기대해 봅니다.
참고 자료
Now in preview: Azure Virtual Machines with Ampere Altra Arm-based processors