채팅 서버에 대한 성능 테스트 문의

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

채팅 서버에 대한 성능 테스트 문의

jung youngseok
안녕하세요. 정영석 이라고 합니다.

저희가 채팅 서버 기능을 추가하기 전에 성능 테스트를 해보고자 합니다.
사용자가 WAS로 메시지를 던지면 Vert.x를 통해 연결된 Client에게 메시지를 보내는 구조 입니다.

이와 같은 구조에 nGrinder를 사용하여 특정 Thread는 메시지를 보내는 역할을 하고,
나머지 Thread는 Vert.x에 접속하여 메시지를 받는 역할을 하여 약속된 메시지가 오면
TPS++ 을 하고자 합니다.

한 Thread에 한 Connection만 맺기에는 Agent를 너무 많이 써야 할것 같아
한 Thread에 100~ 1000개 정도 Connection을 맺고 약속된 테스트가가 넘어오면
지속 적으로 nGrinder Controller로 결과를 전달하고자 합니다.

이와 같은 테스트 방법이 가능한지 문의 드립니다.
(nGrinder 3.2.3에 Jython을 주로 사용하였습니다. )

이와 더불어 좀 더 바람직한 채팅 서버 테스트 방법이 있으면 조언 부탁드립니다.


감사합니다.
Reply | Threaded
Open this post in threaded view
|

Re: 채팅 서버에 대한 성능 테스트 문의

junoyoon
Administrator
굉장히 어려운 구조이군요. nGrinder 는 Async Call 을 하는 시스템에 대해 성능 테스트가 힘듭니다. 그 이유는 Recording 을 한 메소드가 실행될때 TPS가 증가되는데, 이때 메소드가 실행되는 쓰레드에 따라 쓰레드별로 각자 Call 횟수를 수집합니다. 그러나 Async Client 라이브러리의 경우, 메시지가 수신을 대기하는 쓰레드가 테스트가 실행된 쓰레드와 다른 쓰레드이므로, nGrinder 에서는 해당 콜은 테스트에 의해 실행된 것이라고 판단하지 않아 TPS가 올라가지 않습니다.

이를 해결 하기 위해서는 Latch 를 사용하여 테스트 쓰레드가 Vert.X 쓰레드에 따라 대기 / 재시작이 되도록 구현해 주셔야 합니다. 상당히 어려운 부분이나, 유사한 Async Call인 Socket.IO 쪽 예제는 다음에서 보실 수 있습니다. 비록 Jython으로 구현되어 있긴 하나 어떤 아이디어로 앞서 말씀 드린 쓰레드간 제어를 수행하는지 확인하실 수 있습니다.

http://www.cubrid.org/wiki_ngrinder/entry/using-ngrinder-to-perform-load-test-for-a-socket-io-app
Reply | Threaded
Open this post in threaded view
|

Re: 채팅 서버에 대한 성능 테스트 문의

jung youngseok
의견 감사드립니다.
생각보다 복잡해지네요..

테스트 스크립트 구조를 좀 다시 생각해봤는데요..
nGrinder에서 생성한 테스트 Thread가 100개 라면 이 중 첫번째 Thread만
지속적으로 채팅 메시지 요청을 하여 TPS 집계를 하도록 하고 (nGrinder Controller에서 Stop 메시지를 보내지 않도록 하는 목적도 있고요..)
나머지 99Thread는 9900 Connection(1Thread에 100 Connection)을 맺고 있다가 채팅 서버측(vert.x)으로 부터
메시지가 잘 전달되면 nGrinder Custom Monitoring 데이터에 추가해 보려고 합니다.

좀 진행해 보다가 문의 사항 있으면 다시 고견 여쭙겠습니다.

즐거운 하루 되세요.
감사합니다.