티스토리 뷰
C10K PROBLEM : 하나의 웹서베 10,000개의 클라이언트 접속을 동시에 달룰 수 있는 기술적 문제
C10K problem(하나의 웹서버에 10,000개의 클라이언트 접속을 동시에 다룰 수 있는 기술적 문제)을 해결하기 위해 기존의 아파치 방식처럼 하나의 스레드에서 하나의 클라이언트 요청을 처리하는 것이 아니라 Event-driven(Asynchronous) 구조를 사용한다. NGINX 이외에도 Lighttpd, Tornado, Magnum, Aleph 등 최근에 개발된 많은 웹서버들과 서버 사이드 자바스크립트인 Node.js가 Event-driven 구조를 사용하고 있다.
Event-driven Architecture(EDA a.k.a Asynchronous)
EDA 방식은 기존의 아파치 웹서버가 사용하는 방식(하나의 스레드에서 하나의 클라이언트를 처리하는 방식)보다 훨씬 적은 스레드개수로 훨씬 많은 클라이언트를 처리할 수 있다. 아파치 웹서버처럼 하나의 스레드에서 하나의 클라이언트를 처리한다면 'accept'와 persistence layer에서 정보를 읽거나 쓴 후 가공해 클라이언트에 전달할 때까지 I/O 문제로 스레드가 대기해야 할 때가 잦은 데다 클라이언트 개수만큼 스레드가 생성돼야 한다. 하지만 EDA 방식에서는 각 상태(state)를 정하고 여기서 event(가령 accept가 이루어져야 할 때 또는 응답 결과를 다 생성했을 때 등)가 발생할 때마다 이 event를 처리하게 해 더 적은 스레드로(또는 스레드 없이) CPU가 놀지 않고 일하게 할 수 있다.
nginx로 웹서비스 운영시 첨부파일 사용시에 413 Request Entity Too Large 가 뜨고 첨부 기능에서 용량이 차 올라가다가 멈춰버리는 증상이 발생합니다. 그럴때는 location 항목 하위에 client_max_body_size 항목을 추가해야 합니다. default size가 1m로 되어있어서 1Mbytes 이상의 용량을 업로드하려면 오류가 나게 되지요.
client_max_body_size 1024m;
'웹개발 > Linux' 카테고리의 다른 글
rm으로 삭제한 파일 복구하기 (0) | 2014.02.26 |
---|---|
KeepAlive 란 ? (0) | 2014.01.22 |
로그 시스템 (System Log ) 연구 (0) | 2014.01.13 |
명령어 정리 (0) | 2013.11.02 |
리눅스 파일검색 (0) | 2013.10.30 |