회사에서 Node.js + Express 로 돌고 있는 서버의 퍼포먼스를 측정하는 일을 했었다.
실제로 큰 소득이 있지는 않았지만 그 과정에서 깨닫게 된 (당연하게 보이는) 것들을 정리해보았다.
EC2 C5.xlarge 기준 Express 1 프로세스 (1 core) 의 이론적 Request Per Sec 한계는 4000 정도 인듯 링크
해당 사항은 실제로 http 프로토콜 상 문제가 아닐까 생각한다. 패킷 까는 데 많은 자원을 소모하는 것 같다.
해당 도메인에서 사용하고 있는 가장 빈번한 시나리오로 테스트 해보아야 한다.
당연한 내용인데, 정작 일하면서 깨닫는 데엔 2일 정도가 걸림. 나무를 보다가 숲을 못 본 케이스.
로컬에서 스트레스 테스트를 날릴 땐 소켓 한계 잘 생각하자. Keep-Alive 조건을 주는 것은 거의 필수인듯 링크
로컬에서 포트를 계속 열게 되면 65535 를 넘어가서 소켓 행업이 되어 테스트 자체가 되지 않는다.
concurrent 유저가 높아질 때 어느 순간부터 latency 가 증가하는 이유는 RPS 한계 때문에 당연히 그럴 수 밖에 없다. 따라서 목표 latency 를 설정하고, 그에 맞춰 horizontal scaling 정책을 수립해야 함.
생각해보면 당연한 사실인데, 이러한 사실을 깨닫는 데에 시간이 오래 걸렸다. ㅋㅋㅋㅋㅋㅋㅋ
V8 최적화 도 생각해야 한다.
Node 환경에서 JIT 컴파일을 하기 때문에 해당 부분이 Bottleneck 일수도 있다.
퍼포먼스 테스트와 병목 지점을 잘 찾아내기 위해선 네트워크 레벨에서부터 컴파일러와 OS의 동작까지 이해를 하고 있어야 가능할 거 같다. 아직 엔지니어로써 갈 길이 멀다는 것을 알게 된 소중한 시간(?)이긴 한 듯.