1M 웹소켓 연결을 처리하는 방법(Nginx/HAProxy/Amazon/Google)

1M 웹소켓 연결을 처리하는 방법(Nginx/HAProxy/Amazon/Google)

무엇nginx또는하프록시대상에 대한 설정이 제안되었습니다.100K동시 웹소켓 연결? 내 생각에 단일 nginx는 이러한 트래픽과 동시 연결을 처리할 수 없습니다. nginx/haproxy에 대한 트래픽을 어떻게 분할해야 합니까(DNS lvl 또는 사용 가능한 Amazon/Google 옵션)? 단일 nginx가 처리할 수 있는 동시 웹소켓 수는 얼마나 됩니까?

Google 검색 및 SO 게시물에서 관련 정보 수집을 시도했습니다.

답변1

더 높은 로드에서도 haproxy 로드 밸런서 뒤에서 채팅 서버를 실행하는 사람들이 있습니다. 개인 이메일(통계 페이지 사본 포함)로 나에게 보고된 가장 높은 로드는 프로세스당 약 300,000개의 연결(따라서 600,000개의 소켓)이었습니다. Linux에서는 기본적으로 프로세스가 100만 개의 파일 설명자(따라서 500,000개의 종단 간 연결)로 제한되지만 /proc에서 조정할 수 있습니다.

이러한 로드에서 고려해야 할 가장 중요한 사항은 필요한 RAM의 양입니다. 커널 측 소켓 버퍼에는 항상 방향당 최소 4kB가 필요하므로 종단 간 연결당 최소 16kB가 필요합니다. HAProxy 1.5 이하에는 연결당 2개의 버퍼가 있습니다(예: 웹소켓에는 4kB 버퍼이면 충분합니다). 1.6은 이러한 버퍼 없이 실행될 수 있으며 데이터와의 드문 연결에만 할당된 상태를 유지할 수 있습니다. 따라서 최소 백만 연결당 RAM은 16GB, 이전 버전에서는 약 24GB입니다. 대기 시간을 줄이기 위해 SMP 시스템의 여러 프로세스에 이를 분산시키는 것이 좋습니다. 단순히 1M 연결을 설정하려면 100,000 연결/초에서 10초가 걸릴 수 있습니다. 이러한 모든 연결은 각각 몇 바이트에 대한 일부 작업을 유발하며 1M 활성 연결을 처리하면 확실히 중요한 작업과 시스템에 높은 부하가 발생합니다.

관련 정보