블로그 | NGINX

NGINX 웹소켓 성능

NGINX-F5-수평-검정-유형-RGB의 일부
릭 넬슨 썸네일
릭 넬슨
2014년 6월 24일 게시

최근 우리는 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.20GHz, 8GB RAM의 Node.js 에코 서버

테스트

우리는 두 세트의 테스트를 실행했습니다.

첫 번째 테스트 세트에서는 오랫동안 지속되고 대부분 유휴 상태인 연결을 시뮬레이션했습니다. 연결 수는 1,000~50,000개, 메시지 크기는 10~4096바이트, 메시지 빈도는 0.1~10초(낮은 것으로 간주)였습니다.

결과는 WebSocket 연결에 필요한 총 메모리는 연결 수에 따라 달라지며, 연결당 사용되는 메모리는 일관적임을 보여줍니다. 메모리 사용률은 메시지 크기나 빈도의 영향을 받지 않습니다. CPU 사용률은 기본적으로 연결 수에 따라 추세를 보이며, 50,000개의 연결에서도 전체 CPU 코어를 사용하지 않았습니다. 여기에 표현된 CPU 사용률은 모든 코어의 CPU 사용률을 더하여 단일 코어로 정규화되었습니다. 다음 그래프는 이 테스트 세트의 결과를 보여줍니다.

콘1


씨퓨1


메모1


멤크1

두 번째 테스트에서는 수명이 짧지만 매우 활발한 연결을 시뮬레이션했습니다. 동시 연결 수는 500으로 일정하게 유지되었으며, 연결당 메시지 수는 50개이고 메시지 간에 지연은 없었습니다. 메시지 크기는 1~4096바이트입니다.

결과에 따르면 동시 연결 수가 고정되어 있을 때 총 메모리 사용량은 메시지 크기의 요인이며 연결당 사용되는 메모리도 마찬가지지만 두 경우 모두 메모리 양은 크게 변하지 않고 15% 미만으로 증가하는 준선형 방식으로 변합니다.

사이즈2


씨퓨2


메모2


멤크2

요약

이러한 테스트에서 NGINX는 WebSocket 서버를 프록싱할 때 예측 가능하고 확장 가능한 성능을 제공했습니다. 이러한 테스트는 합성적인 테스트였으며 반드시 실제 상황을 대표하는 것은 아니므로 다른 시스템에서 수행한 테스트의 결과는 다를 수 있습니다. 자세한 내용은 다음을 참조하세요.


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."