Upload
hyun-jik-bae
View
541
Download
11
Embed Size (px)
DESCRIPTION
프라우드넷의 서비스 중 겪었던 기술적 난제와 극복했던 내역들을 소개합니다.
Citation preview
서버 엔진 만고풍상 이야기
배현직Nettention
내 소개
突击 1941
• 1995 년부터 게임회사에서 근무• 토끼와 거북이 3D, Menticide 격투 게임• 오즈 월드 , 블리츠 1941
• Game Programming Gems 5,7• ProudNet• KGC 2010, 2011, 독일 Quo Vadis
2012, 중국 CGDC 2012, 일본 CEDEC에서 강연
게임 서버 엔진이란 ?
• 제공하는 것들–게임 서버와 네트워크 클라이언트–데이터베이스 중간 계층
• 게임 서버 개발을 쉽고 안전하게 해줌–클라이언트와 서버간 네트워킹– P2P 네트워킹–서버 한대에 수천명 이상의 플레이어–분산 서버 환경에서 백만명 이상의 플레이어
洛奇英雄传 镜子战争
OZ 祝祭
仙境传说 II
魔界村 Online
滑轮风
Project Mercury
2008~2010만고풍상 이야기
송신 – 수신 루틴이 서로 안맞음
Message m;m.Write(x);m.Write(y);m.Write(z);Send(m);
Receive(m);m.Read(x);m.Read(z);
x,y,z
원격 프로시저 호출
송수신 코드 자동 생성
Symmetric( 對稱 ) 공유기에서의 포트 예측의 부작용 ?
그 기법은 최후의 선택으로 해야 !
P2P 에서 릴레이로 전환할때 데이터 손실 ?
Packet loss!
슬라이딩 윈도우도 옮겨야 !
몇몇 공유기에서 홀펀칭이 사라지는 문제 ?
피어마다 UDP 포트를 !
PORT 1
PORT 2
PORT 3
몇몇 해킹 차단 장치에 의한 연결 유실 ?
ICMP
PORT 1
PORT 2
PORT 3
클라이언트마다 UDP 포트를 !
몇몇 공유기가 죽어버리는 문제 ?
과다한 통신량이 발생하면 릴레이 서버로 후퇴
그리고 packet throttling 과
MyChar(x,y,z)
MyShot(x,y,z)
MyChar(x,y,z)
Send queue
그리고 수퍼 피어 선택 기능을 넣어서 해결
분산 서버 개발은 골치아프다 ?
서버간 통신에도 프라우드넷 P2P 를 쓰자 !
Master server
C/S
P2P
2011만고풍상 이야기
게임 서버 프로세스가 1 개 CPU 밖에 못쓴다 ?
CPU1 CPU2 CPU3 CPU40
10
20
30
40
50
60
70
80
90
100
I/O routineUser callback
네트워크 I/O 루틴에서도 멀티 코어를 활용하게 개발했다 !
CPU1 CPU2 CPU3 CPU40
10
20
30
40
50
60
70
80
90
100
I/O routineUser callback
중국 wangba 에서 드물게 패킷이 깨져버린다 ?
ABCACDAEF
ABCABDACDAEFAEK
UDP 패킷 왜곡하기로 해결 !
ABCACDAEF
BACCADEAF
ABCACDAEF
공유기 포트 매핑이 고갈되면 ?
고갈 !
연결이 하나씩 사라짐
Received packets bytesSent packets bytes
Active / avail-able connec-tions
포트 매핑 재사용 기술 !
MTU 탐색이 실패해서 큰 패킷이 전송되지 못하는 문제 ?
3000 바이트의 UDP 패킷ICMP “ 프래그먼테이션 필요”
엔진 안에서 직접 UDP 패킷을 분해조립 !
500 바이트 * 6 패킷
중국에서 인터넷 기간망 과부하 ?
다섯가지 기술로 해결 !
• Packet coalescence• Packet throttling • Relay packet compression• P2P & C/S hybrid topology• 자체 개발한 혼잡 제어
DB cache 시스템은 재활용이 어렵다 ?
• 데이터베이스 스키마가 너무 다양하다 ?• 중요한 데이터 ? ( 유료 아이템 , 전설 아이템 )• DB 제약사항 ( 인덱스 , 키 , 트리거 )• 게임 서버와 아이템 결재 서버간의 데이터 꼬임
DB cache 가 DB 구조를 알게 해주는 기능을 추가했다 !
DB 스키마를 사용자 마음대로 정의
DB cache는 필요한 스토어드 프로시저를 생성함
일방적 데이터 읽기 , 쓰기 API
Game server
DB cache DB
1. Updates data
Notify data change commit
2. Updates data 3. Updates data
그리고 요청 - 응답형 API 와의 혼합
Game server
DB cache DBRequest data change commit
Commit suc-cess
Response change1. wait
2. wait 3. Updates data
4. Updates data
5. Updates data return & go ahead
게다가 웹서버에서의 비 독점적 데이터 읽기 쓰기까지 혼합해서 만족 !
Game server
DB cache DB
유료 아이템 거래 server
Request data change
1. wait
2. Updates data
commit
response
3. Updates data
3. Updates data
Notify change
4. Return & go ahead
소셜 게임 ? 모바일 게임 ?
멀티플랫폼 !• ProudNet for Unity• ProudNet for Flash• ProudNet for native iOS• ProudNet for native Android• ProudNet for Marmalade• ProudNet for Unreal Engine
Operation Crosscounter(iPhone, Android)
테스트 ! 테스트 ! 테스트 ! 테스트 !
• Robust Test• Regression Test• Stress Test
Belkin G WirelessTPLINK WR304G+TPLINK V108COSY BR674WLIPTIME G104MIPTIME Q304BUFFALO AIRSTATIONUNICORN WB1000NETGEAR WGR614V9DLINK DIR300LINKSYS WRV200MERCURY MR804TPLINK TLR410+TPLINK TLR402Samsung SWP1000ZIO V10IPTIME N5004NEXT 915VSMC WBR14-G2ZYXEL NBG417NLINKSYS WRT54G2AZTECH WL830RT4ASUS RX3041DLINK DIR600PROLINK WNR1004VOLANS
• 공유기 , 컴퓨터 ,VM 들• 직접 제작한 유닛 테스트 시스템
보너스 : 프라우드넷 소개
프라우드넷 3 가지 구성 요소
P2P
C/S
DB cache
Server-to-serverLANClient-to-server
WAN
프라우드넷 기본 사용 예DB cache
Server-to-serverLANClient-to-server
WAN
Connect()
JoinP2PGroup()
MyMessage(sendTo, a,b,c);
LoadData()UniUpdateData()
JoinP2PGroup()
감사합니다 !