node.js에서 http request는 기본적으로 agent를 이용한 connection pool을 이용한다.

(기본적으로 Connection: keep-alive)


이게 그냥 쉬엄쉬엄할땐 문제가 없는데,

단위시간 당 엄청난 양의 request + 1 request당 소요시간이 늘어나면 request 처리에 병목이 생긴다.


그도 그럴 것이 따로 agent를 지정하지 않을 경우 사용되는 http.globalAgent의 maxSockets 수가,

기본 5 이기 때문에 동시에 5개 이상의 연결을 처리하지 못하는 것이다.


이것 때문에 망할 병목이 생기는데 해결꼼수는 다음과 같음.


* http.globalAgent.maxSockets 수를 늘여 동시 처리가능 숫자를 늘이는 법.

http://nodejs.org/docs/latest/api/http.html#http_agent_maxsockets


http.globalAgent.maxSockets = 100; // 숫자는 적당히 보고 상황에 맞게



* http.request 시에 agent 값을 false로 주는 방법.

agent값을 false로 세팅할 경우 connection pool이 만땅 차면 Connection: close로 전환한다네.

http://nodejs.org/docs/latest/api/http.html#http_http_request_options_callback


var options = {

    host: 'www.google.com',

    port: 80,

    path: '/',

    method: 'POST',

    agent: false // <-

};


var req = http.request(options, function(res){

    // ... ...

});





하지만 이 모든 것들도 결국 http.request 레벨의 문제해결을 위한 꼼수일 뿐이고,

request를 처리할 서버쪽이 밀리는거면 해결불가능.

Posted by bloodguy
,