C10K 문제, 2000년대 초반에 이미 해결? - I/O 모델 심층 분석

by DD
5개월 전
조회수 43

C10K 문제는 웹 서버가 1만 명 이상의 동시 접속자를 처리하는 문제로, 2000년대 초반에 이미 해결책이 제시되었음.

다양한 I/O 모델 (select, poll, epoll, kqueue 등)과 쓰레딩 전략을 통해 성능을 개선하려는 시도가 있었으며, 각 모델의 장단점이 존재함.

커뮤니티에서는 성능 최적화를 위한 기술 선택과 함께, AIO (Asynchronous I/O)의 중요성을 강조하며, Zero-Copy 기술의 활용을 제안함.

I/O 모델 심층 분석: select, poll, epoll, kqueue

초창기 select()는 파일 디스크립터 개수 제한으로 인해 확장성에 한계가 있었다. poll()은 이러한 제한을 극복했지만, 파일 디스크립터가 많아질수록 성능 저하가 발생했다. 따라서 epollkqueue와 같은 Edge-triggered 방식의 Event notification이 등장하여, CPU 사용량을 줄이고 성능을 향상시켰다. 결과적으로, 최신 시스템에서는 epoll과 kqueue가 권장된다.

쓰레딩 모델 비교: 쓰레드 풀, AIO, Zero-Copy

쓰레드 기반 모델은 각 연결에 대해 별도의 쓰레드를 생성하여 Context Switching 오버헤드가 발생한다. AIO(Asynchronous I/O)는 디스크 I/O 병목 현상을 해결하지만, 구현의 복잡성이 단점이다. Zero-Copy 기술은 sendfile() 시스템 콜을 통해 데이터 복사를 최소화하여 성능을 극대화한다. 따라서, 시스템의 특성에 맞는 쓰레딩 모델과 I/O 방식을 선택해야 한다.

실전 적용 가이드: 성능 측정 및 최적화

성능 측정 도구를 사용하여 서버의 병목 지점을 파악하고, CPU 사용률, 메모리 사용량, 응답 시간 등을 모니터링해야 한다. Zero-Copy 기술 적용, Connection Pooling 활용, 비동기 I/O 사용 등을 통해 성능을 개선할 수 있다. 따라서, 프로파일링을 통해 시스템의 특성을 파악하고, 적절한 기술을 선택하는 것이 중요하다.

We “solved” C10K years ago yet we keep reinventing it