Programming

1,000,000 개의 웹 소켓을 열어두기 위해 몇 개의 시스템 리소스가 보유됩니까?

procodes 2020. 8. 5. 20:25
반응형

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


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


업데이트 된 답변

짧은 대답 : 예, 그러나 비쌉니다.

긴 대답 :

WebSocket은 기본적으로 HTTP와 같은 핸드 셰이크와 메시지 프레임을 최소화하는 TCP 소켓이기 때문에이 질문은 WebSocket에 고유하지 않습니다.

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

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

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

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


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

본인의 테스트 (전체 공개 : 저는 Lightstreamer의 CTO입니다)를 기반으로 확인합니다.

우리는 일부 고객들에게 단일 박스 (그리고 반드시 수퍼 몬스터 기계는 아님)에서 백만 개의 연결에 도달 할 수 있음을 여러 번 입증해야했습니다. 그러나 500K 동시 연결을 테스트 한 구성을 요약 해 보겠습니다. 이는 Amazon EC2에서 수행 된 훨씬 최근 테스트이기 때문입니다.

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

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

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

최소 30GiB RAM을 사용하면 100 만 개의 동시 소켓을 처리 할 수 ​​있습니다. 필요한 CPU는 필요한 데이터 처리량에 따라 다릅니다.

참고 URL : https://stackoverflow.com/questions/17448061/how-many-system-resources-will-be-held-for-keeping-1-000-000-websocket-open

반응형