웹 프로그래밍을 전문적으로 하고 있지는 않으나, 서비스에 사용자가 많이 늘면서 여러가지 기술들을 찾고 있는데, 아직 본격적으로 적용은 못했으나 관심을 갖아볼 만한 프로젝트입니다. Varnish는 웹캐시로 웹속도를 줄이기위한 방법중 하나로 Reverse Proxy 역할을 위주로 설계됐습니다. 많이 쓰이는 Squid라는 프록시는 클라이언트 단에서 서버에서 오는 정보를 캐싱하여 클라이언트 단에서의 접속 속도를 향상시키는 역할이 주인 (Forward) Proxy로 주로 쓰입니다. 반면 Reverse Proxy는 서버단에 가까운곳에 위치하여 서버에서 나오는 데이타를 캐싱하여 서버의 부하를 줄이는 역할을 하며, 주로 동적으로 생성되는 페이지가 많을 경우 효과를 볼수 있습니다.
Varnish는 효율성을 위해서 C로 짜여져 있으며, VCL이라는 언어로 설정이 가능합니다. VCL은 간단한 언어로 오브젝트 파일로 컴파일되어 데몬에서 호출되는 등 빠르게 동작할수 있도록 최적화에 신경을 많이 썼습니다. 주 개발자는 FreeBSD 커널 여러부분에서 작업해서 OS에 대한 이해도가 높고, 기존에 있던 캐싱 시스템들이 옛날 하드웨어 맞게 최적화되어 개발되어 있기 때문에 오히려 요즘 처럼 여러단계로 메모리가 캐싱되는 하드웨어 상황에서는 적합하지 않다고 얘기합니다.
홈페이지는 http://varnish-cache.org/ 이며, FreeBSD에서는 /usr/ports/www/varnish 에서 설치할수 있습니다.
회사 서비스 중 웹서버에 많은 부하가 집중되어 있었는데 많은 부분 해결이 되었습니다. 해결을 위해 동원된 방법은…
-
SQL 쿼리 최적화
-
PHP에서 필요한 부분만 include (main include 파일이 커져서)
-
랜더링 오래 걸리는 페이지 memcache에 캐싱
-
잘 변하지 않는 페이지 html로 저장
-
웹서버 Apache에서 lighttpd로 변경
-
xcache 적용 (코드 캐시만 사용)
동시 연결된 클라이언트가 급속히 늘다보니 아파치 1.3에서는 mod_php는 메모리가 너무 많이 차지하여 한계가 생겼었습니다. 당시 php 처리도 느렸었지만, lighttpd에 fastcgi로 바꾸고 나서는 메모리 사용량이 현저히 줄었습니다. xcache는 php 컴파일된 코드를 메모리에 캐싱하는 모듈로 적용후 php의 부하를 많이 줄일수 있었습니다. xcache에서 memcache와 동일한 기능도 제공합니다. 그외에 pen이나 plb등의 S/W load balancer 도입도 생각하고 있으며, lighttpd의 fastcgi load balancing도 고려하고 있습니다.