50
스스스스 스스스 스스스스 스스스스 스 스스 스스스 스스스

스마트폰 온라인 게임에서 고려해야 할 것들

Embed Size (px)

DESCRIPTION

스마트폰 온라인 게임에서 서버,네트워크 프로그래밍 관련해서 고려해야 할 것들

Citation preview

Page 1: 스마트폰 온라인 게임에서 고려해야 할 것들

스마트폰 온라인 게임에서 고려해야 할 것들

넷텐션배현직

Page 2: 스마트폰 온라인 게임에서 고려해야 할 것들

대표적 이슈들• 폰 하드웨어• 무선 네트워크• 멀티플랫폼• 서버의 역할• 클라우드 서버

Page 3: 스마트폰 온라인 게임에서 고려해야 할 것들

모바일• 게임 출시 경험이 몇차례 있는 모바일 게임

업체들은 , 생각보다 성능에 목숨거는 분위기• 어머님 , 아버님은 폰 안바꿈• 카톡만 되면 됨

Page 4: 스마트폰 온라인 게임에서 고려해야 할 것들

처리 성능• 10 년전 데스크탑 성능• 그러나 더 악조건

Page 5: 스마트폰 온라인 게임에서 고려해야 할 것들

• iPhone 4S 의 전체 메모리는 512MB• 그 중에서 실제 사용가능한 프로세스

메모리는 ?• iOS 7 50~200MB• iPhone 5S 에서 iOS 8 업그레이드 후 잔여

공간이 700 에서 500MB 로 하락 !

• 메모리 모자라면 PC 는 ? 한편 모바일은 ?

Page 6: 스마트폰 온라인 게임에서 고려해야 할 것들

• 60Hz 만 충족시킨다고 ok? 배터리는 ?

• 하이엔드 경험을 위해 60Hz 강행• 배터리 아끼기 위해 15Hz 로 다운• 멀티스레드 싫어함 & 소켓 버퍼 커야

Page 7: 스마트폰 온라인 게임에서 고려해야 할 것들

네트워크의 고약한 점• 긴 하위호환성의 문제• 사람 피를 완전히 바꾸는 것만큼 어려움• 유선 네트워크보다 무선 네트워크가 물리학상으로도 훨씬 더 불안정

Page 8: 스마트폰 온라인 게임에서 고려해야 할 것들

3G

• RTT 50~100ms• 위치 이동 안해도 20% 까지 패킷로스 증가

Page 9: 스마트폰 온라인 게임에서 고려해야 할 것들

3G

• 에이… LTE 나온지가 벌써 3 년 지났어요 !

78.4

21.6

3GLTE

2013 년 조사 결과

Page 10: 스마트폰 온라인 게임에서 고려해야 할 것들

Wifi 자체가 일으키는 패킷 드랍과 딜레이

Page 11: 스마트폰 온라인 게임에서 고려해야 할 것들

UDP 의 레이턴시 vs. TCP 의 레이턴시

Page 12: 스마트폰 온라인 게임에서 고려해야 할 것들

TCP on packet drop

• 무선 통신의 높은 레이턴시와 패킷 드랍율 • TCP 는 쉽게 retransmission 랙이

발생함

• 결론 : UDP 꼭 쓰세요

20~200ms

20%

20~200ms (80%)520~720ms (20%)

Page 13: 스마트폰 온라인 게임에서 고려해야 할 것들

UDP only 면 충분 ?

• 기업 방화벽• 일부 wifi AP• 일부 3G/LTE 기지국

• 결론 : TCP 를 꼭 혼용하세요 ( 프라우드넷은 옛날부터 이미 ㅋ )

Page 14: 스마트폰 온라인 게임에서 고려해야 할 것들

UDP vs. traffic conservation

• 무선 통신량 패킷 드랍율• 전파 혼잡 패킷 드랍율• 결국 한번 보낼 때 적게 패킷 보내야

• 결론 : UDP 패킷을 필요한 것들은 합쳐 보내세요• 그렇다고 너무 합치면 합침 대기 간격

(coalesce interval) 자체가 랙이 됨• RTO 에 비례해서 잡아야 ( 아니면 프라우드넷을… ㅋㅋ )

Page 15: 스마트폰 온라인 게임에서 고려해야 할 것들

모바일에서 P2P

• 프라우드넷은 선 홀펀칭 후 릴레이 방식 게임 개발자는 그냥 항상 홀펀칭 된다는 가정하에 코딩 • 홀펀칭 대기 시간이 없어 개발은 편하지만 ,

안타깝게도 양쪽 다 LTE 인 경우 홀펀칭 안됨 • 하나 이상이 wifi 이면 85( 국외 )~95%( 국내 ) 지만

Page 16: 스마트폰 온라인 게임에서 고려해야 할 것들

• 3G/LTE vs. Wifi• 게임 하다가 wifi 존에서 나간 경우• 게임 하다가 wifi 존에 도착한 경우• 게임 플레이하다 전화가 온 경우

Page 17: 스마트폰 온라인 게임에서 고려해야 할 것들

MPTCP 가 뜰까 ?• 연결 유지 기능을 TCP stack 에 !• 거의 모든 라우터에서 TCP 타입 IP 패킷을 투과시킨다는 점을 착안• TCP option field hacking! 페이로드 손 안댐 ! 님좀짱 !• Proof of Concept (POC)

Wifi

MPTCP-aware Server

3G

Page 18: 스마트폰 온라인 게임에서 고려해야 할 것들

• MPTCP in iOS7• Siri ( 검증중 ?)• 후퇴 가능한 프로토콜• 올리버 논문의 변경 없이 안착한다면 ?• 그렇지 않다면 ?

Page 19: 스마트폰 온라인 게임에서 고려해야 할 것들

• SCTP, DCCP 혹은 기타는 안나오나 ?• 나온지 10 년이 넘었는데도 안착 못하는 이유

Page 20: 스마트폰 온라인 게임에서 고려해야 할 것들

• 프라우드넷에서는 ?• P2P, C/S 모두 연결유지 기능 프로토타입 구현된 상태• 리눅스 포팅 끝나면 마무리 예정 ( 현재 일부 업체 임상실험 (…) 중 )• 기존 사용중 업체들에게는 무료로 업데이트될거임

Page 21: 스마트폰 온라인 게임에서 고려해야 할 것들

멀티플랫폼

Page 22: 스마트폰 온라인 게임에서 고려해야 할 것들

현재 지원중언어 네트워크 클라이언트 생성C++ CNetClient* a=Proud::CNetClient::Create();

C# NetClient a=new Nettention.Proud.NetClient();

UnrealScript a = class'NetClient'.static.Create();

Java NetClient a=new com.nettention.proud.NetClient();

플랫폼 네트워크 클라이언트 라이브러리Windows ProudNetClient.lib

iOS libProudNetClient.a

Android, NDK ProudNetClient.jar libProudNetClient.a

Unreal Engine 3 UnrealEngine3/Development/src/ProudNet/*.*

Unity Engine ProudNetClient.dll (Android, iOS 도 동일 )

Page 23: 스마트폰 온라인 게임에서 고려해야 할 것들
Page 24: 스마트폰 온라인 게임에서 고려해야 할 것들

• 짜증나더라도 , epoll, kqueue, simple poll 은• reactor 모듈로 , iocp 는 proactor 모듈로 이원화 후 • 제각각 케이스를 만들어야 성능에 유리 • syscall 과 1:1 대응하기 때문 . 모바일에서 성능에 중요한 요소임

언어 비동기 I/O API 이벤트 대기 함수Windows IOCP GetQueuedCompletionStatus

Android epoll epoll_wait

iOS kqueue kevent

Marmalade simple poll select

Page 25: 스마트폰 온라인 게임에서 고려해야 할 것들

• Win32 API 쓰던 부분들 다 뜯어냄• #if 떡칠 최대한 모아놓고 거기서만 #if 떡칠• 제일 까다로왔던 부분은 의외로… string 부분임 -0-;

VC++, Marmalade Android, iOS

char Multibyte (3 개 국어 소화 불가능 )

UTF-8

wchar_t UTF-16 UTF-32 ( 메모리 너무 차지 )

Page 26: 스마트폰 온라인 게임에서 고려해야 할 것들

• Mono ≠ .Net Framework• iPhone3GS, iPhone 4 에서 일으키는 문제• Mono Socket.Connect 함수의 버그

Page 27: 스마트폰 온라인 게임에서 고려해야 할 것들

단일 서버

Page 28: 스마트폰 온라인 게임에서 고려해야 할 것들

논리적 단일 서버

Page 29: 스마트폰 온라인 게임에서 고려해야 할 것들

Web Application Server aka. WAS

• 클라이언트와 서버간 HTTP 로 통신• php, asp.net, node.js, java, …

Page 30: 스마트폰 온라인 게임에서 고려해야 할 것들

클라 LB

php

php

php

MySQL

redis

redis

redis

클라우드 서버• 로드밸런서• 웹서버• 서버간 메모리

동기화 & 캐시• 백엔드 디비

Page 31: 스마트폰 온라인 게임에서 고려해야 할 것들

장점• 빠른 개발• 손쉬운 클라우드 서버 인스턴싱• No down-time • 간편하게 scale out 가능• 연결 유지 불필요

Page 32: 스마트폰 온라인 게임에서 고려해야 할 것들

단점• 랙• 스토리지 과부하

TCP synrelay write/ack

Page 33: 스마트폰 온라인 게임에서 고려해야 할 것들

• 해킹된 클라

해킹된 판정 결과

Page 34: 스마트폰 온라인 게임에서 고려해야 할 것들

• 많은 계층 • HAL-VM-Linux-Apache-PHP-…• 서버간 통신량• TIME_WAIT

Page 35: 스마트폰 온라인 게임에서 고려해야 할 것들

• 플레이어간 상호작용에 하이젠버그

Page 36: 스마트폰 온라인 게임에서 고려해야 할 것들

• 몇 단점에도 불구하고 장점이 매우 큼• 낮은 반응 속도 < 높은 안정성

• 비동기 멀티플레이 게임에서는 만족

Page 37: 스마트폰 온라인 게임에서 고려해야 할 것들

decision making tree

비동기 멀티플레이

동기 멀티플레이 TCP, UDP

클라에서 플레이 판정

(빠른 반응성 , 서버 유지비 절감 )

서버에서 플레이 판정( 해킹 방어 ,

잠수함 패치 용이 )

HTTP

Page 38: 스마트폰 온라인 게임에서 고려해야 할 것들

웹서버 + 프라우드넷• 이렇게 개발하는 경우• 처음에 웹서버로 개발하다가

중도에 필요해지는 경우 • 멀티플레이 , 서버사이드 게임판정

• 어떻게 같이 사용하는지• DB 를 매개채로 데이터 공유• 플러그인을 통해 서버간 통신

Page 39: 스마트폰 온라인 게임에서 고려해야 할 것들

논리적 단일 서버• 우리의 DB cache 시스템으로 논리적 단일 서버를 이렇게 구축

게임DB

유저계정 DB

DB cache server

게임DB

유저계정 DB

DB cache server

게임DB

유저계정 DB

DB cache server

게임DB

유저계정 DB

DB cache server

게임서버

게임서버

게임서버

매핑 DB 매핑 DB

매핑 DB

클라

Page 40: 스마트폰 온라인 게임에서 고려해야 할 것들

클라우드

Page 41: 스마트폰 온라인 게임에서 고려해야 할 것들

클라우드 서버

3 6 9 12 18 240

5000

10000

15000

20000

25000

30000

35000

40000

45000

CCU

리얼 서버클라우드 서버

TCO 12

TCO 5.8

Page 42: 스마트폰 온라인 게임에서 고려해야 할 것들

클라우드 서버에서• 점검 없이 서버 증감• 클라우드 서버에서 매핑 DB• 인스턴수 줄이면 마이그레이션 어쩔…• 매핑 DB=SPOF? 미러링하세요

Page 43: 스마트폰 온라인 게임에서 고려해야 할 것들

실시간 멀티플레이는 ?Hypervisor

VMCPU

100%

VMCPU 20%

랙 유발

Page 44: 스마트폰 온라인 게임에서 고려해야 할 것들

클라우드에서 프라우드넷의 성능• 모바일 게임 Fish Riots

라이브 서버• A???? US West• 7GB RAM, 4 CPU• Windows Server 2012• 화면에 최대 50 개의 타

플레이어가 보여짐 ( 일반적인 MMORPG 보다 2 배정도 부하를 줌 )

• 스트레스 테스트 클라이언트를 사용• No P2P

Page 45: 스마트폰 온라인 게임에서 고려해야 할 것들

• 동시접속자 1112명에서 CPU 8~12% 사용• System process 는 약

6% 를 사용 ( 서버 반 클라 반 )

• 일반적인 서버의 한계 수위가 CPU 80% 인 점을 감안하면 , 최대 동시접속자 7000명 처리 가능

Page 46: 스마트폰 온라인 게임에서 고려해야 할 것들

리얼 머신에서 처리 성능CPU Intel® Core™ i7-2600 CPU @

3.40GHz(4 코어 & 하이퍼스레딩 )

메모리 16.0GB

운영체제 Window 8.1 Pro K

시스템 종류 64 비트 운영체제 , x64 기반 프로세서

더미 클라이언트1000 개+

즉 , 80% 기준으로 동시접속자

20000명 처리

Page 47: 스마트폰 온라인 게임에서 고려해야 할 것들

채팅 서버 머신당 동시접속자 6 만그것도 라이브 서비스에서

Page 48: 스마트폰 온라인 게임에서 고려해야 할 것들

지금 프라우드넷은…• 온라인 게임 플레이에서는 자신있는데 ,• 실시간 멀티플레이• 서버에서의 게임플레이 판정

• 문제는 대부분의 모바일 게임이 오프라인이라는…

• 아무튼 , 방망이는 계속 깎습니다(새로운 종류의 방망이도 만드는 중 )

Page 49: 스마트폰 온라인 게임에서 고려해야 할 것들

유니티 관련 세미나인데 유니티에 대한 얘기가 없네요 ?

Page 50: 스마트폰 온라인 게임에서 고려해야 할 것들

프라우드넷 on 유니티

13 Unity-powered5 unkown

4 other engines