최근에 우리는 WebSocket 연결의 부하 분산을 위한 NGINX의 확장성을 테스트했습니다 . 50,000개의 활성 WebSocket 연결에서도 NGINX는 1GB 미만의 메모리와 1코어 미만의 CPU 용량을 필요로 했으며, 매우 바쁜 연결로 로드되었을 때 메모리 사용량은 안정적이었고 메시지 크기보다 느리게 증가했습니다. 사용자 환경의 성능은 애플리케이션의 특성에 따라 달라지지만 이러한 테스트의 결과는 NGINX가 사용할 수 있는 리소스 양을 어느 정도 나타낼 수 있습니다.
테스트 환경
이 테스트에는 다음 기계가 사용되었습니다.
- 로드 생성기 - 6코어 Xeon EX5645 @ 2.40GHz, 48GB RAM의 Thor
- NGINX – 버전 1.7.0, x86_64, 6코어 Xeon E5645 @ 2.40GHz, 48GB RAM에 6개 작업자 포함
- WebSocket 백엔드 - 4코어 Xeon E5-2660 0 @ 2.20 GHz, 8GB RAM의 Node.js 에코 서버
테스트
우리는 두 세트의 테스트를 실행했습니다.
첫 번째 테스트 세트는 오래 지속되고 대부분 유휴 상태인 연결을 시뮬레이션했습니다. 연결 수는 1,000에서 50,000까지, 메시지 크기는 10에서 4096바이트까지, 메시지 빈도는 0.1에서 10초까지(낮다고 간주) 다양했습니다.
결과는 WebSocket 연결에 필요한 총 메모리는 연결 수에 따라 달라지며 연결당 사용되는 메모리는 일관됨을 보여줍니다. 메모리 사용률은 메시지 크기나 빈도의 영향을 받지 않습니다. CPU 사용률은 기본적으로 연결 수에 따라 추세를 보이며 50,000개의 연결에서도 전체 CPU 코어를 사용하지 않았습니다. 여기에 표현된 CPU 사용률은 모든 코어에서 CPU 사용률을 더하여 단일 코어로 정규화됩니다. 다음 그래프는 이 테스트 세트의 결과를 보여줍니다.




두 번째 테스트 세트는 수명이 짧지만 매우 활발한 연결을 시뮬레이션했습니다. 동시 연결 수는 500으로 일정하게 유지되었고, 연결당 메시지는 50개이고 메시지 간 지연은 없었습니다. 메시지 크기는 1~4096바이트였습니다.
결과에 따르면 동시 연결 수가 고정되어 있을 때 전체 메모리 사용률은 메시지 크기에 따라 달라지며, 연결당 사용되는 메모리도 마찬가지입니다. 하지만 두 경우 모두 메모리 양은 크게 변하지 않고 15% 미만으로 증가하는 등 선형적이지 않은 방식으로 변합니다.




요약
이러한 테스트 동안 NGINX는 WebSocket 서버를 프록싱할 때 예측 가능하고 확장 가능한 성능을 제공했습니다. 이는 합성 테스트였으며 반드시 실제 애플리케이션을 대표하는 것은 아니므로 다른 시스템에서 수행한 테스트 결과는 다를 수 있습니다. 자세한 내용은 다음을 참조하세요.
최근에 우리는 WebSocket 연결의 부하 분산을 위한 NGINX의 확장성을 테스트했습니다 . 50,000개의 활성 WebSocket 연결에서도 NGINX는 1GB 미만의 메모리와 1코어 미만의 CPU 용량을 필요로 했으며, 매우 바쁜 연결로 로드되었을 때 메모리 사용량은 안정적이었고 메시지 크기보다 느리게 증가했습니다. 사용자 환경의 성능은 애플리케이션의 특성에 따라 달라지지만 이러한 테스트의 결과는 NGINX가 사용할 수 있는 리소스 양을 어느 정도 나타낼 수 있습니다.
테스트 환경
이 테스트에는 다음 기계가 사용되었습니다.
테스트
우리는 두 세트의 테스트를 실행했습니다.
첫 번째 테스트 세트는 오래 지속되고 대부분 유휴 상태인 연결을 시뮬레이션했습니다. 연결 수는 1,000에서 50,000까지, 메시지 크기는 10에서 4096바이트까지, 메시지 빈도는 0.1에서 10초까지(낮다고 간주) 다양했습니다.
결과는 WebSocket 연결에 필요한 총 메모리는 연결 수에 따라 달라지며 연결당 사용되는 메모리는 일관됨을 보여줍니다. 메모리 사용률은 메시지 크기나 빈도의 영향을 받지 않습니다. CPU 사용률은 기본적으로 연결 수에 따라 추세를 보이며 50,000개의 연결에서도 전체 CPU 코어를 사용하지 않았습니다. 여기에 표현된 CPU 사용률은 모든 코어에서 CPU 사용률을 더하여 단일 코어로 정규화됩니다. 다음 그래프는 이 테스트 세트의 결과를 보여줍니다.
두 번째 테스트 세트는 수명이 짧지만 매우 활발한 연결을 시뮬레이션했습니다. 동시 연결 수는 500으로 일정하게 유지되었고, 연결당 메시지는 50개이고 메시지 간 지연은 없었습니다. 메시지 크기는 1~4096바이트였습니다.
결과에 따르면 동시 연결 수가 고정되어 있을 때 전체 메모리 사용률은 메시지 크기에 따라 달라지며, 연결당 사용되는 메모리도 마찬가지입니다. 하지만 두 경우 모두 메모리 양은 크게 변하지 않고 15% 미만으로 증가하는 등 선형적이지 않은 방식으로 변합니다.
요약
이러한 테스트 동안 NGINX는 WebSocket 서버를 프록싱할 때 예측 가능하고 확장 가능한 성능을 제공했습니다. 이는 합성 테스트였으며 반드시 실제 애플리케이션을 대표하는 것은 아니므로 다른 시스템에서 수행한 테스트 결과는 다를 수 있습니다. 자세한 내용은 다음을 참조하세요.
위 내용과 같이 NGINX Plus를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
전문가에게 상담받기