[웹서버][시스템] 웹서버 최적화 하기..
웹서버 설정시에 가장 중요한 부분이 Timeout 부분입니다.
MaxProcess 수를 무작정 늘이는 것은 결코 좋은 일이 아닙니다.
단순한 static file(html, image 등)을 serving하는 일이라면,
보통 하나의 파일을 serving하는데 5~10ms 정도 시간이 소모되는데,
이렇게 되면 1초에 100~200request 밖에 처리하지 못합니다. 불필요한
system call을 줄이고(이건 httpd source에서 불필요한 부분을
제거해야 합니다), 불필요한 network data(dns lookup 등) 모으는
작업을 줄이면 1 CPU에서 초당 수백 request를 처리할 수 있습니다.
CPU가 2개가 되면, static file을 serving하는 경우, 거의 2배로
용량이 늘어난다고 보면 됩니다.
이런 경우에는 Max Process수를 수백개로 설정하는 것이 가능하지만,
dynamic file을 생성하는 경우에는 그렇지 않습니다.
보통 웬만한 경우, 아무리 빨리 처리를 해도, 어느정도 기능을 갖춘
dynamic html의 경우, 50~200ms 정도의 시간이 소요됩니다.
이렇게 되면 기껏 초당 5~20 request를 처리하게 됩니다.
( CPU개수가 많아지면, 그만큼 늘어납니다. )
이때 만일 max process수를 초당 처리할 수 있는 건수 이상으로
늘여주게 되면, request만 받은 상태에서 답을 해주지 못하는
httpd의 수가 늘어나게 되고, 웹서버가 버벅거리게 됩니다.
이 때에는 서버를 추가하여 load를 분산시키는 수밖에 없습니다.
PentiumII 500MHz Dual 서버라 하더라도, dynamic page는 초당
50~100건 이상 처리하기 힘들고, max process수를 이 이상 설정
하게 되면 순식간에 load가 10이상으로 올라갑니다.
그리고 가장 중요한 것. Timeout 설정입니다.
아래에서는 keep-alive 를 설정해 놓은 경우, 하나의 connection
에서 계속해서 다음 request를 처리할 수 있기 때문에 효율적
이라고 하지만, 실제로는 그렇지 않습니다.
keep-alive 를 허용하고 그 timeout을 5초로만 설정해도,
하나의 request를 처리한 후 적어도 5초동안은 그 httpd가 다른
작업을 하지 못하고 다음 request를 기다리게 됩니다.
보통 웹브라우저들은 서버로 동시에 4개의 connection을 만들게
됩니다. 한 페이지를 보는데 이미지 등등 해서 보통 4개의
connection을 만드는 것은 기본이죠. 이렇게 되면 httpd가 100개
떠 있다고 해도, 실제로는 동시에 25명의 방문자밖에 처리하지 못합니다.
그리고 keep-alive timeout이 5초인 경우, 한 명의 방문자를
처리한 후 적어도 5초동안은 계속해서 기다리면서 httpd가 놀게
됩니다.(그렇다고 해서 httpd의 수를 늘여주면 앞의 문제 때문에
load가 몰릴 때 순간적으로 부하가 지나치게 많이 걸리게 됩니다.
어떤 request는 수초가 지난 후 답을 받는 등 quality of service가
많이 떨어지죠.)
결국 한 명의 방문자를 처리하는데 4개의 httpd가 5초동안 작업
한다는 뜻이고, 100개의 httpd를 띄워봐야 1초에 5명의 방문자밖에
처리하지 못하는 셈입니다.
( 1 명 / 5 sec / 4 httpd = 5 / 1 sec / 100 httpd )
그래서 검색엔진 서비스 등 traffic이 많은 사이트에서는 keep-alive
옵션을 반드시 꺼 놓게 됩니다. 그리고 connection timeout도 상당히
짧게 설정해 놓죠. 4~5초 이내로 말입니다.
또 dynamic file 을 serving하는 httpd 앞에 빠른 proxy server를
두어서, 반복해서 요청되는 dynamic file의 경우, proxy server에
caching되어 있는 정보를 보여주게 하고, dynamic file을 serving
하는 서버에서 static file을 serving하느라 httpd를 잡아먹지 않도록
static file을 serving하는 웹서버는 모두 별도로 분리시키게 됩니다.