2008/10/13

아파치에서 톰캣을 부하 분산되도록 구성하는 방법

Apache 2.x + Tomcat 4.x + Load Balancing (or Private JVMs)

아파치에서 톰캣을 사용하는 경우 복수개의 톰캣 엔진을 이용하는 경우 부하 분산을 하는 방식을 다룬 방법입니다.
하나의 톰캣 엔진이 멀티스레드를 지원하기 때문에, 굳이 복수개의 엔진을 사용해야 하는 이유가 있을까 하고 생각이 들 수도 있습니다만,  단일 페이지에 대해서 다량의 웹 히트가 발생하게 되면, 동일 엔진으로 하여금 처리를 하게되는 현상이 발생합니다.

톰캣에서 이러한 경우 캐쉬를 이용해서 속도를 가속화하는 기능이 있는 것으로 알고 있습니다만, 만약 캐쉬를 하지 않는다면, 톰캣엔진은 동일 페이지를 여러개의 스레드가 실행되어야 하므로, 메모리 병목을 유도하게 됩니다. 특히, 썬마이크로시스템즈의 CMT와 같은 하드웨어 기반의 멀티스레드 장비(멀키코어 포함)에서는 효율이 급격히 떨어질 수 있게 됩니다.

따라서, 어쩔 수 없이 캐쉬를 사용하지 않는 경우이면서 복수 코어를 가진 프로세서(특히, CMT)를 사용해야 하는 경우라면 톰캣 엔진을 복수개로 올리는 것이 바람직한 접근입니다. 엔진이 분산됨으로써 메모리 병목을 원천차단할 수 있을테니까요.

특히, 위와 같은 apache + tomcat stack을 솔라리스용으로 사용하는 경우에는 사용하고자 하는 바이너리가 설치 플랫폼용으로 최적화된 컴파일이 되어 있는 지 확인하는 것이 매우 중요합니다. CMT용 바이너리는 여기에서 찾을 수 있습니다.

http://cooltools.sunsource.net/coolstack/