로스테스크 :
멀티플리이어게임에서 1명이 모든역활을 수행하면서 다중으로 플레이를 하기 어려웠으며
QA팀이 테스트를위해 가상으로 게임을 진행할수 있는 Bot이 필요하였으며, 재현하기 힘든 테스트 시나리오완성을 위해
활용된 기술과 변경된 컨셉
- TCP-IOCP SOCK(C++) : 과거에는 대용량 처리를 위해 TCP모델을 이해하고 저수준통신모듈을 구현하고 서버개발팀이 라이브러리를 유지해야하는것이 첫번째였다. 이제는 플랫폼별로 네티/시그널R/Boost ASIO등 추상화된 통신모듈 선택 가능하며 아직도 여전히 윈도우 IOCP 비동기 TCP모델이 단일기기 대량 접속효율을 가지는지는 알수없으나, 분산처리가 중요해지는 시점 단일기기로 최대를 처리하는것보다 분산처리가 될때 복잡도를 줄이는 형태로 나아가고 있습니다.
- Bot Agent : 현재는 로드러너와 같이 클라우드기반에 분산하여 트래픽을 발생할수 있는 장치를 이용할수 있으나, 이때는 10만 사용자테스트를 위해 Agent(CS방식)를 만들어 PC방에 분산실행한뒤 중앙에서 제어하여 트래픽을 발생하였습니다.
- 램프업 : 사용자 트래픽 1만,5만,10만 올려감에따라, 테스트 인프라도 확장하였는데 램프업이란 단어를 사용했던것같다. 제조확장공정에서 사용된 단어로 보이며 현재는 스케일 아웃 또는 탄력적으로 확장할수있는 엘라스틱이라는 용어가 쓰이고 있다.
- 세션서버 : 요즘은 L7스위칭을 활용하는 로드밸런스(Haproxy및 기타등등)가 잘되있어서, TCP 커넥션 컨트롤이 룰설정으로 가능하지만 과거에는 커넥션 컨트롤을 직접 프로그래밍화하고 관리하였습니다.
- Manager : Agent의 커넥션이 발생하면 이 커넥션자체를 관리하고, 분산처리될수 있게 직접 분산코드를 작성하였으나 클러스터/라우터활용으로 이것에대해 구현할 필요가 없어졌습니다.
AKKA를 선택하게된 이유
- 현재 C++도 Managed형태및 좋은라이브러리가 있지만 기본으로 메모리/스레드풀 관리를 직접 해야하는 C++에서 분산처리 어플리케이션을 구축하는것은 난이도가 있었습니다.
- 원격메시지 처리를위해서, TCP모듈에 큐시스템을 직접구현하고 이미 이용한 상태였으며, 이것은 Actor의 메시지처리와 닮아있습니다.
- TCP 통신모듈개발 / 스레드프로그래밍등을 할필요가 없어졌습니다. 결정적으로 개발팀이 이 두개를 안정적으로 유지하는데 비용(수준)이 많이 들게 됩니다.