1,000,000 개의 웹 소켓을 열어두기 위해 얼마나 많은 시스템 리소스가 보관됩니까? [닫은]


122

Websocket은 좋지만 1,000,000 개의 동시 연결을 처리 할 수 ​​있습니까?
1,000,000 개의 웹 소켓을 열어두기 위해 얼마나 많은 시스템 리소스가 보관됩니까?

답변:


65

업데이트 된 답변

짧은 대답 : 네,하지만 비싸요.

긴 대답 :

이 질문은 WebSocket에만 국한되지 않습니다. WebSocket은 기본적으로 HTTP와 유사한 핸드 셰이크와 최소한의 메시지 프레임을 사용하는 수명이 긴 TCP 소켓이기 때문입니다.

진짜 질문은 단일 서버가 1,000,000 개의 동시 소켓 연결을 처리 할 수 ​​있으며 이것이 소비하는 서버 리소스는 무엇입니까? 대답은 여러 요인으로 인해 복잡하지만 적절한 크기의 시스템 (많은 CPU, RAM 및 빠른 네트워킹)과 조정 된 서버 시스템 및 최적화 된 서버 소프트웨어를 사용하면 1,000,000 개의 동시 활성 소켓 연결이 가능합니다.

연결 수는 주요 문제가 아닙니다 (대부분 커널 튜닝 및 충분한 메모리 문제). 각 연결에서 데이터를 처리하고 송수신하는 것입니다. 들어오는 연결이 장기간에 걸쳐 분산되어 있고 대부분 유휴 상태이거나 가끔씩 작은 덩어리의 정적 데이터를 전송하는 경우 동시 연결 수는 1,000,000 개보다 훨씬 더 많을 수 있습니다. 그러나 이러한 조건 (대부분 유휴 상태 인 느린 연결)에서도 많은 수의 연결을 처리하도록 구성 및 설계되지 않은 네트워크, 서버 시스템 및 서버 라이브러리에 문제가 발생합니다.

500,000 연결에 대한 대략적인 리소스 사용량에 대한 Alessandro Alinone의 답변을 참조하십시오.

다음은 많은 수의 연결을 지원하도록 서버를 구성하고 서버 소프트웨어를 작성하는 방법에 대해 읽어 볼 수있는 오래되었지만 여전히 적용 가능한 리소스입니다.


1
단일 JVM에서 약 1,200 만 개의 소켓 연결이 가능합니다. 그들이 그것을 어떻게했는지를 참조하십시오 mrotaru.wordpress.com/2013/10/10/...
자크 Koorts을

@JacquesKoorts thx
BG BRUNO

159

오늘날의 시스템에서 1 백만 개의 동시 TCP 연결을 처리하는 것은 문제가되지 않습니다.

자체 테스트를 통해 확인할 수 있습니다 (전체 공개 : 저는 Lightstreamer의 CTO입니다).

우리는 일부 고객에게 단일 상자에서 100 만 개의 연결에 도달 할 수 있음을 여러 번 증명해야했습니다 (반드시 슈퍼 몬스터 머신 일 필요는 없음). 그러나 이것은 Amazon EC2에서 수행 된 훨씬 더 최근의 테스트이므로 500K 동시 연결을 테스트 한 구성을 다시 요약하겠습니다.

우리는 m2.4xlarge 인스턴스에 Lightstreamer 서버 (특히 WebSocket 서버)를 설치했습니다. 이는 8 코어와 68.4GiB 메모리를 의미합니다.

Lightstreamer 서버에 500,000 개의 동시 연결을 생성하기 위해 11 개의 클라이언트 시스템을 출시했습니다. 테스트는 서버의 총 아웃 바운드 처리량이 90,000 개 업데이트 / 초가되도록 구성되어 450Mbit / s의 아웃 바운드 대역폭이 최고가되도록했습니다.

서버는 13GiB 이상의 RAM을 사용하지 않았으며 CPU는 약 60 % 안정적이었습니다.

최소 30GiB RAM으로 1 백만 개의 동시 소켓을 처리 할 수 ​​있습니다. 필요한 CPU는 필요한 데이터 처리량에 따라 다릅니다.


7
나는 이것이 리눅스의 맛이라고 가정하고 있습니다. 커널이 어떻게 조정되었는지에 대한 추가 정보를 공유해 주시겠습니까? 최대 파일 설명자 / tcp 창 크기 등?
quixver

14
바닐라 Amazon Linux였습니다. 최대 파일 설명자가 증가했습니다. TCP 전송 버퍼가 1600 바이트로 감소했습니다 (Lightstreamer에서 기본적으로 수행되지만 수동으로 조정할 수 있음). MSS가 기본값입니다.
Alessandro Alinone 2014-06-23

이 소프트는 완전히 무료입니까 아니면 사용하려면 약간의 요금이 필요합니까?
Avtandil Kavrelishvili

@AvtandilKavrelishvili : 무료 버전과 유료 버전이 모두 있습니다.
Alessandro Alinone

웹 소켓 대신 정기적 인 폴링을 사용하면 서버에서 더 쉬울까요?
mFeinstein
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.