SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
iFunFactory Inc.
GENERIC GAME SERVER FRAMEWORK
DESIGN & APPLICABLE TECHNIQUES
아이펀팩토리 문대경 (dkmoon@ifunfactory.com)
iFunFactory Inc.
THIS TALK IS
MAINLY ABOUT...
1. 시스템 디자인
2. 범용 게임 서버 프레임워크 디자인 연습 & 구현 기술
iFunFactory Inc.
ABOUT
YOUR SPEAKER
 옛날에 넥슨 서버팀장 (1999-2005)
 미국 유학생 및 클라우드 컴퓨팅 스타트업 시니어 엔지니어 (2005-2011)
 귀국 후 다시 넥슨의 피고용인 (2011-2013)
 끝으로 갓 1년 된 스타트업 대표 (2013-현재)
iFunFactory Inc.
DISCLAIMER
NO SHOPPING TOUR
걱정하지 마세요.
오늘 여기서는 물건 팔지 않습니다.
(문의: info@ifunfactory.com)
iFunFactory Inc.
SYSTEM
LOOSE DEFINITIONS
 특정 목적을 위한 물리적/논리적 컴포넌트의 집합
 핵심 디자인 요소: Interface 와 Architecture
iFunFactory Inc.
SYSTEM
INTERFACE
시스템이 무엇을 제공하는가?
(외부에서 바라보는 시스템의 모습)
Photo from ifixit.com
iFunFactory Inc.
SYSTEM
ARCHITECTURE
어떤 기능이 어디에 배치되는가?
(내부 구조에 대한 문제)
Photo from ifixit.com
iFunFactory Inc.
TRADE-OFFS
AS SYSTEM DESIGN PRINCIPLE
 만렙 시스템은 없다
 리소스 제약 외에도 선택지 간 충돌 때문
 Design decisions = Trade-off choices
훈남 외모
두뇌 힘
돈자상함
???
iFunFactory Inc.
TRADE-OFF IN SYSTEM DESIGN
EXAMPLE: CAP THEOREM
Consistency, Availability, Partition tolerance
이 3개 중 2개만 가능 (by Prof. Eric Brewer)
Consistency Partition
Tolerance
Availability
RDBMS
(MySQL)
iFunFactory Inc.
TRADE-OFF IN SYSTEM DESIGN
EXAMPLE: CAP THEOREM
Consistency, Availability, Partition tolerance
이 3개 중 2개만 가능 (by Prof. Eric Brewer)
Consistency Partition
Tolerance
Availability
RDBMS
(MySQL)
Cassandra
CouchDB
Dynamo
Redis
MongoDB
(SAFE=1)
iFunFactory Inc.
TRADE-OFF IN SYSTEM DESIGN
EXAMPLE: INTERNET PROTOCOL (IP)
Design Goals*
1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net)
2. 장애에서도 통신 가능
3. 다양한 형태의 서비스 지원
4. 다양한 네트워크 기술의 수용
5. 분산 관리
6. 저렴한 가격
7. 호스트의 쉬운 추가
8. 사용자별 자원 사용량 계측
*D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988
iFunFactory Inc.
Design Goals*
1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net)
2. 장애에서도 통신 가능
3. 다양한 형태의 서비스 지원
4. 다양한 네트워크 기술의 수용
5. 분산 관리
6. 저렴한 가격
7. 호스트의 쉬운 추가
8. 사용자별 자원 사용량 계측
*D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988
Autonomous System (AS)
& Interdomain Routing
TRADE-OFF IN SYSTEM DESIGN
EXAMPLE: INTERNET PROTOCOL (IP)
iFunFactory Inc.
TRADE-OFF IN SYSTEM DESIGN
EXAMPLE: INTERNET PROTOCOL (IP)
Design Goals*
1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net)
2. 장애에서도 통신 가능
3. 다양한 형태의 서비스 지원
4. 다양한 네트워크 기술의 수용
5. 분산 관리
6. 저렴한 가격
7. 호스트의 쉬운 추가
8. 사용자별 자원 사용량 계측
*D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988
iFunFactory Inc.
TRADE-OFF IN SYSTEM DESIGN
EXAMPLE: INTERNET PROTOCOL (IP)
Design Goals*
1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net)
2. 장애에서도 통신 가능
3. 다양한 형태의 서비스 지원
4. 다양한 네트워크 기술의 수용
5. 분산 관리
6. 저렴한 가격
7. 호스트의 쉬운 추가
8. 사용자별 자원 사용량 계측
*D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988
iFunFactory Inc.
EXPERIENCED SYSTEM DESIGNER
KNOW YOUR SYSTEM
 목표의 정의
• 어떤 가정 하에 어떤 것들이 필수이고, 어떤 것들을 포기할 수 있는가?
 목표를 반영하는 인터페이스/아키텍처 디자인
• 인터페이스와 아키텍처에 따라 시스템이 제공하는 것, 할 수 있는 것, 할 수 없는 것이 결정된다.
 디자인을 현실화
• 어떤 Technology를 쓸 것인가?
iFunFactory Inc.
SYSTEM COMPONENT
GRANULARITY
 코드 한 줄
 함수
 모듈
 서비스
 사람(?)
시스템 디자이너의 성장 방향
iFunFactory Inc.
SYSTEM DESIGN
RECAP
1. 시스템 디자인에 절대적으로 우월한 답은 없음
2. 시스템 디자인의 핵심은 어떤 가정하에서 무엇이 가능하고 불가능한지 정하는 것
3. 이를 위한 트레이오프 선택과 각각의 의미를 파악
4. 디자인을 구현으로 옮기는 것은 또 다른 기술
iFunFactory Inc.
LAB SESSION:
GENERIC GAME SERVER FRAMEWORK
iFunFactory Inc.
GAME SERVER FRAMEWORK
DESIGN REQUIREMENTS
 가정
• 우리는 어떤 게임이 올라갈지 모른다.
 반드시 달성할 것
• Flexibility: 가급적 임의의 게임을 모두 지원할 수 있어야 한다.
• Scalability: 서버를 추가하는 방식으로 scale-out 할 수 있어야 한다. (vs. scale-up)
 희생할 수도 있는 것
• Inefficiency: 임의의 게임을 지원하기 때문에 다소의 비효율성은 감안한다.
iFunFactory Inc.
GAME SERVER FRAMEWORK
DESIGN GOALS
1. Flexibility: 임의의 게임을 지원할 수 있어야 한다.
2. Scalability: scale-out 할 수 있어야 한다.
3. Performance: 최소 기준으로 서버당 active session 10,000개를 서비스 해야 한다.
iFunFactory Inc.
GAME SERVICE
SIMPLIFIED ARCHITECTURE
Game
Server
DB
Server
Game
Client
Game
Client
Game
Client
Billing
Server
Authen
Server
Analytics
Server
Dashboard
Data path
Control path
iFunFactory Inc.
WE WILL DESIGN THESE…
 Interface
• Data path: client-server message format
• Control path: server management (e.g., dashboard)
 Architecture
• Game object design
• Server distribution
iFunFactory Inc.
INTERFACE DESIGN #1
CLIENT-SERVER MESSAGE FORMAT
 Standard format
• HTTP, UDP, JSON, XML, …
• Pros: Usability
• Cons: Inefficiency
Game
Server
Game
Client
iFunFactory Inc.
INTERFACE DESIGN #1
CLIENT-SERVER MESSAGE FORMAT
 Custom format
• TLV, 길이를 앞에 넣는 TCP 메시지
• Pros: Efficiency
• Cons: Manageability
Game
Server
Game
Client
iFunFactory Inc.
 추가 고려 사항
• Message format overhead: 포맷 자체의 오버헤드 (예, XML tag, JSON braces, …)
• Traffic profile: 클라이언트-서버간의 트래픽 패턴 (평균, min-max 등).
• Encryption strategy: 메시지 전체를 암호화? 특정 field 만 암호화?
암호화된 binary data 를 전송할 수 있는가?
INTERFACE DESIGN #1
CLIENT-SERVER MESSAGE FORMAT
iFunFactory Inc.
INTERFACE DESIGN #1
CLIENT-SERVER MESSAGE FORMAT
이 가상의 예제에서는…
JSON
• Pros: 어떤 언어/플랫폼에서도 쉽게 구할 수 있는 라이브러리 (iOS, Android, PC, …)
표준 방법이기 때문에 learning curve 가 상대적으로 적음
어떤 게임이든 다룰 수 있는 유연성
상대적으로 적은 포맷 오버헤드 (VS. XML tags)
• Cons: 텍스트 형태이기 때문에 트래픽 오버헤드와 parsing 오버헤드.
(트래픽은 상대적으로 덜 걱정: 게임 트래픽은 수백 바이트의 적은 데이터가 Bursty 하게 발생)
iFunFactory Inc.
INTERFACE DESIGN #2
SERVER MANAGEMENT
 Push-based approach
• 서버가 상태 값을 주기적으로 생성 (예: file/DB logging, SNMP)
• 외부 프로세스가 이를 처리하고 별도의 채널로 게임 서버 프로세스를 관리
• Pros: 구현이 간단 (서버는 보내고 잊어버림)
• Cons: 불필요한 데이터 생성
사용하는 측에서 push 된 데이터의 format 을 가공해서 사용
데이터와 콘트롤이 별개의 채널로 존재
Game
Server
Mgmt
subsystem
Data
Push
Control
Invoke
iFunFactory Inc.
INTERFACE DESIGN #2
SERVER MANAGEMENT
 Pull-based approach
• 외부 요청이 있을 때만 서버가 상태 값을 반환
• 예: SOAP, REST, …
• Pros: 불필요한 데이터 생성 적음.
API 를 통한 쉬운 연동.
Data 와 control 이 같은 채널 사용
• Cons: 구현이 복잡 (항상 export 해야되는 data 는 pull 때까지 보관해야함)
Game
Server
Mgmt
subsystem
Data
Push
Control
Invoke
iFunFactory Inc.
INTERFACE DESIGN #2
SERVER MANAGEMENT
이 가상의 예제에서는…
Push-based: 중요 유저 행동 로그
• 손실이 생기면 안되고 중간 값들 모두 중요
• 외부 연동보다 내부 기록 (고객 지원) 이 더 중요
Pull-based: 서버 상태 및 통계 데이터
• 불특정 외부 시스템과의 연동 중요
• 몇 번의 손실이 생겨도 상관없으며 중간 값 보다 일정 주기의 결과값이 중요
iFunFactory Inc.
ARCHITECTURE DESIGN #1
GAME OBJECTS
 Stock game objects & class hierarchy
• 프레임워크에서 제공하는 게임 오브젝트 & 클래스 계층
• Pros: 특정 목적에 부합한다면 게임 개발자의 작업 최소화 가능
성능 개선이 용이
• Cons: 다양한 게임을 지원하기에는 유연성 부족 (다중 상속이 필요해짐)
iFunFactory Inc.
ARCHITECTURE DESIGN #1
GAME OBJECTS
 Custom game objects & class hierarchy
• Pros: 각 게임에 가장 적합한 오브젝트 설계 가능
• Cons: 모든 작업을 게임 개발자가 해야 됨
프레임워크가 게임 오브젝트 구현의 성능 개선을 할 수 없음
iFunFactory Inc.
ARCHITECTURE DESIGN #1
GAME OBJECTS
 Hybrid approach: class definition in meta language
• 클래스 정의는 meta 언어로 작성하고 프레임워크가 클래스 코드 생성
• Pros: 게임에 필요한 오브젝트 설계가 어느 정도 가능
• Cons: 여전히 프레임워크가 성능 개선하는데 한계. (특히 locking)
iFunFactory Inc.
DEADLOCK
HAPPENS IFF…
 Mutual exclusion
 Hold-and-wait
 No preemption
 Circular wait
iFunFactory Inc.
DEADLOCK
RESOLUTION
 Mutual exclusion
 Hold-and-wait 잡고 기다리는 대신 풀고 기다리기
 No preemption 강제로 lock 뺏기
 Circular wait 락 순서가 틀렸다면 다 풀고 새로 잡기
iFunFactory Inc.
DEADLOCK
RESOLUTION
 Mutual exclusion
 Hold-and-wait 잡고 기다리는 대신 풀고 기다리기
 No preemption 강제로 lock 뺏기
 Circular wait 락 순서가 틀렸다면 다 풀고 새로 잡기
돌고 있던 작업을 취소해야 함. 즉, rollback이 가능해야 함.
iFunFactory Inc.
DEADLOCK RESOLUTION
JOURNALING & ROLLBACK
 진행중인 작업을 취소 시, 일련의 동작들의 atomicity 를 보장할 수 없음
 이 때문에 진행중인 작업을 바로 state 로 반영하는 대신
Per-thread journal 에 기록 후, 작업의 성공적인 완료 시에만 state 로 반영함
 Rollback 은 journal 을 버리는 것만으로 간단하게 구현
iFunFactory Inc.
YOU MAY ASK…
Q. 정말 journaling 이 동작하나요?
A. 예
iFunFactory Inc.
YOU MAY ASK…
Q. 정말 journaling 이 동작하나요?
A. 예
iFunFactory Inc.
RETHINKING
CONCURRENCY-CONTROL
 Consistency 를 보장하기 위한 제어
 Serializability
• 결과물은 하나의 worker 만이 작업한 것과 같아야 한다.
iFunFactory Inc.
CONCURRENCY CONTROL
PESSIMISTIC VS. OPTIMISTIC
 Pessimistic concurrency control
 “우리는 반드시 충돌할거야.”
• Consistency 를 절대 어기지 않도록 보호. 그러니 취소도 없음.
• 중앙 집중식
iFunFactory Inc.
CONCURRENCY CONTROL
PESSIMISTIC VS. OPTIMISTIC
 Optimistic concurrency control
 “에이, 설마 충돌 나겠어? 그건 그때 가서 생각하자.”
• 일단 작업하고, consistency 조건을 어겼을 때는 작업 취소 (rollback)
• 분산 처리식
iFunFactory Inc.
CONCURRENCY CONTROL
PESSIMISTIC VS. OPTIMISTIC
어떤 것이 더 좋은가?
(연사가 싫어하는 표현이지만) 케바케
iFunFactory Inc.
CONCURRENCY CONTROL
PESSIMISTIC VS. OPTIMISTIC
어떤 것이 더 좋은가?
(연사가 싫어하는 표현이지만) 케바케
iFunFactory Inc.
CONCURRENCY CONTROL
PESSIMISTIC VS. OPTIMISTIC
Performance
(high lock contention)
Performance
(low lock contention)
Pessimistic Good Bad
Optimistic Bad Good
iFunFactory Inc.
CONCURRENCY CONTROL
PESSIMISTIC VS. OPTIMISTIC
Performance
(high lock contention)
Performance
(low lock contention)
Pessimistic Good Bad
Optimistic Bad Good
참고: 많은 게임에서, 설령 두 게임 유저가 동시에 리소스 경쟁을 하더라도 (예: 득템 경쟁),
network latency 때문에 게임 서버 입장에서 인지하는 contention rate 은 생각보다 높지 않은 편이다.
iFunFactory Inc.
ARCHITECTURE DESIGN #1
OBJECT DESIGN
이 가상의 예제에서는…
 Hybrid approach
• 게임 개발자는 game object 를 JSON 으로 기술하고 framework 이 class 코드를 생성한다.
• Deadlock 은 Hold-and-wait 을 깨서 해결한다.
• 이 때문에 journal & rollback 을 이용한 optimistic concurrency control 을 한다.
 Rollback 가능 시스템의 장점
• 다양한 exception 을 graceful 하게 처리할 수 있음
iFunFactory Inc.
ARCHITECTURE DESIGN #2
DISTRIBUTED SERVERS
 Partitioned world
• 오브젝트/사용자들을 파티셔닝해서 각 서버가 담당하게 지정
• 다른 서버의 사용자와는 통신이 불가능
• 대부분 “채널” 이라는 이름으로 존재
• Pros: 구현이 간단
• Cons: 게임 사용자들이 게임이 아닌 서버의 구성을 알게 되는 문제
iFunFactory Inc.
ARCHITECTURE DESIGN #2
DISTRIBUTED SERVERS
 Shared world
• 다른 서버의 사용자와의 통신은 RPC 를 통해서 이루어짐
• 모든 사용자가 하나의 거대한 world 에 포함됨
• Pros: 게임 유저들은 하나의 가상 세계를 공유하게 됨
• Cons: Remote locking 등 구현이 복잡
RPC 를 통하는 경우 유저들은 lag 으로 인식하게 됨 (sync 가 중요할 수록 문제)
iFunFactory Inc.
DISTRIBUTED SERVERS
REMOTE OBJECT HANDLING
S1 S2
O2
2) Remote lease request
Directory
Service
Object Server
O2 S2
1) Object lookup
3) Lock O2 for S1
4) Lease grant
iFunFactory Inc.
DISTRIBUTED SERVERS
REMOTE OBJECT HANDLING
S1 S2
Directory
Service
6) Object migration request
5) Update O2’s ref count
7) Object release order
8) Object release confirm
9) Update directory entry
10) Migration OK
iFunFactory Inc.
LAB SESSION
RECAP
 클라이언트-서버 메시지 포맷 JSON
 서버 관리 인터페이스 REST API
 게임 오브젝트 지원 JSON 으로부터 코드 생성 + Journaling
 분산 서버 RPC 를 통한 Shared World
iFunFactory Inc.
CONTACT
DKMOON@IFUNFACTORY.COM
WE ARE HIRING!

Mais conteúdo relacionado

Mais procurados

홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 

Mais procurados (20)

홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 

Semelhante a NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉

머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
Jeongkyu Shin
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 

Semelhante a NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉 (20)

[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기
 
Toast cloud for beginners
Toast cloud for beginnersToast cloud for beginners
Toast cloud for beginners
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and Terraform
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
피니엔진
피니엔진피니엔진
피니엔진
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
[slideshare]k8s.pptx
[slideshare]k8s.pptx[slideshare]k8s.pptx
[slideshare]k8s.pptx
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
 

Mais de iFunFactory Inc.

Mais de iFunFactory Inc. (20)

2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
 
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
 
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
 
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
 
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP
 
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 

NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉

  • 1. iFunFactory Inc. GENERIC GAME SERVER FRAMEWORK DESIGN & APPLICABLE TECHNIQUES 아이펀팩토리 문대경 (dkmoon@ifunfactory.com)
  • 2. iFunFactory Inc. THIS TALK IS MAINLY ABOUT... 1. 시스템 디자인 2. 범용 게임 서버 프레임워크 디자인 연습 & 구현 기술
  • 3. iFunFactory Inc. ABOUT YOUR SPEAKER  옛날에 넥슨 서버팀장 (1999-2005)  미국 유학생 및 클라우드 컴퓨팅 스타트업 시니어 엔지니어 (2005-2011)  귀국 후 다시 넥슨의 피고용인 (2011-2013)  끝으로 갓 1년 된 스타트업 대표 (2013-현재)
  • 4. iFunFactory Inc. DISCLAIMER NO SHOPPING TOUR 걱정하지 마세요. 오늘 여기서는 물건 팔지 않습니다. (문의: info@ifunfactory.com)
  • 5. iFunFactory Inc. SYSTEM LOOSE DEFINITIONS  특정 목적을 위한 물리적/논리적 컴포넌트의 집합  핵심 디자인 요소: Interface 와 Architecture
  • 6. iFunFactory Inc. SYSTEM INTERFACE 시스템이 무엇을 제공하는가? (외부에서 바라보는 시스템의 모습) Photo from ifixit.com
  • 7. iFunFactory Inc. SYSTEM ARCHITECTURE 어떤 기능이 어디에 배치되는가? (내부 구조에 대한 문제) Photo from ifixit.com
  • 8. iFunFactory Inc. TRADE-OFFS AS SYSTEM DESIGN PRINCIPLE  만렙 시스템은 없다  리소스 제약 외에도 선택지 간 충돌 때문  Design decisions = Trade-off choices 훈남 외모 두뇌 힘 돈자상함 ???
  • 9. iFunFactory Inc. TRADE-OFF IN SYSTEM DESIGN EXAMPLE: CAP THEOREM Consistency, Availability, Partition tolerance 이 3개 중 2개만 가능 (by Prof. Eric Brewer) Consistency Partition Tolerance Availability RDBMS (MySQL)
  • 10. iFunFactory Inc. TRADE-OFF IN SYSTEM DESIGN EXAMPLE: CAP THEOREM Consistency, Availability, Partition tolerance 이 3개 중 2개만 가능 (by Prof. Eric Brewer) Consistency Partition Tolerance Availability RDBMS (MySQL) Cassandra CouchDB Dynamo Redis MongoDB (SAFE=1)
  • 11. iFunFactory Inc. TRADE-OFF IN SYSTEM DESIGN EXAMPLE: INTERNET PROTOCOL (IP) Design Goals* 1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net) 2. 장애에서도 통신 가능 3. 다양한 형태의 서비스 지원 4. 다양한 네트워크 기술의 수용 5. 분산 관리 6. 저렴한 가격 7. 호스트의 쉬운 추가 8. 사용자별 자원 사용량 계측 *D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988
  • 12. iFunFactory Inc. Design Goals* 1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net) 2. 장애에서도 통신 가능 3. 다양한 형태의 서비스 지원 4. 다양한 네트워크 기술의 수용 5. 분산 관리 6. 저렴한 가격 7. 호스트의 쉬운 추가 8. 사용자별 자원 사용량 계측 *D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988 Autonomous System (AS) & Interdomain Routing TRADE-OFF IN SYSTEM DESIGN EXAMPLE: INTERNET PROTOCOL (IP)
  • 13. iFunFactory Inc. TRADE-OFF IN SYSTEM DESIGN EXAMPLE: INTERNET PROTOCOL (IP) Design Goals* 1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net) 2. 장애에서도 통신 가능 3. 다양한 형태의 서비스 지원 4. 다양한 네트워크 기술의 수용 5. 분산 관리 6. 저렴한 가격 7. 호스트의 쉬운 추가 8. 사용자별 자원 사용량 계측 *D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988
  • 14. iFunFactory Inc. TRADE-OFF IN SYSTEM DESIGN EXAMPLE: INTERNET PROTOCOL (IP) Design Goals* 1. 존재하는 네트워크들 연결 (ARPANET & ARPA packet radio net) 2. 장애에서도 통신 가능 3. 다양한 형태의 서비스 지원 4. 다양한 네트워크 기술의 수용 5. 분산 관리 6. 저렴한 가격 7. 호스트의 쉬운 추가 8. 사용자별 자원 사용량 계측 *D. Clark et al, “The Design philosophy of the DARPA internet protocols”, SIGCOMM CCR, 1988
  • 15. iFunFactory Inc. EXPERIENCED SYSTEM DESIGNER KNOW YOUR SYSTEM  목표의 정의 • 어떤 가정 하에 어떤 것들이 필수이고, 어떤 것들을 포기할 수 있는가?  목표를 반영하는 인터페이스/아키텍처 디자인 • 인터페이스와 아키텍처에 따라 시스템이 제공하는 것, 할 수 있는 것, 할 수 없는 것이 결정된다.  디자인을 현실화 • 어떤 Technology를 쓸 것인가?
  • 16. iFunFactory Inc. SYSTEM COMPONENT GRANULARITY  코드 한 줄  함수  모듈  서비스  사람(?) 시스템 디자이너의 성장 방향
  • 17. iFunFactory Inc. SYSTEM DESIGN RECAP 1. 시스템 디자인에 절대적으로 우월한 답은 없음 2. 시스템 디자인의 핵심은 어떤 가정하에서 무엇이 가능하고 불가능한지 정하는 것 3. 이를 위한 트레이오프 선택과 각각의 의미를 파악 4. 디자인을 구현으로 옮기는 것은 또 다른 기술
  • 18. iFunFactory Inc. LAB SESSION: GENERIC GAME SERVER FRAMEWORK
  • 19. iFunFactory Inc. GAME SERVER FRAMEWORK DESIGN REQUIREMENTS  가정 • 우리는 어떤 게임이 올라갈지 모른다.  반드시 달성할 것 • Flexibility: 가급적 임의의 게임을 모두 지원할 수 있어야 한다. • Scalability: 서버를 추가하는 방식으로 scale-out 할 수 있어야 한다. (vs. scale-up)  희생할 수도 있는 것 • Inefficiency: 임의의 게임을 지원하기 때문에 다소의 비효율성은 감안한다.
  • 20. iFunFactory Inc. GAME SERVER FRAMEWORK DESIGN GOALS 1. Flexibility: 임의의 게임을 지원할 수 있어야 한다. 2. Scalability: scale-out 할 수 있어야 한다. 3. Performance: 최소 기준으로 서버당 active session 10,000개를 서비스 해야 한다.
  • 21. iFunFactory Inc. GAME SERVICE SIMPLIFIED ARCHITECTURE Game Server DB Server Game Client Game Client Game Client Billing Server Authen Server Analytics Server Dashboard Data path Control path
  • 22. iFunFactory Inc. WE WILL DESIGN THESE…  Interface • Data path: client-server message format • Control path: server management (e.g., dashboard)  Architecture • Game object design • Server distribution
  • 23. iFunFactory Inc. INTERFACE DESIGN #1 CLIENT-SERVER MESSAGE FORMAT  Standard format • HTTP, UDP, JSON, XML, … • Pros: Usability • Cons: Inefficiency Game Server Game Client
  • 24. iFunFactory Inc. INTERFACE DESIGN #1 CLIENT-SERVER MESSAGE FORMAT  Custom format • TLV, 길이를 앞에 넣는 TCP 메시지 • Pros: Efficiency • Cons: Manageability Game Server Game Client
  • 25. iFunFactory Inc.  추가 고려 사항 • Message format overhead: 포맷 자체의 오버헤드 (예, XML tag, JSON braces, …) • Traffic profile: 클라이언트-서버간의 트래픽 패턴 (평균, min-max 등). • Encryption strategy: 메시지 전체를 암호화? 특정 field 만 암호화? 암호화된 binary data 를 전송할 수 있는가? INTERFACE DESIGN #1 CLIENT-SERVER MESSAGE FORMAT
  • 26. iFunFactory Inc. INTERFACE DESIGN #1 CLIENT-SERVER MESSAGE FORMAT 이 가상의 예제에서는… JSON • Pros: 어떤 언어/플랫폼에서도 쉽게 구할 수 있는 라이브러리 (iOS, Android, PC, …) 표준 방법이기 때문에 learning curve 가 상대적으로 적음 어떤 게임이든 다룰 수 있는 유연성 상대적으로 적은 포맷 오버헤드 (VS. XML tags) • Cons: 텍스트 형태이기 때문에 트래픽 오버헤드와 parsing 오버헤드. (트래픽은 상대적으로 덜 걱정: 게임 트래픽은 수백 바이트의 적은 데이터가 Bursty 하게 발생)
  • 27. iFunFactory Inc. INTERFACE DESIGN #2 SERVER MANAGEMENT  Push-based approach • 서버가 상태 값을 주기적으로 생성 (예: file/DB logging, SNMP) • 외부 프로세스가 이를 처리하고 별도의 채널로 게임 서버 프로세스를 관리 • Pros: 구현이 간단 (서버는 보내고 잊어버림) • Cons: 불필요한 데이터 생성 사용하는 측에서 push 된 데이터의 format 을 가공해서 사용 데이터와 콘트롤이 별개의 채널로 존재 Game Server Mgmt subsystem Data Push Control Invoke
  • 28. iFunFactory Inc. INTERFACE DESIGN #2 SERVER MANAGEMENT  Pull-based approach • 외부 요청이 있을 때만 서버가 상태 값을 반환 • 예: SOAP, REST, … • Pros: 불필요한 데이터 생성 적음. API 를 통한 쉬운 연동. Data 와 control 이 같은 채널 사용 • Cons: 구현이 복잡 (항상 export 해야되는 data 는 pull 때까지 보관해야함) Game Server Mgmt subsystem Data Push Control Invoke
  • 29. iFunFactory Inc. INTERFACE DESIGN #2 SERVER MANAGEMENT 이 가상의 예제에서는… Push-based: 중요 유저 행동 로그 • 손실이 생기면 안되고 중간 값들 모두 중요 • 외부 연동보다 내부 기록 (고객 지원) 이 더 중요 Pull-based: 서버 상태 및 통계 데이터 • 불특정 외부 시스템과의 연동 중요 • 몇 번의 손실이 생겨도 상관없으며 중간 값 보다 일정 주기의 결과값이 중요
  • 30. iFunFactory Inc. ARCHITECTURE DESIGN #1 GAME OBJECTS  Stock game objects & class hierarchy • 프레임워크에서 제공하는 게임 오브젝트 & 클래스 계층 • Pros: 특정 목적에 부합한다면 게임 개발자의 작업 최소화 가능 성능 개선이 용이 • Cons: 다양한 게임을 지원하기에는 유연성 부족 (다중 상속이 필요해짐)
  • 31. iFunFactory Inc. ARCHITECTURE DESIGN #1 GAME OBJECTS  Custom game objects & class hierarchy • Pros: 각 게임에 가장 적합한 오브젝트 설계 가능 • Cons: 모든 작업을 게임 개발자가 해야 됨 프레임워크가 게임 오브젝트 구현의 성능 개선을 할 수 없음
  • 32. iFunFactory Inc. ARCHITECTURE DESIGN #1 GAME OBJECTS  Hybrid approach: class definition in meta language • 클래스 정의는 meta 언어로 작성하고 프레임워크가 클래스 코드 생성 • Pros: 게임에 필요한 오브젝트 설계가 어느 정도 가능 • Cons: 여전히 프레임워크가 성능 개선하는데 한계. (특히 locking)
  • 33. iFunFactory Inc. DEADLOCK HAPPENS IFF…  Mutual exclusion  Hold-and-wait  No preemption  Circular wait
  • 34. iFunFactory Inc. DEADLOCK RESOLUTION  Mutual exclusion  Hold-and-wait 잡고 기다리는 대신 풀고 기다리기  No preemption 강제로 lock 뺏기  Circular wait 락 순서가 틀렸다면 다 풀고 새로 잡기
  • 35. iFunFactory Inc. DEADLOCK RESOLUTION  Mutual exclusion  Hold-and-wait 잡고 기다리는 대신 풀고 기다리기  No preemption 강제로 lock 뺏기  Circular wait 락 순서가 틀렸다면 다 풀고 새로 잡기 돌고 있던 작업을 취소해야 함. 즉, rollback이 가능해야 함.
  • 36. iFunFactory Inc. DEADLOCK RESOLUTION JOURNALING & ROLLBACK  진행중인 작업을 취소 시, 일련의 동작들의 atomicity 를 보장할 수 없음  이 때문에 진행중인 작업을 바로 state 로 반영하는 대신 Per-thread journal 에 기록 후, 작업의 성공적인 완료 시에만 state 로 반영함  Rollback 은 journal 을 버리는 것만으로 간단하게 구현
  • 37. iFunFactory Inc. YOU MAY ASK… Q. 정말 journaling 이 동작하나요? A. 예
  • 38. iFunFactory Inc. YOU MAY ASK… Q. 정말 journaling 이 동작하나요? A. 예
  • 39. iFunFactory Inc. RETHINKING CONCURRENCY-CONTROL  Consistency 를 보장하기 위한 제어  Serializability • 결과물은 하나의 worker 만이 작업한 것과 같아야 한다.
  • 40. iFunFactory Inc. CONCURRENCY CONTROL PESSIMISTIC VS. OPTIMISTIC  Pessimistic concurrency control  “우리는 반드시 충돌할거야.” • Consistency 를 절대 어기지 않도록 보호. 그러니 취소도 없음. • 중앙 집중식
  • 41. iFunFactory Inc. CONCURRENCY CONTROL PESSIMISTIC VS. OPTIMISTIC  Optimistic concurrency control  “에이, 설마 충돌 나겠어? 그건 그때 가서 생각하자.” • 일단 작업하고, consistency 조건을 어겼을 때는 작업 취소 (rollback) • 분산 처리식
  • 42. iFunFactory Inc. CONCURRENCY CONTROL PESSIMISTIC VS. OPTIMISTIC 어떤 것이 더 좋은가? (연사가 싫어하는 표현이지만) 케바케
  • 43. iFunFactory Inc. CONCURRENCY CONTROL PESSIMISTIC VS. OPTIMISTIC 어떤 것이 더 좋은가? (연사가 싫어하는 표현이지만) 케바케
  • 44. iFunFactory Inc. CONCURRENCY CONTROL PESSIMISTIC VS. OPTIMISTIC Performance (high lock contention) Performance (low lock contention) Pessimistic Good Bad Optimistic Bad Good
  • 45. iFunFactory Inc. CONCURRENCY CONTROL PESSIMISTIC VS. OPTIMISTIC Performance (high lock contention) Performance (low lock contention) Pessimistic Good Bad Optimistic Bad Good 참고: 많은 게임에서, 설령 두 게임 유저가 동시에 리소스 경쟁을 하더라도 (예: 득템 경쟁), network latency 때문에 게임 서버 입장에서 인지하는 contention rate 은 생각보다 높지 않은 편이다.
  • 46. iFunFactory Inc. ARCHITECTURE DESIGN #1 OBJECT DESIGN 이 가상의 예제에서는…  Hybrid approach • 게임 개발자는 game object 를 JSON 으로 기술하고 framework 이 class 코드를 생성한다. • Deadlock 은 Hold-and-wait 을 깨서 해결한다. • 이 때문에 journal & rollback 을 이용한 optimistic concurrency control 을 한다.  Rollback 가능 시스템의 장점 • 다양한 exception 을 graceful 하게 처리할 수 있음
  • 47. iFunFactory Inc. ARCHITECTURE DESIGN #2 DISTRIBUTED SERVERS  Partitioned world • 오브젝트/사용자들을 파티셔닝해서 각 서버가 담당하게 지정 • 다른 서버의 사용자와는 통신이 불가능 • 대부분 “채널” 이라는 이름으로 존재 • Pros: 구현이 간단 • Cons: 게임 사용자들이 게임이 아닌 서버의 구성을 알게 되는 문제
  • 48. iFunFactory Inc. ARCHITECTURE DESIGN #2 DISTRIBUTED SERVERS  Shared world • 다른 서버의 사용자와의 통신은 RPC 를 통해서 이루어짐 • 모든 사용자가 하나의 거대한 world 에 포함됨 • Pros: 게임 유저들은 하나의 가상 세계를 공유하게 됨 • Cons: Remote locking 등 구현이 복잡 RPC 를 통하는 경우 유저들은 lag 으로 인식하게 됨 (sync 가 중요할 수록 문제)
  • 49. iFunFactory Inc. DISTRIBUTED SERVERS REMOTE OBJECT HANDLING S1 S2 O2 2) Remote lease request Directory Service Object Server O2 S2 1) Object lookup 3) Lock O2 for S1 4) Lease grant
  • 50. iFunFactory Inc. DISTRIBUTED SERVERS REMOTE OBJECT HANDLING S1 S2 Directory Service 6) Object migration request 5) Update O2’s ref count 7) Object release order 8) Object release confirm 9) Update directory entry 10) Migration OK
  • 51. iFunFactory Inc. LAB SESSION RECAP  클라이언트-서버 메시지 포맷 JSON  서버 관리 인터페이스 REST API  게임 오브젝트 지원 JSON 으로부터 코드 생성 + Journaling  분산 서버 RPC 를 통한 Shared World