오랜만에 Rails Deployment란에 글을 쓴다. 이 분야도 꽤 안정되어버렸기에 요새는 크게 할 말이 없는게 이유이기도 하다.

새로운 뉴스라면 최근 Passenger Phusion이 nginx를 지원하게 된 것 정도일 것 같다,

 

암튼, 제목 그대로 레일스 2.3은 이전 버전보다 더 나은 성능을 보여줄까?

성질급한 분들을 위해 결론부터 이야기하자면,

 

네, 빨라졌더군요!

 

그럼 이제 증거를 제시할 차례일 것 같다.

 

증거

스프링노트 서비스를 레일스 2.2와 2.3에 각각 돌려보았다. 그리고 미리 정의한 3가지 액션에 대해 밴치마크를 진행하였다. 결과 그래프는 아래와 같다.

 

그림_12.png

 

Y축은 평균 응답 시간(ms)이다. 당연히 아래 있을수록 좋은 값이다.

그래프를 보면 Rails 2.3 with memcached patch라는 항목이 Rails 2.2보다 더 나은 성능을 보임을 확인할 수 있다.

 

그런데 맨 위에 가장 느리게 나온 Rails 2.3 Default는 뭔가?

 

그 이유는 Memcached 1.6.5 (Rails 2.3) 10x slower - Ruby Forum에서 찾을 수 있다.

간단히 요약하자면, 레일스 2.3에서 번들된 memcached 1.6.5에 추가된 타임아웃 기능이 성능차를 부른다는 것이다. 

(쉽게 예측할 수 있듯, 고질적인 루비 1.8의 스레드 성능 이슈 때문이다)

 

해결 방법은 Timeout을 끄거나 Memached 최신 버전(1.7.2) + SystemTimer를 사용하는 것이다. 나는 간편하게 전자를 택했다.

(후자도 테스트해보았는데, 비슷한 결과를 얻을 수 있었다)

 

이 쯤에서 살포시 주의

사실 이 한가지 데이터 하나로 결론을 내리는 것은 어리석은 일이다.

그리고 절대 남의 벤치마크 결과를 믿어서는 안될 일이다.

확답을 위해서는 직접(!) 벤치마크를 해보시라 ^^

 

의문들

왜 빨라졌을까?

2.3 릴리즈 노트를 보며 그 이유를 유추해볼 수 있을 것 같다. 개인적인 판단으로는 라우팅쪽 최적화, CGI.rb를 걷어낸 부분이 크지 않았을까 추측해본다.

 

더 빨라질까?

다음 메이저 업데이트가 될 3.0 버전은 꽤 빨라질 것이라 기대하고 있다.

그리고 루비 1.9나 JRuby가 대세가 되면 느리다는 인식은 사라질거라고 생각된다.

 

약간 시간이 남았어요~

여기까지 하고 약간 시간이 남아서 오랜만에 Passenger와 (이벤트기반) 몽그렐의 성능을 측정해보았다.

 

그 결과는 아래와 같다.

 

그림_13.png 그림_14.png

 

특이하게도 2.2 버전에서는 passenger가 더 나은 성능을 보여주는데,

2.3에서는 거의 비슷하거나(passenger가 약간 빠른) 모습을 보인다.

 

그 이유가 뭘까?

아직 답을 찾아보지 않았지만, 꽤 재미있는 고민거리가 될 수 있을 것 같다.

 

참고