IT_etc/유용한 전산 지식들..

[펌] 대량의 동시사용자를 위한 조언

JJun ™ 2010. 12. 17. 16:26



 출처: http://www.okjsp.pe.kr/seq/16398



 

Apache 와 같은 웹서버를 서블렛엔진이 있는 머신과는 별도로 운영하여 HTML/imagess 와 같은 정적인 컨텐츠와 Servlet/JSP와 같은 동적컨텐츠를 분리하는 방안이나, 

현재 겪고 있는 OutOfMemoryError 의 경우는 tomcat.sh 에서 Java 의 초기힙사이즈와 최대힙사이즈를 조정함으로써(java -ms256m -mx512m ...) 일정 부분 해결할 수 있겠지만, 이는 한계가 있습니다.


OutOfMemoryError 가 나는 이유야 어플리케이션 자체가 많은 메모리를 사용하는 구조이거나 프로그래머의 실수로 메모리 참조를 지속적으로 갖고 있어
메모리 누수현상이 일어나거나
하기 때문이겠지요... 1차적으로 어플리케이션으로 잘 튜닝함으로써 또한 해결을 하실 수 있을 겁니다.


그러나, 단일 Request 시 일정량의 메모리를 일시적으로 사용한다고 가정할 때, 동시에 400명(통상 동시사용자의 1/10을 Active Concurrent Request로 가정합니다.)
이 요청을
하면, 그에 따른 메모리 사용량은 급격하게 늘어납니다.

자신하건데, WebSphere 나 WebLogic 과 같은 상용어플리케이션서버도 하나의 엔진으로 동시에 Active Request 400 을 모두 처리해 주기에는
해당 컨텐츠가 DB를 단순히
select 하는 매우 간단한 경우일지라도 매우 힘든 얘기입니다.
즉, TPS(초당처리건수)는
경험상 보면, 일반적인 DB 작업의 경우 하나의 엔진이 1초에 처리해 줄 수 있는 량은 하나의 DB Select만 존재하는 경우
TPS 400 정도, 여러개의 DB 관련 작업을 
포함하는 일반적인 어플리케이션은 TPS 100-200 을 넘기 힘들고, Tmax 나, TUXEDO, CICS HOST 등과

같은 legacy 와 연동되는 경우는 20-50 을 넘기 힘듭니다.


여기에서 등장하는 것이 결국은 머신을 병렬로 연결하는 clustering 기법이지요...
한 머신에서 최대 CPU 100% 를 사용할 때까지 여러개의 인스턴스를 cloning 하고, 또, 물리적으로 서로 다른 머신을 3대 혹은 그 이상을 유지시키는 거지요....

동시사용자 4000명(현재 이 시스템에 로그인해 있는 사용자의 합: 마우스를 클릭했거나, 화면을 보고 있거나, 옆사람과 대화를 나누는 사람들까지 합하여..) 이라면 
서버는 한순간에 대략 400 개의 Request 를 쉬지 않고 처리해야 하는 용량이 되고, 이는 국내 대부분 은행의 인터넷뱅킹 시스템 보다 많은 수치입니다.

Tomcat 이나, JServ, resin, JRun 과 같이 clustering Architecture 가 없는 경우는 L4 Switch 장비나 IBM eNetwork Dispatcher 와 같이 앞단에서 부하를 분산시키는
솔루션을 도입하시면 됩니다.

 

이 경우 물리적으로 떨어져 있는 각 머신의 Session 공유의 문제를 해결해야 하지요.

동시사용자가 4000 명이고, Active Concurrent Request 가 400 정도 된다면,
최소한
현재 사용하는 SUN 장비 메모리 2GB, 2-4 CPU  3-4 대가 필요한 용량이라 추측(!) 됩니다.

PS: hanmail.net 의 경우 접속시 URL이 튀는 패턴으로 추측건데 25대의 머신이군요...
    C/S 환경에 익숙한 분들이 웹 환경을 목격(?) 했을 때 가장 먼저 느끼는 감정이
     "고작 이러한 Performance 낼려고 이렇게 돈을 수억 투자했느냐?" 라는 냉담한 반응입니다.

    그러나 웹이란 환경은 한달 내내 펑펑 놀다가 하루 중 몇시간 peek time 시에 견디도록 설계되어야 하는 거죠...



--------------------------------------------------------------------------------------------------------------------------------
  본 문서는 자유롭게 배포/복사 할 수 있으나 반드시 이 문서의 저자에 대한 언급을 삭제하시면 안됩니다
=================================================================================================
  자바서비스넷 이원영
  E-mail: javaservice@hanmail.net
  PCS:019-310-7324
=================================================================================================