SlideShare a Scribd company logo
1 of 29
Azure 로 MMO게임
서비스하기
유영천
Pearl Abyss
Microsoft Visual C++ MVP
Tw: @dgtman
http://megayuchi.wordpress.com
MMOG 서버의 특징
• 영속적인 TCP연결. Http전송이 아님.
• 서버에서 x86/x64 네이티브 코드가 돌아가야 함.
• 서버에 지속적인 부하가 걸림.
• 독점적인 자원이 많이 필요함.
• 처리량도 중요하지만 응답성이 더 중요하다.
PaaS로는 무리
Project D Online
• 논타겟팅 MMORPG
• 현재 서비스 안함.
• 궁금하신 분은 유튜브에서 Project D online으로 검색하세요.
• https://youtu.be/-M9THx5T-YY
Project D Online의 서버
• 서버에서 3D 모델 데이터를 갖고 있음.
• 충돌처리를 비롯하여 클라이언트에서 하는 모든 행동을
렌더링만 빼고 다 함.
• 집중적인 멀티스레드 사용. 모든 코어 다 사용함.
• CPU에 부하가 많이 걸림.
• 4코어 머신 기준으로 동접 최대 4000명에 맞춰 개발.
• 발표자료 - https://doc.co/7QVDaE
혼자 서비스를 해야겠는데…
• 돈이 없다!
• 뭔가 무기는 없나? – 쓸 수 있는 것은 MS BizSpark로 매달 18만원씩
지원되는 Azure 크레딧!
• 배포는 Dropbox로.
• 게임 서버는 Azure VM으로.
• 가입 및 유저 관리를 위한 웹사이트는 Azure Web App으로.
Azure VM
• 일단 겉보기엔 물리 머신이랑 똑같다.
• Remote Desktop으로 연결하면 끝.
클라우드 VM으로 게임 서버를? 고민되네.
• CPU성능은?
• Network latency?
• 가격은?
VM성능
• Azure VM의 vCore성능은 2014년도에 A2인스턴스를 사용할때만
해도 물리 코어 성능의 절반이었음.
• 2014년 기준으로는
• IBM Softlayer Baremetal >> IBM Softlayer VM > Azure VM > AWS EC2 VM
• A인스턴스에서 D인스턴스로 넘어오면서 거의 물리 코어 수준의
성능이 나옴. -> QoS문제이지 기술적인 문제가 아님.
• 현재는 거의 물리 CPU와 비슷하게 나옴. I/O는 여전히 물리
머신보단 느림.
https://browser.geekbench.com/v4/cpu/28243122 https://browser.geekbench.com/v4/cpu/2824308
Azure DS2_V2 – Japan West
https://browser.geekbench.com/v4/cpu/2824392
Azure DS2_V2 – Korea Central Real PC, i7 4core , @3.8GHz , sandybridge
Geekbench test
Network Latency
• 리얼타임 MMOG에선 처리량보다 응답성이 더 중요함
• Network latency가 크다는 것은 치명적이다.
• 다행히 주요지역에 Azure 데이터 센터가 입주해 있다.
• 글로벌 서비스를 해도 latency문제는 걱정할 필요 없다.
• 2017년엔 한국 진출!
Latency 측정 http://www.azurespeed.com/Azure/Latency
Latency 측정 - psping
• https://technet.microsoft.com/en-us/sysinternals/psping.aspx
• 네이티브 코드로 작동하는 게임서버라면 이쪽 측정이 더 정확함
• Japan-west
• 42 - 44ms
• Korea – Central
• 2.5 – 4.5ms
Latency 측정 - psping
가격 / VM 선택
• Korea-Central 기준
• 지역에 따라 가격차이가 있음.
• 가성비 기준 추천은 DS2_V2
• 정상적인 게임 서버라면(잘못 만든
서버가 아니라면) 동접 1000-2000
정도는 가능
동접 1000-2000명 기준 예상 비용
• D2인스턴스 + Azure Web App
• VM : 15만원
• Azure Web App : 2-3만원
BizSpark 18만원 지원만으로도 서비스 가능!
웹사이트
• 가입 -> 계정등록 – 게임 DB에 계정생성
• 유저들이 자신의 계정 관리
• 탈퇴/패스워드 재설정
• 게임 클라이언트에서 웹사이트를 통해 서버 주소와 상태를
얻어감.
Azure Web App(App Service)
• 예전엔 Azure Websites였다.
• 여러가지 웹기술 사용가능.
• Project D Online 프로젝트에선 ASP.NET MVC를 사용해서
웹사이트를 만들었다.
• Visual Studio + LocalDB로 웹사이트 개발
• 릴리즈 단계에서 Azure Web App으로 deploy
• 디버깅/배포 편리함.
Azure에 배포
Azure SQL
계정 등록 및 게임 플레이 과정
1. 웹페이지에서 유저가 가입요청(가입 버튼 누르기)
2. 웹사이트에서 인증메일 발송
3. 유저가 메일로부터 받은 인증번호 입력
4. 웹사이트 -> Game DB로 계정등록 SP호출
5. 유저가 게임 로그인
서버 및 웹사이트 구성
• 가입 관리용 웹사이트
• Azure Web App + Azure SQL
• 게임서버 on VM
• 게임서버(EXE/DLL) + MSSQL
Azure Service
Windows Server(Azure VM)
Web DB(Azure SQL)Azure Web App Game DB(MSSQL)
Game Server.exe
Cert Server.exe
NPC Server.exe
SP호출 (계정 등록/삭제/비밀번호변경 등)
Client.exe
Web
Browser
Client.exe
Web
Browser
Client.exe
Web
Browser
서버 및 웹사이트 구성
추가적인 클라우드 + 게임 기술
추가적으로 연구해 볼만한 클라우드+게임 기술.
스트리밍 게임이라든가?
스트리밍 게임
• 서버에서 게임 실행
• 서버에서 게임 영상을 인코딩해서 네트워크로 전송
• 클라이언트는 서버로부터 영상 스트림을 받아서 재생
• 클라이언트에서 컨트롤 입력을 서버로 전송
• 로컬에선 이미 많이 사용. XBOX ONE / steam등…
• Nvidia에서 클라우드 기반 스트리밍 게임 서비스를 위한 H/W,
S/W기술을 연구/배포/판매 중.
• https://youtu.be/hkCmUsVvWRc
NVIDIA Capture API
• NVIDIA Capture SDK
• https://developer.nvidia.com/capture-sdk
• http://on-demand.gputechconf.com/gtc/2016/presentation/s6307-
shounak-deshpande-get-to-know-the-nvidia-grid-sdk.pdf
Nvidia Capture SDK
Azure GPU Instance
• NVIDIA GRID SDK를 사용할 수 있는 Tesla GPU를 탑재한 VM
• 현재 Maxwell(GTX 9xx시리즈) 아키텍처의 M60 사용 가능
• Windows Server/ Windows 10 사용 가능
스트리밍 게임 구현
• 게임 코드에 NVIFR API의 캡쳐 코드 추가
• 게임 코드에 동영상 스트림을 전송할 네트워크 코드 추가.
• 동영상 스트림을 재생할 클라이언트 작성
• 네트워크로 동영상 스트림을 받아서 재생하는 기능 필요-
ffmpeg/D3D/D2D
• 키보드/마우스/컨트롤러 입력을 네트워크로 전송하는 기능
• 게임서버에서 게임 실행
• 동영상 재생을 위한 클라이언트 실행 -> 서버로 접속

More Related Content

What's hot

윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
devCAT Studio, NEXON
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 

What's hot (20)

스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 

Similar to Azure로 MMO게임 서비스하기

이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
Hyun-jik Bae
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
Amazon Web Services Korea
 

Similar to Azure로 MMO게임 서비스하기 (20)

Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
모바일게임 1인 QA 업무 경험담
모바일게임 1인 QA 업무 경험담모바일게임 1인 QA 업무 경험담
모바일게임 1인 QA 업무 경험담
 
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
 
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
Windows azure를 활용한 cloud 개발 사례
Windows azure를 활용한 cloud 개발 사례Windows azure를 활용한 cloud 개발 사례
Windows azure를 활용한 cloud 개발 사례
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
[OpenStack Days Korea 2016] Track3 - VDI on OpenStack with LeoStream Connecti...
[OpenStack Days Korea 2016] Track3 - VDI on OpenStack with LeoStream Connecti...[OpenStack Days Korea 2016] Track3 - VDI on OpenStack with LeoStream Connecti...
[OpenStack Days Korea 2016] Track3 - VDI on OpenStack with LeoStream Connecti...
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
 
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
 
게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망
 

More from YEONG-CHEON YOU

More from YEONG-CHEON YOU (20)

DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개
 
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 

Azure로 MMO게임 서비스하기

  • 1. Azure 로 MMO게임 서비스하기 유영천 Pearl Abyss Microsoft Visual C++ MVP Tw: @dgtman http://megayuchi.wordpress.com
  • 2. MMOG 서버의 특징 • 영속적인 TCP연결. Http전송이 아님. • 서버에서 x86/x64 네이티브 코드가 돌아가야 함. • 서버에 지속적인 부하가 걸림. • 독점적인 자원이 많이 필요함. • 처리량도 중요하지만 응답성이 더 중요하다. PaaS로는 무리
  • 3. Project D Online • 논타겟팅 MMORPG • 현재 서비스 안함. • 궁금하신 분은 유튜브에서 Project D online으로 검색하세요. • https://youtu.be/-M9THx5T-YY
  • 4. Project D Online의 서버 • 서버에서 3D 모델 데이터를 갖고 있음. • 충돌처리를 비롯하여 클라이언트에서 하는 모든 행동을 렌더링만 빼고 다 함. • 집중적인 멀티스레드 사용. 모든 코어 다 사용함. • CPU에 부하가 많이 걸림. • 4코어 머신 기준으로 동접 최대 4000명에 맞춰 개발. • 발표자료 - https://doc.co/7QVDaE
  • 5. 혼자 서비스를 해야겠는데… • 돈이 없다! • 뭔가 무기는 없나? – 쓸 수 있는 것은 MS BizSpark로 매달 18만원씩 지원되는 Azure 크레딧! • 배포는 Dropbox로. • 게임 서버는 Azure VM으로. • 가입 및 유저 관리를 위한 웹사이트는 Azure Web App으로.
  • 6. Azure VM • 일단 겉보기엔 물리 머신이랑 똑같다. • Remote Desktop으로 연결하면 끝.
  • 7. 클라우드 VM으로 게임 서버를? 고민되네. • CPU성능은? • Network latency? • 가격은?
  • 8. VM성능 • Azure VM의 vCore성능은 2014년도에 A2인스턴스를 사용할때만 해도 물리 코어 성능의 절반이었음. • 2014년 기준으로는 • IBM Softlayer Baremetal >> IBM Softlayer VM > Azure VM > AWS EC2 VM • A인스턴스에서 D인스턴스로 넘어오면서 거의 물리 코어 수준의 성능이 나옴. -> QoS문제이지 기술적인 문제가 아님. • 현재는 거의 물리 CPU와 비슷하게 나옴. I/O는 여전히 물리 머신보단 느림.
  • 9. https://browser.geekbench.com/v4/cpu/28243122 https://browser.geekbench.com/v4/cpu/2824308 Azure DS2_V2 – Japan West https://browser.geekbench.com/v4/cpu/2824392 Azure DS2_V2 – Korea Central Real PC, i7 4core , @3.8GHz , sandybridge Geekbench test
  • 10. Network Latency • 리얼타임 MMOG에선 처리량보다 응답성이 더 중요함 • Network latency가 크다는 것은 치명적이다. • 다행히 주요지역에 Azure 데이터 센터가 입주해 있다. • 글로벌 서비스를 해도 latency문제는 걱정할 필요 없다. • 2017년엔 한국 진출!
  • 12. Latency 측정 - psping • https://technet.microsoft.com/en-us/sysinternals/psping.aspx • 네이티브 코드로 작동하는 게임서버라면 이쪽 측정이 더 정확함 • Japan-west • 42 - 44ms • Korea – Central • 2.5 – 4.5ms
  • 14. 가격 / VM 선택 • Korea-Central 기준 • 지역에 따라 가격차이가 있음. • 가성비 기준 추천은 DS2_V2 • 정상적인 게임 서버라면(잘못 만든 서버가 아니라면) 동접 1000-2000 정도는 가능
  • 15. 동접 1000-2000명 기준 예상 비용 • D2인스턴스 + Azure Web App • VM : 15만원 • Azure Web App : 2-3만원 BizSpark 18만원 지원만으로도 서비스 가능!
  • 16. 웹사이트 • 가입 -> 계정등록 – 게임 DB에 계정생성 • 유저들이 자신의 계정 관리 • 탈퇴/패스워드 재설정 • 게임 클라이언트에서 웹사이트를 통해 서버 주소와 상태를 얻어감.
  • 17.
  • 18. Azure Web App(App Service) • 예전엔 Azure Websites였다. • 여러가지 웹기술 사용가능. • Project D Online 프로젝트에선 ASP.NET MVC를 사용해서 웹사이트를 만들었다. • Visual Studio + LocalDB로 웹사이트 개발 • 릴리즈 단계에서 Azure Web App으로 deploy • 디버깅/배포 편리함.
  • 21. 계정 등록 및 게임 플레이 과정 1. 웹페이지에서 유저가 가입요청(가입 버튼 누르기) 2. 웹사이트에서 인증메일 발송 3. 유저가 메일로부터 받은 인증번호 입력 4. 웹사이트 -> Game DB로 계정등록 SP호출 5. 유저가 게임 로그인
  • 22. 서버 및 웹사이트 구성 • 가입 관리용 웹사이트 • Azure Web App + Azure SQL • 게임서버 on VM • 게임서버(EXE/DLL) + MSSQL
  • 23. Azure Service Windows Server(Azure VM) Web DB(Azure SQL)Azure Web App Game DB(MSSQL) Game Server.exe Cert Server.exe NPC Server.exe SP호출 (계정 등록/삭제/비밀번호변경 등) Client.exe Web Browser Client.exe Web Browser Client.exe Web Browser 서버 및 웹사이트 구성
  • 24. 추가적인 클라우드 + 게임 기술 추가적으로 연구해 볼만한 클라우드+게임 기술. 스트리밍 게임이라든가?
  • 25. 스트리밍 게임 • 서버에서 게임 실행 • 서버에서 게임 영상을 인코딩해서 네트워크로 전송 • 클라이언트는 서버로부터 영상 스트림을 받아서 재생 • 클라이언트에서 컨트롤 입력을 서버로 전송 • 로컬에선 이미 많이 사용. XBOX ONE / steam등… • Nvidia에서 클라우드 기반 스트리밍 게임 서비스를 위한 H/W, S/W기술을 연구/배포/판매 중. • https://youtu.be/hkCmUsVvWRc
  • 26. NVIDIA Capture API • NVIDIA Capture SDK • https://developer.nvidia.com/capture-sdk • http://on-demand.gputechconf.com/gtc/2016/presentation/s6307- shounak-deshpande-get-to-know-the-nvidia-grid-sdk.pdf
  • 28. Azure GPU Instance • NVIDIA GRID SDK를 사용할 수 있는 Tesla GPU를 탑재한 VM • 현재 Maxwell(GTX 9xx시리즈) 아키텍처의 M60 사용 가능 • Windows Server/ Windows 10 사용 가능
  • 29. 스트리밍 게임 구현 • 게임 코드에 NVIFR API의 캡쳐 코드 추가 • 게임 코드에 동영상 스트림을 전송할 네트워크 코드 추가. • 동영상 스트림을 재생할 클라이언트 작성 • 네트워크로 동영상 스트림을 받아서 재생하는 기능 필요- ffmpeg/D3D/D2D • 키보드/마우스/컨트롤러 입력을 네트워크로 전송하는 기능 • 게임서버에서 게임 실행 • 동영상 재생을 위한 클라이언트 실행 -> 서버로 접속