참고
- AWS로 시작하는 풀 스택 게임 만들기::AWS GameMaster 트위치 라이브 Episode 5 - Amazon Youtube (GameLift가 궁굼하면 이 영상 필수)
- Amazon GameLift 설명서 - AWS Docs
- Amazon GameList란? - AWS Docs
- GameLift Service : API Reference - AWS Docs
시작하며
그러고 싶진 않았습니다만...
AWS GameLift 라는 서비스를 알게 되었고, 어떤 기능을 제공하는 서비스 인지 확인해 보는 시간을 갖게 되었습니다.
(가능하다면 GameLift에서 주로 사용될 만한 기능 위주로 테스트 까지 진행 해보려고 합니다.)
먼저 GameLift에 관한 문서와 샘플, 영상들을 찾아볼 수는 있었지만,
2021-09-16일 기준으로 GameLift가 세상에 나온지 1년은 지난 것 같은데 검색되는 내용들은 마치,
일정 시간 마다 하나의 장표로 여러명이 발표한 것 같은 내용들 뿐이고, 실제로 사용자들의 경험이 녹아든 내용은 없었습니다.
그렇다는 것은 그다지 인기를 끌고 있는 제품은 아닌것만 같은.....
자~
GameLift가 어떤 서비스인지 간단하게 딱 한 줄로 이야기 한다면 세션기반 다르게 표현하면 데디케이트(dedicate) 서버 호스팅 서비스 입니다.
기존의 서버리스형태의 호스팅 서비스들과의 다른 차이점이 바로 데디케이트 서버를 호스팅 한다는 점입니다.
데디케이트 서버를 보통 줄여서 데디 서버라고 표현 하는데요 게임 외 서비스 에서는 쓰이지 않는 것으로 알고 있습니다.
데디케이트 서버라는 것은 (dediServer, headless Server, 라고 부르기도 합니다.)
게임실행 파일을 서버로도 실행할 수 있고, 클라이언트로도 실행할 수 있는것인데요... 음... 설명이 애매하다...
내가 게임을 실행하는데 서버역할을 할 수도 있고 클라이언트 역할을 할 수도 있다.... 음 더 애매한가?
어.... p2p 클라이언트 입니다.
마인크래프트 처럼
- 내가 플레이 하는 pc가 서버가 되서 다른 사람들이 접속하거나
- 누군가 플레이 하고 있는 pc(서버)에 내가 접속(클라이언트)할 수 있다.
다만 이것을 서버 전용으로 사용하게 될 때는 rendering이 필요 없으므로 rendering 부분을 제외하여 성능을 최적화 합니다.
rendering을 제외한 빌드를 headless라고 표현합니다.
아~~ LOL에서 매칭이 된 후 플레이 하는 공간이 하나의 데디서버에서 플레이 하는 것이죠
다시 돌아와서
GameLift는 두 가지 방식의 호스팅을 사용할 수 있습니다.
- 실시간 서버
- 사용자 지정 게임 서버
이 두 가지 방식을 표현하는 다른 용어들 때문에 처음에는 두 가지가 아니라 여러가지 방식이 있는 줄 알았습니다.
GameLift를 설명하는 글들은 모두 중복되는 장점들을 나열하다 보니 문서를 뒤적거릴수록 점점 더 경계가 흐릿해지고...
그냥 아래 단어들을 기준으로 읽고 있는 문서가 어떤 서비스를 이야기 하는 것인지 판단하면 될 것 같습니다.
실시간 서버
- Realtime Server, 실시간 서버, 스크립트형 서버, SDK를 붙이지 않아도 되는 서버, 모바일 os지원
사용자 지정 게임 서버
- 사용자 맞춤형, 사용자 지정 서버, build, binary upload, Container형 서버
먼저 실시간 서버를 살펴보면 장점으로 내세우는 것들이
- 서버 SDK를 통합할 필요 없다.
- JavaScript형식의 스크립트를 업로드 한다.
- 로직이 간단한 서버에 사용한다.
- Realtime Server이다.
왠지 스크립트 형식으로 Playfab이나 GameSpark와 유사한 서비스 같아 매력적이지 않고, 성능이나 확장성이 낮아 보이므로 자세히 보지 않을 겁니다.
다음으로 사용자 지정 서버 호스팅 인데요. 이게 GameLift의 핵심 기능이고 이 호스팅 방식에 대해 좀 더 자세하게 알아볼 겁니다.
호스팅 외 주요 기능으로 Flex Match 라는 Match Maker도 있습니다. 이건 좀 더 뒤에서 다시 꺼내보기로 하고,
아직 구체적으로 이해하지는 못했지만 FleetIQ라고 해서 on-prem을 포함한 여러 지역에 분포되어 있는 ec2 instance들을 활용할 수도 있는 것 같습니다.
(FlletIQ가 지원되는 SDK나 CLI 또는 API를 이용해서 구현될 수 있다 이는 GameLift와 독립적인 기능이며 GameLift에 종속되지 않습니다. Fleet과 호환되지 않는다는 말인가?)
확실하지 않지만 사용되는 리소스에 따라 아래처럼 구분지어 사용하는 것으로 보여 집니다.
resource (ec2 instance 등)를 사용하는 단위를 fleet이라 부르고
- 관리형 GameLift : ec2 instance만 사용하는
- GameLift FleetIQ : on-prem의 자원을 포함하여 다른 지역의 ec2를 사용할 수 있는 방식
아~ 혹시! fleet을 사용하는 방식의 차이로 구분이 되는건가?
fleet에 포함되어야 하는 computing resource 구성을
- ec2 instance를 통해 자동으로 할 것인지
- 특정 지역의 ec2나 on-prem의 자원으로 구성할 것인지
여기까지 요약! GameLift는 데디서버 전용으로 서버 호스팅과 Match Maker 기능을 제공한다.
사용자 지정 게임 서버
사용자 지정 게임 서버에서 사용되는 기능들을 살펴 봅시다.
Build
- C++, C# 으로 빌드된 binary파일을 aws cli로 등록(업로드) 합니다.
Fleet
- 업로드 된 빌드를 기준으로 어느 지역에 어떤 instance를 사용할지 정의 합니다.Fleet에 연결된 세션 수 등 모니터링 지표 제공합니다.
Alias
- Alias에 Fleet을 연결 합니다. 매칭에 의한 유저들은 Alias에 연결된 Fleet의 instance에 연결됩니다.Alias를 통해 Blue-Green 배포도 가능합니다.Fleet의 속성(인스턴스 유형, 스팟/온디멘드) 변경이 불가능한데 alias를 이용해 새로운 플릿으로 전환이 가능합니다.(Alias가 가르키는 fleet-id를 업데이트 할 때 최대 2분의 전환 기간이 있습니다.)
MatchMaking Rule Set
MatchMaking Configulation
Match Queue
- 매칭 요청이 있는 유저들의 큐 입니다.
- 매칭이 완료되면 Match Queue에 지정된 Fleet이나 Alias의 instance로 유저가 연결 됩니다.
Fleet의 구성, 흐름 이걸 좀 더 찾아보고 정리해야겠다.
GameLift의 프로세스를 보면
- 데디서버를 빌드해서 GameLift에 업로드 하고
- 업로드 된 바이너리를 기준으로 Fleet이라는 서버 풀을 준비 합니다. (Fleet의 정보 : instnace의 종류, 크기, 수량, 지역 등)
- 접속을 시도하는 유저들은 MatchMaking의 규칙 (Rule Set)에 의해
- Room(ec2 instance)를 예약하고 match queue에 들어 있다가
- 매칭이 완료된 사용자들은 Room(ec2 instance)에 할당이 됩니다.
FleetIQ는 또 뭐냐...
GameLift Fleet
GameLift Queue
스팟 인스턴스의 저렴한 이용이 장점이고 언제 회수될 지 모른다는것이 단점인데
'다행히 온디멘드 용량이 많고 통계적으로 회수 되는 경우가 드믈다'
'빈도를 더 줄이기 위해 GameList Queue에 FleetIQ라는 새로운 기능이 포함된다.'
스팟이 종료되려는 시점에 onProcessTerminate라는 콜백이 호출되는데 이 콜백을 받으면 약 2분 정도 뒤에 인스턴스가 종료되는 모양이고,
그 시점에 게임종료, 모든 로그 저장, 리소스 확보, 등을 해라? 할수 있다? 할수 있는 시간이 있다?
아 Fleet이 한개 지역의 한개 종류의 인스턴스를 설정할 수 있는거고
여러 지역, 여러 종류의 인스턴스를 혼합해서 사용하는것이 FleetIQ 인가?
그게 아닌가?
- Getting Started with Amazon GameLift FleetIQ - AWS Online Tech Talks
회수되는 스팟 인스턴스에 대비하여 FleetIQ라는 알고리즘을 개발 했다 라고 하네
회수 될것으로 보여지는 스팟인스턴스에는 세션 배치를 중지하므로 저비용 실행 가능한 인스턴스에서 진행됩니다?
'2020.6.24일 업로드 된 영상인데 실행가능한 스팟 인스턴스 예측 알고리즘을 2년 넘게 가지고 있다.'
세션을 잃은 확률은 1/75,000 이다. 하지만 실제로 그냥 대비할 수 없는 충돌보다 훨씬 낮습니다.
FleetIQ의 역할
AutoScaling
- 새 세션을 시작할 때 인스턴스 패킹(패킹이 무엇을 뜻하는지 모르겠으나 autoscaling에 속한 인스턴스 부킹 역할인듯)
- scale-in일 때 사용중인 인스턴스 보호
Spot Instances
- 실제 마법은 예측된 생존 가능성을 기반으로 인스턴스 유형과 가용 영역간에 균형을 유지
- 플레이어가 알지 못하도록 게임 서버를 안전하게 소모하는 실행 가능한 스팟 인스턴스
3개 리전에 2개 스팟 타입을 사용하려 했으나
2개 스팟 타입을 3개 리전에서 사용할 수 없게 되는 경우 온디멘드 인스턴스를 사용하게 된다.
가격표에 보면 FleetIQ를 사용할 때와 사용하지 않을 때 spot, on-demend 가격이 각각 다른 게 이것 때문인가 보다
(FleetIQ 쪽이 spot, on-demend 모두 저렴하다)
다만 FleetIQ의 on-demend가 일반 on-demend보다 훨씬 저렴하다는 점을 보았을 때
FleetIQ의 on-demend를 사용자가 선택적으로 사용할 수 있진 않을 것 같고 spot이 부족하게 되었을 때 임시적으로 on-demend를 사용하여
새로운 세션을 수용하도록 하는 모양인가보다
FleetIQ를 사용하면서 제일 걱정되는것이 spot이 회수 될 때와 spot이 없을 때 두 가지 일 것 같은데
- spot 회수 될 때 : 플레이 중이던 세션이 종료될 때
- spot을 사용할 수 없게 되었을 때 : 더 이상 사용할 수 있는 ec2가 없게 되었을 때
FleetIQ의 핵심 기능으로 이 두 가지만 확인해 보면 되겠다.
- spot이 회수될 때는 2분의 유예기간을 준다 (알아서 해라 인지 아님 자동으로 다른 인스턴스에서 실행해준다는건지)
- spot을 사용할 수 없을 때는 자동으로 FleetIQ의 on-demend 인스턴스를 사용하게 된다.
이 과정을 밸런싱 이라 부르고 인스턴스 유형과, 리전의 가용성 균형을 조정한다.
GameLift를 사용한다면 FleetIQ는 빼놓을 수 없는 핵심 기능이네!!!
FleetIQ는 새로운 세션을 최상의 컨디션으로 배치하기 위한 알고리즘으로 자원 대기열의 우선순위를 지정합니다.
가장 낮은 레이턴시, 최저 호스팅 비용, 플릿 특성 및 위치 조합에 따라 우선순위를 지정하도록 구성할 수 있습니다.
Fleet을 관리하기 위한 IAM 두가지
- GameServerGroupRoleForEC2
- GameServerGroupRoleForGameLift
[on-demend]
ec2
m5.large 0.096 USD
fleet
m5.large 0.122 USD
fleet iq
m5.large 0.019 USD
[spot]
fleet spot
m5.large 0.024 USD
fleet iq spot
m5.large 0.004 USD
FlexMatch
GameLift가 관리형으로 제공하는 Match Makinig 서비스
'IT > 개발환경' 카테고리의 다른 글
NSIS로 응용프로그램 설치파일 만들기 - 1/4 설치 (1) | 2023.04.10 |
---|---|
Teamcity Mac Agent 추가 -망함 (0) | 2023.04.08 |
Teamcity Mac Agent 추가 (0) | 2023.04.08 |
Teamcity에서 slack으로 notification (0) | 2023.04.08 |
AWS GameList Test (0) | 2023.04.08 |