50
서서 서서 서서서서 서서서 서서서 Nettention

서버 엔진 만고풍상 이야기

Embed Size (px)

DESCRIPTION

프라우드넷의 서비스 중 겪었던 기술적 난제와 극복했던 내역들을 소개합니다.

Citation preview

Page 1: 서버 엔진 만고풍상 이야기

서버 엔진 만고풍상 이야기

배현직Nettention

Page 2: 서버 엔진 만고풍상 이야기

내 소개

突击 1941

• 1995 년부터 게임회사에서 근무• 토끼와 거북이 3D, Menticide 격투 게임• 오즈 월드 , 블리츠 1941

• Game Programming Gems 5,7• ProudNet• KGC 2010, 2011, 독일 Quo Vadis

2012, 중국 CGDC 2012, 일본 CEDEC에서 강연

Page 3: 서버 엔진 만고풍상 이야기

게임 서버 엔진이란 ?

• 제공하는 것들–게임 서버와 네트워크 클라이언트–데이터베이스 중간 계층

• 게임 서버 개발을 쉽고 안전하게 해줌–클라이언트와 서버간 네트워킹– P2P 네트워킹–서버 한대에 수천명 이상의 플레이어–분산 서버 환경에서 백만명 이상의 플레이어

Page 4: 서버 엔진 만고풍상 이야기
Page 5: 서버 엔진 만고풍상 이야기

洛奇英雄传 镜子战争

OZ 祝祭

Page 6: 서버 엔진 만고풍상 이야기

仙境传说 II

Page 7: 서버 엔진 만고풍상 이야기

魔界村 Online

滑轮风

Page 8: 서버 엔진 만고풍상 이야기
Page 9: 서버 엔진 만고풍상 이야기

Project Mercury

Page 10: 서버 엔진 만고풍상 이야기

2008~2010만고풍상 이야기

Page 11: 서버 엔진 만고풍상 이야기

송신 – 수신 루틴이 서로 안맞음

Message m;m.Write(x);m.Write(y);m.Write(z);Send(m);

Receive(m);m.Read(x);m.Read(z);

x,y,z

Page 12: 서버 엔진 만고풍상 이야기

원격 프로시저 호출

송수신 코드 자동 생성

Page 13: 서버 엔진 만고풍상 이야기

Symmetric( 對稱 ) 공유기에서의 포트 예측의 부작용 ?

Page 14: 서버 엔진 만고풍상 이야기

그 기법은 최후의 선택으로 해야 !

Page 15: 서버 엔진 만고풍상 이야기

P2P 에서 릴레이로 전환할때 데이터 손실 ?

Packet loss!

Page 16: 서버 엔진 만고풍상 이야기

슬라이딩 윈도우도 옮겨야 !

Page 17: 서버 엔진 만고풍상 이야기

몇몇 공유기에서 홀펀칭이 사라지는 문제 ?

Page 18: 서버 엔진 만고풍상 이야기

피어마다 UDP 포트를 !

PORT 1

PORT 2

PORT 3

Page 19: 서버 엔진 만고풍상 이야기

몇몇 해킹 차단 장치에 의한 연결 유실 ?

ICMP

Page 20: 서버 엔진 만고풍상 이야기

PORT 1

PORT 2

PORT 3

클라이언트마다 UDP 포트를 !

Page 21: 서버 엔진 만고풍상 이야기

몇몇 공유기가 죽어버리는 문제 ?

Page 22: 서버 엔진 만고풍상 이야기

과다한 통신량이 발생하면 릴레이 서버로 후퇴

Page 23: 서버 엔진 만고풍상 이야기

그리고 packet throttling 과

MyChar(x,y,z)

MyShot(x,y,z)

MyChar(x,y,z)

Send queue

Page 24: 서버 엔진 만고풍상 이야기

그리고 수퍼 피어 선택 기능을 넣어서 해결

Page 25: 서버 엔진 만고풍상 이야기

분산 서버 개발은 골치아프다 ?

Page 26: 서버 엔진 만고풍상 이야기

서버간 통신에도 프라우드넷 P2P 를 쓰자 !

Master server

C/S

P2P

Page 27: 서버 엔진 만고풍상 이야기

2011만고풍상 이야기

Page 28: 서버 엔진 만고풍상 이야기

게임 서버 프로세스가 1 개 CPU 밖에 못쓴다 ?

CPU1 CPU2 CPU3 CPU40

10

20

30

40

50

60

70

80

90

100

I/O routineUser callback

Page 29: 서버 엔진 만고풍상 이야기

네트워크 I/O 루틴에서도 멀티 코어를 활용하게 개발했다 !

CPU1 CPU2 CPU3 CPU40

10

20

30

40

50

60

70

80

90

100

I/O routineUser callback

Page 30: 서버 엔진 만고풍상 이야기

중국 wangba 에서 드물게 패킷이 깨져버린다 ?

ABCACDAEF

ABCABDACDAEFAEK

Page 31: 서버 엔진 만고풍상 이야기

UDP 패킷 왜곡하기로 해결 !

ABCACDAEF

BACCADEAF

ABCACDAEF

Page 32: 서버 엔진 만고풍상 이야기

공유기 포트 매핑이 고갈되면 ?

고갈 !

연결이 하나씩 사라짐

Received packets bytesSent packets bytes

Active / avail-able connec-tions

Page 33: 서버 엔진 만고풍상 이야기

포트 매핑 재사용 기술 !

Page 34: 서버 엔진 만고풍상 이야기

MTU 탐색이 실패해서 큰 패킷이 전송되지 못하는 문제 ?

3000 바이트의 UDP 패킷ICMP “ 프래그먼테이션 필요”

Page 35: 서버 엔진 만고풍상 이야기

엔진 안에서 직접 UDP 패킷을 분해조립 !

500 바이트 * 6 패킷

Page 36: 서버 엔진 만고풍상 이야기

중국에서 인터넷 기간망 과부하 ?

Page 37: 서버 엔진 만고풍상 이야기

다섯가지 기술로 해결 !

• Packet coalescence• Packet throttling • Relay packet compression• P2P & C/S hybrid topology• 자체 개발한 혼잡 제어

Page 38: 서버 엔진 만고풍상 이야기

DB cache 시스템은 재활용이 어렵다 ?

• 데이터베이스 스키마가 너무 다양하다 ?• 중요한 데이터 ? ( 유료 아이템 , 전설 아이템 )• DB 제약사항 ( 인덱스 , 키 , 트리거 )• 게임 서버와 아이템 결재 서버간의 데이터 꼬임

Page 39: 서버 엔진 만고풍상 이야기

DB cache 가 DB 구조를 알게 해주는 기능을 추가했다 !

DB 스키마를 사용자 마음대로 정의

DB cache는 필요한 스토어드 프로시저를 생성함

Page 40: 서버 엔진 만고풍상 이야기

일방적 데이터 읽기 , 쓰기 API

Game server

DB cache DB

1. Updates data

Notify data change commit

2. Updates data 3. Updates data

Page 41: 서버 엔진 만고풍상 이야기

그리고 요청 - 응답형 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

Page 42: 서버 엔진 만고풍상 이야기

게다가 웹서버에서의 비 독점적 데이터 읽기 쓰기까지 혼합해서 만족 !

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

Page 43: 서버 엔진 만고풍상 이야기

소셜 게임 ? 모바일 게임 ?

Page 44: 서버 엔진 만고풍상 이야기

멀티플랫폼 !• 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)

Page 45: 서버 엔진 만고풍상 이야기

테스트 ! 테스트 ! 테스트 ! 테스트 !

• Robust Test• Regression Test• Stress Test

Page 46: 서버 엔진 만고풍상 이야기

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 들• 직접 제작한 유닛 테스트 시스템

Page 47: 서버 엔진 만고풍상 이야기

보너스 : 프라우드넷 소개

Page 48: 서버 엔진 만고풍상 이야기

프라우드넷 3 가지 구성 요소

P2P

C/S

DB cache

Server-to-serverLANClient-to-server

WAN

Page 49: 서버 엔진 만고풍상 이야기

프라우드넷 기본 사용 예DB cache

Server-to-serverLANClient-to-server

WAN

Connect()

JoinP2PGroup()

MyMessage(sendTo, a,b,c);

LoadData()UniUpdateData()

JoinP2PGroup()

Page 50: 서버 엔진 만고풍상 이야기

감사합니다 !

[email protected]