AI Briefing

실시간 댓글 개발기(2): GoLang 클라이언트로 10k 커넥션 검증 및 인프라 튜닝기

·2020.06.15 00:00

핵심 내용

DAU 60만 Alex 댓글 서비스의 실시간 서버 안정화를 위해 GoLang 클라이언트로 10k 커넥션을 검증하고, VIP TPS 제한 및 파일 디스크립터 튜닝으로 장애를 해결했다.

1 / 13

자세히 보기

DAU 60만 규모인 Alex 댓글 서비스를 위해 실시간 댓글 서버 한 대당 10k 커넥션과 2800 TPS를 안정적으로 유지하는 것이 목표였다. 기존 HTTP 기반 테스트 도구인 nGrinder는 소켓 연결 유지와 STOMP 프로토콜 처리에서 불안정하여, 리소스 효율이 높은 GoLang으로 직접 클라이언트를 제작해 테스트를 진행했다.

인프라 및 네트워크 튜닝

테스트 중 발생한 간헐적 메모리 부족과 커넥션 단절 문제는 VIP의 TPS 제한과 VM 환경의 '시끄러운 이웃(Noisy Neighbor)' 현상 때문인 것으로 파악되었다. 이를 해결하기 위해 VIP의 최대 TPS를 조정하고, 물리 서버(PM)로 전환하여 리소스 경합을 제거했다. 또한 OS 차원의 fileDescriptor 한계를 커널 허용치까지 상향 조정하고, Docker 컨테이너 설정을 최적화하여 연결 수를 확보했다.

애플리케이션 및 메모리 최적화

Spring WebSocket 내부 구조 분석을 위해 Neo와 fastThread를 활용해 데드락과 블로킹 코드를 식별했다. 특히 DestinationCache 클래스가 다수 스레드를 차단하는 문제를 발견하고 해당 로직을 수정했다. 메모리 관리 측면에서는 STOMP의 SUBSCRIBE/UNSUBSCRIBE 빈도가 높을 때 GC 부하가 심해지는 현상을 확인했다. 이에 따라 SynchronousQueue 대신 기존 큐 방식을 유지하되, Xms, Xmx, Xss 값을 세밀하게 조정하여 GC 발생 시에도 요청 처리 속도가 급격히 저하되지 않도록 튜닝했다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.