출처
: http://openwiki.kr/tech/c10k_problem#fn__1
참고자료: http://www.kegel.com/c10k.html
C10K는 다수의 클라이언트를 동시에 처리할 수 있는가에 대한 의문이다.
(1만개의 소켓을 열게 된다면 하드웨어가 충분한데도 불구하고 I/O 처리방식의 문제때문에 프로세스가 제대로 처리하지 못한다는 것)
소켓을 처음 설계할 당시에는 10K의 클라이언트를 처리할 하드웨어 여력이 되지 않았기 때문에 생기는 의문이었다.
현재는 이를 해결하는 방법으로 Unix 계열에서는 select(), opll(), kqueue(), 윈도우 계열에서는 IOCP 등을 이용하여 처리한다.
이를 해결하기 위해, NGINX, node.js 에서는 이벤트 드리븐방식의 비동기 처리를 통해 해결한다.
[참고]
http://openwiki.kr/tech/c10k_problem
https://en.wikipedia.org/wiki/C10k_problem
http://egloos.zum.com/D00D00/v/94967
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 모델의 미비로 인해 제기된 것이다.
이는 현재 많은 해결책들이 나오고 있다
소켓의 개념이 도입된 20년 전만해도 상상도 못 할 일이고, 그외 그에 따른 리소스 관리를 감당할 하드웨어는 존재하지도 않았다.
: CC Attribution-Noncommercial-Share Alike 4.0 International
'IT_Programming > Network Programming' 카테고리의 다른 글
[펌][JWT/JSON Web Token] 토큰(Token) 기반 인증에 대한 소개 | JSON Web Token 소개 및 구조 | 로그인 / 인증에서 Token 사용하기 (0) | 2016.12.29 |
---|---|
[펌] 모바일 웹 성능 체크리스트 : 모바일 웹 애플리케이션 최적화를 위한 좋은 사례들 (0) | 2016.12.21 |
[펌] 리눅스 서버의 TCP 네트워크 성능을 결정짓는 커널 파라미터 이야기 1~3편 (0) | 2016.08.19 |
TCP/IP 네트워크 스택 이해하기 (0) | 2016.01.29 |
[펌] TCP 서버 네트워크 엔진 구현 (0) | 2013.07.03 |