최근 NGINX가 WebSocket 연결의 부하를 분산할 때 얼마나 확장 가능한지 테스트했습니다. 활성 WebSocket 연결이 50,000개인 경우에도 NGINX에는 1GB 미만의 메모리와 CPU 코어 1개 미만의 처리 용량만 필요했습니다. 또한 트래픽이 매우 많은 연결로 부하를 가했을 때도 메모리 사용량은 안정적이었으며 메시지 크기보다 더 느리게 증가했습니다. 실제 환경에서의 성능은 애플리케이션의 특성에 따라 달라지지만, 이 테스트 결과를 통해 NGINX가 사용할 것으로 예상되는 리소스의 양을 어느 정도 가늠할 수 있습니다.
테스트 환경
이 테스트에는 다음 머신이 사용되었습니다:
- 부하 생성기 – thor(6코어 Xeon EX5645 @ 2.40 GHz, 48 GB RAM)
- NGINX – 버전 1.7.0, x86_64, 6코어 Xeon E5645 @ 2.40 GHz, 48 GB RAM에서 6개 워커로 실행
- WebSocket 백엔드 – 4코어 Xeon E5-2660 0 @ 2.20 GHz, 8 GB RAM에서 실행되는 Node.js 에코 서버
테스트
두 가지 테스트를 진행했습니다.
첫 번째 테스트 세트에서는 수명이 길고 대부분 유휴 상태인 연결을 시뮬레이션했습니다. 연결 수는 1,000개에서 50,000개, 메시지 크기는 10바이트에서 4,096바이트, 메시지 전송 주기는 0.1초에서 10초(낮은 빈도로 간주)까지 다양하게 설정했습니다.
결과에 따르면 WebSocket 연결에 필요한 총 메모리는 연결 수에 따라 달라지며, 연결당 사용되는 메모리는 일정합니다. 메모리 사용률은 메시지 크기나 빈도의 영향을 받지 않습니다. CPU 사용률은 대체로 연결 수에 비례하며, 연결 수가 50,000개일 때도 CPU 코어 하나를 모두 사용하지 않았습니다. 여기에 표시된 CPU 사용률은 모든 코어의 CPU 사용률을 합산하여 단일 코어 기준으로 정규화한 값입니다. 다음 그래프는 이 테스트 세트의 결과를 보여 줍니다:




두 번째 테스트 세트에서는 수명은 짧지만 활동량이 매우 많은 연결을 시뮬레이션했습니다. 동시 연결 수는 500개로 일정하게 유지했으며, 연결당 메시지 수는 50개였고 메시지 간 지연은 없었습니다. 메시지 크기는 1바이트에서 4096바이트까지였습니다.
결과에 따르면 동시 연결 수가 고정된 경우 전체 메모리 사용량과 연결당 메모리 사용량은 메시지 크기의 영향을 받지만, 두 경우 모두 메모리 사용량의 변화는 크지 않으며 선형보다 완만하게 증가해 증가 폭이 15% 미만입니다.




요약
이 테스트에서 NGINX는 WebSocket 서버를 프록시할 때 예측 가능하고 확장성 있는 성능을 제공했습니다. 이 테스트는 합성 테스트로, 실제 애플리케이션 환경을 반드시 대변하는 것은 아니므로 다른 시스템에서 수행한 테스트 결과는 다를 수 있습니다. 자세한 내용은 다음을 참조하세요:
작성자 소개

관련 블로그 게시물
시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.
F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.
Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.
진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.
NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.
Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.