아키텍트2009. 12. 8. 10:48

Velocity 시나리오 (2)

두번째 시나리오: Velocity Session State Provider (세션 상태 제공자)
지마켓이나 옥션에서 구매할 물건을 선택한 후 장바구니에 담기 해보신 적 있으시죠? 클라이언트와 서버 사이에 세션이라는 것이 맺어져서 서로 통신을 하게 되는데, 여러대의 서버를 사용하고 있다면 어떤 물건을 선택했는지에 대한 정보가 저장되어 있어야 장바구니에서 사라지지 않게 되겠죠. 실제 상품이 결제까지 끝난 후 세션 상태를 지워주는 역할을 하게 됩니다.

세션의 상태 정보를 저장하는데 데이터베이스에서 제공하는 SQL Server Session Provider를 사용하곤 했을 겁니다. 
오늘 글에서는 Velocity Session State Provider와 SQL Server Session Provider를 사용하는 방식에 대해 비교 분석을 해보겠습니다.

그림1. 전자 상거래 애플리케이션 아키텍처


성능 테스트를 하기 위해 6대의 웹서버를 사용했습니다.

성능 테스트
. Database와 Velocity 버전의 Throughput 테스트
. Database와 Velocity 버전의 Scalability (확장성) 테스트
. Velocity 버전에는 고가용성 오버헤드, Failover에 대한 테스트를 병행했음

1) 확장성

그림2. 300KB 오브젝트로 측정한 Throughput

확장성을 측정하기 위해 6대의 서버가 사용되었는데, Latency는 0에서 조금씩 증가하는 형태로 진행됐음.

그림3. 확장성 그래프

재미있는 결과 값을 확인할 수 있습니다. 3개의 노드까지는 데이터베이스와 유사한 결과값을 보이다가 노드수가 증가하면 데이터베이스의 경우 throughput이 줄어드는 현상이 나타납니다. 왜 이럴까요? 웹서버가 수가 늘어나면 데이터베이스에 과부하가 발생할 수 있습니다. 웹서버에서의 요청이 처리되기 전에 또 다른 요청이 데이터베이스로 유입되면서 전체적인 성능이 저하되는 현상이라고 할 수 있습니다. 즉, 병목현상이 벌어지는 거죠. 다시 말하면 웹서버의 수가 많더라도 충분히 활용되지 못하는 것입니다.

2) 고가용성

고가용성을 on, off하는 것은 큰 차이가 나타나지 않는 것으로 나타났습니다.

그림4. HA(고가용성) on, off에 따른 Throughput과 Latency

3) Failover

. 6대의 웹서버 운영
. 한대의 Velocity 호스트 turn-off
. 애플리케이션이 정상 상태로 돌아올 때까지 대기
. 두번째 Velocity 호스트 turn-off
. 애플리케이션이 정상 상태로 돌아올 때까지 대기

캐시의 장애는 3가지로 구분됨: 프로세스 kill, 서비스 stop, Velocity 관리도구를 이용하여 캐시 호스트 stop
1. At ~4:30 첫번째 호스트 turn off
2. At ~9:30 두번째 호스트 turn off

그림5. 프로세스를 kill 했을 때의 Throughput, Latency

오늘의 테스트를 통해 다음과 같은 결론에 도달할 수 있습니다.

. Velocity는 순차적인 확장성을 제공합니다.
. Velocity는 저렴한 서버에서도 잘 구동되고, 세션 상태에 대해 확장성과 고가용성을 제공합니다.
. 데이터베이스는 웹서버의 수가 증가하면, 병목현상으로 인해 성능이 저하되는 현상이 발생할 수 있습니다.
   - Velocity를 통해 CPU, 디스크, 네트웍 관련 병목 현상을 제거할 수 있습니다.
   - 다시 말하면, Velocity는 데이터베이스의 부하를 두드러지게 줄여줍니다.

이 글은 Grid Network의 Velocity Benchmark White Paper를 기준으로 작성했습니다.

Posted by 조이트리