Page History
...
새로운 언어및 플래폼 전환으로 극한 상황에서의 생존기를 히스토리화 한내용입니다.
설계
REST 설계
기존 실시간 처리되는 저수준 패킷들을 모두 Rest화를 합니다.
실시간처리를 어떻게 응답을 기다려야하는 Rest와 성능을 유지하면서 설계를 해야할지가
고민이며 웹프레임워크의 튜닝요소를 깊게 살펴보는것에서부터 시작합니다.
URL : https://www.playframework.com/documentation/2.1.0/ThreadPools
웹소켓 설계
실시간처리에 있어서 Rest는 적합하지 않습니다. Rest호출 횟수를 줄이기위해
웹소켓을 보조적으로 사용을 하였습니다. 보통 동접3만 초당 천번이상의 Request가
필요한 정보다라고 측정이되면 웹소켓으로의 전환이 필요합니다.
고성능 통신 라이브러리인 자바-네티를 사용하는 Atmosphere를 사용하였습니다.
URL : https://github.com/Atmosphere
성능튜닝
설계된대로 개발이 완료되었으며, 기존 사용자+30% 를 모두 커버할수 있는지? 검증을하는것은
개발만큼 많은 시간이 소요가 되었습니다.
3만명 가상 동접의 Load테스트 TPS 목표와 실제 측정 자료
...
Test | DOC | Note |
Object Trace Test at 1 Action | 측정자료 | 1액션당 변화량 측정 |
Object Trace Test at NoAction | 측정자료 | AKKA/Atmosphere/Our Class Object 비활동 베이스 변화량 측정 |
Object Trace Test at NoAction in chatServer | 아무 활동 안하는 Chat 서버의 메모리 변화량이 비정상으로 보임,일반적 GC 활동으로 잠정 결론 | |
MemUsage | 측정자료 | Total/.net/JavaHeap/JavaPermgen/Unused+unknown(JNI) |
Diff Dump | 측정자료 | test Lobby API in a simple scenario (send a few requests), make 3 memory dumps (before/during/after) and check Retained memory |
Trace Thread | Lobby API 에서 Topic 관련 쓰레드가 , 비활동중임에도 불구하고 Running 상태가 반복됨 ( 정상적인 쓰레드 활동인지 체크해야함),해결반안 ActorSystem을 다중으로 사용하지말고, Event Bus로 전환 , AKKA의 오브젝트가 많아 진것도 이로인한 디펙인듯 보임 | |
SSL vs None SSL | – | SSL의 최초 커넥션타임이 길고,약간의 메모리증가 무시할수 있는수준의 약간의 메모리증가 |
JNI Call Test | JNI 는 충분히 빠름 : Lock블락이 포함된 C# 코드를 jni를 통해 5000번 콜한게 20ms이내에 완료됨 | logger.debug( “PerformTestJNI ProcessedTime: ” + Long.toString(processTime) ) |
...