Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

로스테스크 제작히스토리 :

테스트를위해 멀티플리이어게임에서 1명이 모든역활을 수행하면서 다중으로 플레이를 하기 어려웠으며

QA팀이 테스트를위해 가상으로 게임을 진행할수 있는 Bot이 필요하였으며, 

재현하기 힘든 테스트 시나리오완성을 위해 다양한 모드로 가상의 플레이어를 투입시키는 시스템을 개발하였으며

그것을 게임봇이라고 불렀습니다. 

이렇게 완성된 시스템은, 대용량 테스트를 위해 다시 작성되게 되었으며 HP와 협력하여 서버의 한계까지 극한테스트까지 수행되었으며

현재는 레거시 시스템이되었지만 아직도 성공한 글로블 게입업계에서 사용중에 있습니다.


과거 활용된 기술과 변경된 컨셉(AKKA기준)

  • TCP-IOCP SOCK(C++) : 과거에는 대용량/대량사용자 처리를 위해, TCP모델을 이해하고 저수준통신모듈을 구현하고 서버개발팀이 라이브러리를 유지해야하는것이 첫번째였다. 이제는 플랫폼별로 네티/시그널R/Boost ASIO등 ASIO/Kafka/Akka등 추상화된 통신모듈 선택 가능하며 아직도 여전히 윈도우 IOCP 비동기 TCP모델이 단일기기 대량 접속효율을 가지는지는 알수없으나, 분산처리가 중요해지는 시점 단일기기로 최대를 처리하는것보다 분산처리가 될때 복잡도를 줄이는 형태로 나아가고 있습니다OSI 7 Layer를 교양삼아 이해할필요는 있지만, TCP 통신모듈을 직접 제작하는 경우는 없어졌습니다. Akka에서 Transport 교체가 가능하며 Netty로 충분합니다.
  • Bot Agent : 현재는 로드러너와 같이 클라우드기반에 분산하여 트래픽을 발생할수 있는 장치를 이용할수 있으나, 이때는 이때 10만 사용자테스트를 위해 Agent(CS방식)를 만들어 PC방에 PC방 출동후 분산실행한뒤 중앙에서 제어하여 트래픽을 발생하였습니다. 현재는 도커기술+클라우드기술의 혜택으로 분산배치는 큰 이슈는 아니며 필요하면 AkkaSystem을 클라우드 Pass기반으로도 이용가능합니다.
  • 램프업 : 사용자 트래픽 1만,5만,10만 올려감에따라, 테스트 인프라도 확장하였는데 확장하였으며 램프업이란 단어를 사용했던것같다사용하였습니다. 제조확장공정에서 사용된 단어로 보이며 현재는 스케일 아웃 또는 탄력적으로 확장할수있는 엘라스틱이라는 용어가 쓰이고 있다. Akka에서는 Elastic을 다음과 같이 표현합니다. ( Elastic(Adaptive load balancing, routing, partitioning and configuration-driven remoting. )
  • 세션서버 : 요즘은 L7스위칭을 L7영역을 활용하는 로드밸런스(Haproxy및 기타등등)가 잘되있어서, TCP 커넥션 컨트롤이 룰설정으로 가능하지만 과거에는 커넥션 컨트롤을 직접 프로그래밍화하고 관리하였습니다. Akka에서는 클러스터화하고 Role을 부여하여 마치 하나의 어플리케이션 서버인것처럼 논리적 구성이 가능합니다. 
  • Manager : Agent의 커넥션이 발생하면 이 커넥션자체를 관리하고, 분산처리될수 있게 직접 분산코드를 작성하였으나 클러스터/라우터활용으로 이것에대해 구현할 필요가 없어졌습니다.

AKKA를 선택하게된 이유

  • 현재 C++도 Managed형태및 좋은라이브러리가 있지만 기본으로 메모리/스레드풀 관리를 직접 해야하는 C++에서 분산처리 어플리케이션을 구축하는것은 난이도가 있었습니다.
  • 원격메시지 처리를위해서, TCP모듈에 큐시스템을 직접구현하고 이미 이용한 상태였으며, 이것은 Actor의 메시지처리와 닮아있습니다.
  • TCP 통신모듈개발 / 스레드프로그래밍등을 할필요가 없어졌습니다. 결정적으로 개발팀이 이 두개를 안정적으로 유지하는데 비용(수준)이 많이 들게 Akka에서는 알려진 라우터활용으로 분산처리방식을 선택하면 됩니다.