Action disabled: source

C10k Problem

C10K Problem

C10K Problem은 하나의 System에 얼마나 많은 Client가 붙을 수 있냐는 의문과 그에 대한 도전에서 제기되는 문제이다

BSD소켓을 설계할 당시에는 10K 클라이언트가 붙을 하드웨어적 환경이 안 되었다. 1)

그 때는 하드웨어가 병목이었다만 80년대 말부터 학자들은 소프트웨어 위기론을 현실로 받아들여야 한다고 주장했다. 하드웨어는 10년에 4배씩 좋아지지만, 소프트웨어는 그렇지 못한 것을 발견했다. 물론, 이 문제는 소프트웨어 공학에서 접근하는 문제제기이다.

UNIX계열 OS의 I/O Model가 2K 이상의 소켓을 열어서 정상적인 I/O를 할 수 있냐는 문제가 제기되었다. 2)

UNIX계열에서는 File Descriptor를 만드는데 드는 비용과 그 많은 소켓을 동기화시키는 문제가 있다. 즉, 10K만큼의 소켓을 열게 된다면 하드웨어가 충분한데도 불구하고 OS에서 제공하는 I/O 처리방식의 문제때문에 프로세스가 제대로 처리하지 못한다는 것이 C10K Problem이다 3)

이것이 C10K Project라고 함 해보자는 모드로 가서 Solaris에서 제안한 /dev/poll 모델을 출발로 해서 여러가지 모델이 나오고 적용되고는 있다. 이 문제를 잘 해결해서 실제 잘 적용된 것은 MS Windows의 Overlapped I/O와 IOCP이다.

정리하자면 C10K Problem은 UNIX계열의 OS가 I/O 모델의 미비로 인해 제기된 것이다. 이는 현재 많은 해결책들이 나오고 있다

참고 http://www.gpgstudy.com/forum/viewtopic.php?t=2097

1)
만약, 웹서버가 동시에 10K 가 붙으면 일단 넷웍 대역만해도 기가비트 급이다. 소켓의 개념이 도입된 20년 전만해도 상상도 못 할 일이고, 그외 그에 따른 리소스 관리를 감당할 하드웨어는 존재하지도 않았다
2)
2048은 select()함수의 파라미터로 들어가는 File Descriptor 배열의 MAX값이다
3)
10K가 한계란 뜻은 아니고 많다는 뜻.