SlideShare una empresa de Scribd logo
1 de 42
iFunFactory Inc.
Apache ZooKeeper 로
분산 서버 만들기
아이펀팩토리 문대경
dkmoon@ifunfactory.com
iFunFactory Inc.
TALK
AGENDA
 분산 시스템에서 consensus 문제
 Consensus 문제 해결을 위한 분산 알고리즘들
 실제 적용된 ZooKeeper 사용 예
 ZooKeeper 사용시 애로점
iFunFactory Inc.
DISTRIBUTED SYSTEMS
DEFINITION
A distributed system is a collection of independent computers that
appears to its users as a single coherent system.
- Tanenbaum & van Steen, Distributed Systems. Principles and Paradigms, 2007
iFunFactory Inc.
DISTRIBUTED SYSTEMS
DEFINITION
A distributed system is a collection of independent computers that
appears to its users as a single coherent system.
#독립된 컴퓨터들의 집합체, #하나의 단일 시스템, #성공적
- Tanenbaum & van Steen, Distributed Systems. Principles and Paradigms, 2007
iFunFactory Inc.
DISTRIBUTED SYSTEMS
ANOTHER DEFINITION
A distributed system is a software system in which components located on
networked computers communicate and coordinate their actions by passing
messages. The components interact with each other in order to achieve a
common goal.
- Wikipedia
iFunFactory Inc.
DISTRIBUTED SYSTEMS
ANOTHER DEFINITION
A distributed system is a software system in which components located on
networked computers communicate and coordinate their actions by passing
messages. The components interact with each other in order to achieve a
common goal.
#네트웍으로 연결된 컴퓨터들, #메시지 패싱, #공통의 목표
- Wikipedia
iFunFactory Inc.
DISTRIBUTED SYSTEMS
DEFINITION KEY TERMS
# 독립된 컴퓨터들의 집합체
# 네트웍을 통한 메시지 패싱
# 공통의 목표
# 하나의 단일 시스템
iFunFactory Inc.
DISTRIBUTED SYSTEMS
DEFINITION KEY TERMS
# 독립된 컴퓨터 프로세스들의 집합체
# 네트웍을 통한 메시지 패싱
# 공통의 목표
# 하나의 단일 시스템
iFunFactory Inc.
GAME SERVER
AS A DISTRIBUTED SYSTEM
# 독립된 컴퓨터 프로세스들의 집합체 ⇨ 역할에 따른 서버군들 (로그인, 로비,…)
# 네트웍을 통한 메시지 패싱 ⇨ RPC 메시지 (via TCP, UDP, REST, IPC, …)
# 공통의 목표 ⇨ 게임 서비스
# 하나의 단일 시스템 ⇨ 서버구성은 플레이어에게는 비밀♡
iFunFactory Inc.
CONSENSUS PROBLEM
IN DISTRIBUTED SYSTEMS
 여러 프로세스들이 “하나의 값” 으로 의견 일치를 이루는 것.
 “값”이라 하는 것은 다양한 의미를 갖음.
• Transaction 을 commit 할지 abort 할지에 대한 결정도 “값”
• Master-slave 구조에서 “누가 master” 인지에 대한 결정도 “값”
• “값”보다는 어쩌면 “state” 라는 말이 더 잘 어울릴지도…
iFunFactory Inc.
CONSENSUS PROBLEM
IN DISTRIBUTED SYSTEMS
왜 갑자기? 이게 중요한가?
iFunFactory Inc.
CONSENSUS PROBLEM
IN DISTRIBUTED SYSTEMS
왜 갑자기? 이게 중요한가?
iFunFactory Inc.
CONSENSUS PROBLEM
IN DISTRIBUTED SYSTEMS
왜 갑자기? 이게 중요한가?
분산 시스템에서 피해갈 수 없는 문제임
• 서버들간 시간 동기, Master 선출, 분산 transaction 의 commit 여부, 원격 자원의 locking…
• MySQL master-slave sync 에도…
• MongoDB replica 의 primary election 에도…
• 여러분의 Gmail 메일 박스가 구글 서버에 복제되고 있는 이 순간에도…
iFunFactory Inc.
CONSENSUS PROBLEM
IN DISTRIBUTED SYSTEMS
왜 갑자기? 이게 중요한가?
분산 시스템에서 피해갈 수 없는 문제임
• 서버들간 시간 동기, Master 선출, 분산 transaction 의 commit 여부, 원격 자원의 locking…
• MySQL master-slave sync 에도…
• MongoDB replica 의 primary election 에도…
• 여러분의 Gmail 메일 박스가 구글 서버에 복제되고 있는 이 순간에도…
 여러 프로세스가 하나의 일관된 상태에 도달해야 되는 모든 경우는 consensus 문제를 풀어야 함
iFunFactory Inc.
SOLUTION #1
CENTRALIZED APPROACH
 의사 결정을 하나의 결정권자에게 맡김
• 별도로 만든 process, REDIS, SQL DB, …
Global
Coordinator
Process
#1
Process
#2
iFunFactory Inc.
SOLUTION #1
CENTRALIZED APPROACH
 의사 결정을 하나의 결정권자에게 맡김
• 별도로 만든 process, REDIS, SQL DB, …
 장점: 간단함 (Simplicity is beauty)
Global
Coordinator
Process
#1
Process
#2
iFunFactory Inc.
SOLUTION #1
CENTRALIZED APPROACH
 의사 결정을 하나의 결정권자에게 맡김
• 별도로 만든 process, REDIS, SQL DB, …
 장점: 간단함 (Simplicity is beauty)
 단점: 장애에 취약
• Coordinator 가 “Single point of failure”
Global
Coordinator
Process
#1
Process
#2
iFunFactory Inc.
SOLUTION #1
CENTRALIZED APPROACH
Coordinator 를 여럿 두면 어떨까?
Coordinator
#1
Process
#1
Process
#2
Coordinator
#3
Coordinator
#2
Coordinator Group
iFunFactory Inc.
SOLUTION #1
CENTRALIZED APPROACH
Coordinator 를 여럿 두면 어떨까?
⇨ Coordinator 간의 master 선출 문제
그리고 coordinator 간 sync 문제 Coordinator
#1
Process
#1
Process
#2
Coordinator
#3
Coordinator
#2
Coordinator Group
iFunFactory Inc.
SOLUTION #1
CENTRALIZED APPROACH
Coordinator 를 여럿 두면 어떨까?
⇨ Coordinator 간의 master 선출 문제
그리고 coordinator 간 sync 문제
⇨ 또 다른 consensus 문제
Coordinator
#1
Process
#1
Process
#2
Coordinator
#3
Coordinator
#2
Coordinator Group
iFunFactory Inc.
잠깐!
시스템 구현에 “만능 키” 는 없다.
선택지의 장단점을 잘 이해하고 선택하는게 중요하다.
iFunFactory Inc.
내 서비스 환경에서 fail-stop 이 괜찮다면
Single coordinator 도 좋은 선택이다.
iFunFactory Inc.
그러나 그렇지 못하다면 …
iFunFactory Inc.
SOLUTION #2
DE-CENTRALIZED APPROACH
 Distributed Algorithm 으로 구현
• 프로세스들은 채널을 통해 메시지를 주고 받음
• 프로세스들이 독립적으로 연산해서 “동일한 값”에 도달해야 함
Process
#1
Process
#2
Process
#3
iFunFactory Inc.
SOLUTION #2
DE-CENTRALIZED APPROACH
 Distributed Algorithm 으로 구현
• 프로세스들은 채널을 통해 메시지를 주고 받음
• 프로세스들이 독립적으로 연산해서 “동일한 값”에 도달해야 함
 Fault-tolerant 해야함
• 채널의 안정성 (Two Armies Problem)
• Process 의 오류 (Byzantine Generals Problem)
Process
#1
Process
#2
Process
#3
iFunFactory Inc.
TWO ARMIES PROBLEM
(UNRELIABLE LINKS)
두 부대가 적군을 공격할 시간을 전령을 통해 협의하는데,
전령이 적군을 뚫고 제대로 갔다는 보장이 없다!
iFunFactory Inc.
BYZANTINE GENERALS PROBLEM
(FAULTY PROCESS)
풍전등화 앞 제국의 운명.
적군과의 일전을 앞두고 일부 배신한 장군은 가짜 전령을 보내는데…
사진 출처: filmhdwallpapers.com 에서 영화 Gladiator
iFunFactory Inc.
ABOUT
PAXOS
 Leslie Lamport 에 의해 1989년에 발표
 가정
• 프로세스는 죽을 수 있음
• 메시지는 유실되거나 중복될 수 있음
 보장
• 프로세스들이 모두 같은 순서로 입력을 처리하는 것을 보장
• 프로세스의 과반수 이상이 살아있다면 consensus 에 도달 가능
 Google Chubby, Cassandra 등을 포함해 광범위하게 사용됨
사진 출처: Wikipedia.com
iFunFactory Inc.
ABOUT
ZOOKEEPER ATOMIC BROADCAST (ZAB)
 Yahoo Research 의 Junqueira, Reed, Serafini 에 의해 2010년 논문으로 발표
 Paxos 의 문제점
• 프로세스들이 같은 순서로 입력을 처리하는 것을 보장할 뿐, 입력의 순서는 보장하지 않음
• 이 때문에 crash 에서 복구될 때 입력의 순서가 crash 전과 다를 수 있음
• 이를 방지하기 위해서 입력을 하나씩 보내면 throughput 이 급격히 떨어짐
 가정
• FIFO 채널이라는 Paxos 보다 강한 네트워크 요구 조건 (TCP)
 보장
• 입력의 total order 가 복구 후에도 바뀌지 않음을 보장
iFunFactory Inc.
ABOUT
APACHE ZOOKEEPER
이 슬라이드 기억나십니까?
iFunFactory Inc.
ABOUT
APACHE ZOOKEEPER
이게 바로 ZooKeeper!
iFunFactory Inc.
ABOUT
APACHE ZOOKEEPER
 Coordination system
• 분산 시스템의 consensus 문제를 위탁할 수 있는 빌딩 블록
 분산 시스템 구현에서 다양하게 활용
• 분산 locking, 동적 configuration 관리, 마스터 election, 메시지 큐, …
 사용
• 2000년대 말부터 Yahoo 내부 web crawler 등에서 사용
• Hadoop 에서 cluster 관리를 위해서 사용
iFunFactory Inc.
ABOUT
APACHE ZOOKEEPER
 파일 시스템과 유사한 계층적 구조
• Znode는 data 와 children 모두 가질 수 있음
• Znode 의 data 제한은 1MB
iFunFactory Inc.
APACHE ZOOKEEPER
USEFUL FEATURES
 임시 노드 (Ephemeral node)
• Ephemeral 속성으로 znode 생성시, 노드를 만든 세션이 끊기면 노드도 같이 사라짐
• 분산 lock 을 잡고 있는 게임 서버가 죽어도 lock 을 회수할 수 있음
 순차 노드 (Sequence node)
• Sequene 속성으로 znode 생성시, 노드에 자동으로 일련 번호를 붙여줌
• Request queue 구현에 활용 가능
 Watcher
• 특정 노드에 이벤트 발생시 알림을 받을 수 있음
• 노드 삭제, 노드 데이터 변경을 처리해야될 때 편리함
iFunFactory Inc.
CASE STUDY #1
PEER GAME SERVER DISCOVERY
 상황: 로비 서버가 유저에게 접근 가능한 게임 서버 리스트를 동적으로 전달할 때
 해법
1. 게임 서버는 프로세스가 뜰 때 자신의 UID 를 생성함
2. /servers/{UID} 형태로 노드를 생성하고, 노드 data 에 자신의 IP, port 를 등록함
3. /servers/ 아래의 노드들을 순회하여 이미 뜬 게임 서버들이 등록해둔 IP, port 를 알아냄
4. /servers/ 에 watcher 를 등록해 이후에 등록되는 게임 서버가 있다면 이를 알림으로 받음
 퀴즈
• 게임 서버가 죽을 때 다른 서버들이 이를 눈치채게 하려면 어떻게 하면 될까?
• 게임 서버를 역할별로 묶어서, 특정 역할의 서버 리스트를 알고 싶을 때는 어떻게 할까?
• 게임 서버들이 접속해야되는 외부 API 서버 주소를 동적으로 관리하고 싶다면 어떻게 하면 될까?
iFunFactory Inc.
CASE STUDY #2
DUPLICATE LOGIN PREVENTION
 상황: 게임 서버가 여러대일 때 사용자의 중복 로그인을 체크할 때
 해법
1. 유저가 접속하면 해당 서버는 /users/{NAME}/ 형태로 노드를 생성하고, 노드 data 로 서버의 UID 를 기록
2. 다른 서버에서 유저 접속 여부를 확인하고 싶으면 /users/{NAME} 의 존재 여부 확인
3. 유저가 로그아웃하면 /users/{NAME} 을 삭제
 퀴즈
• 이 방법이 SQL DB 에 로그인 상태를 기록하는 것보다 어떤 점에서 유리할까?
iFunFactory Inc.
USAGE
WARNING
빈번히 갱신되는 데이터 저장소로 사용하면 절대 안됩니다.
(Consensus 는 비싼 연산입니다. 특히 “쓰기” 는요.)
iFunFactory Inc.
APACHE ZOOKEEPER
PERFORMANCE
 쓰기보다 읽기가 많다면 바람직
 서버 대수의 증가는 동시 발생 장애 유연성을
위해서이지 처리 속도를 위한 것이 아님
출처: http://zookeeper.apache.org
iFunFactory Inc.
APACHE ZOOKEEPER
RELIABILITY
 Slave 가 죽는 것은 별 지장 없음
 Master 가 죽더라도 200ms 이내로 복구함
1. Slave 하나 죽였다가 살림
2. 다른 slave 하나 죽였다가 살림
3. Master 죽임
4. Slave 두 개를 동시에 죽였다가 살림
5. Master 를 죽임
7개 노드의 경우. 출처: http://zookeeper.apache.org
iFunFactory Inc.
ZOOKEEPER
CHALLENGES IN PRACTICE
 JVM 튜닝
• 만일 기존에 JAVA 프로세스 띄우던 것이 없다면 특히나 더…
 부실한 문서
• 특히 서버 관리 문서가 부실함
• JAVA library 문서는 잘 되어있음. C library 문서는 header 파일을 보면서 해야됨.
 동적으로 ZooKeeper 서버를 추가/삭제하는 것이 안됨
• ZooKeeper cluster 안에서 다른 서버들 리스트는 사전에 설정 파일로 고정되어야 함
iFunFactory Inc.
TALK
RECAP
 게임 서버는 분산 시스템입니다.
 분산 시스템은 Consensus 문제를 겪습니다.
 Consensus 를 풀기 위한 유명한 방법으로 Paxos 가 있습니다.
 Paxos 로 일일히 구현하지 않고 coordinator 에게 맡겨서 풀 수도 있습니다.
 ZooKeeper 는 fault-tolerant 한 coordinator 빌딩 블록입니다.
⇨ 따라서 게임 내 분산 처리 문제를 ZooKeeper 를 이용해 해결할 수 있습니다.
iFunFactory Inc.
감사합니다.
혹시 질문 있으신가요?
dkmoon@ifunfactory.com

Más contenido relacionado

La actualidad más candente

임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015devCAT Studio, NEXON
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요Jo Hoon
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event SourcingMike Bild
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...Amazon Web Services Korea
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건강 민우
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...Amazon Web Services Korea
 
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 theoremSeungmo Koo
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 

La actualidad más candente (20)

임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event Sourcing
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
 
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
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 

Similar a Apache ZooKeeper 로
 분산 서버 만들기

[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
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 TerraformInho Kang
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스NAVER D2
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practicesHyunil Shin
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infraJe Hun Kim
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live세준 김
 
Kafka introduce kr
Kafka introduce krKafka introduce kr
Kafka introduce krJung soo Ahn
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제Kiyoung Moon
 
Micro Service Architecture(MSA) 탐방기
Micro Service Architecture(MSA) 탐방기Micro Service Architecture(MSA) 탐방기
Micro Service Architecture(MSA) 탐방기jbugkorea
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명JungWoon Lee
 
하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickrSeongSik Kim
 
Jbug 발표 msa탐방기_공유자료
Jbug 발표 msa탐방기_공유자료Jbug 발표 msa탐방기_공유자료
Jbug 발표 msa탐방기_공유자료jbugkorea
 

Similar a Apache ZooKeeper 로
 분산 서버 만들기 (20)

[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
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
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practices
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infra
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
Kafka introduce kr
Kafka introduce krKafka introduce kr
Kafka introduce kr
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 
Micro Service Architecture(MSA) 탐방기
Micro Service Architecture(MSA) 탐방기Micro Service Architecture(MSA) 탐방기
Micro Service Architecture(MSA) 탐방기
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명
 
하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr
 
Jbug 발표 msa탐방기_공유자료
Jbug 발표 msa탐방기_공유자료Jbug 발표 msa탐방기_공유자료
Jbug 발표 msa탐방기_공유자료
 

Más de iFunFactory Inc.

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

Más 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
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
게임서버 구축 방법비교 : 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 게임 구현에서의 차이점 비교
 

Apache ZooKeeper 로
 분산 서버 만들기

  • 1. iFunFactory Inc. Apache ZooKeeper 로 분산 서버 만들기 아이펀팩토리 문대경 dkmoon@ifunfactory.com
  • 2. iFunFactory Inc. TALK AGENDA  분산 시스템에서 consensus 문제  Consensus 문제 해결을 위한 분산 알고리즘들  실제 적용된 ZooKeeper 사용 예  ZooKeeper 사용시 애로점
  • 3. iFunFactory Inc. DISTRIBUTED SYSTEMS DEFINITION A distributed system is a collection of independent computers that appears to its users as a single coherent system. - Tanenbaum & van Steen, Distributed Systems. Principles and Paradigms, 2007
  • 4. iFunFactory Inc. DISTRIBUTED SYSTEMS DEFINITION A distributed system is a collection of independent computers that appears to its users as a single coherent system. #독립된 컴퓨터들의 집합체, #하나의 단일 시스템, #성공적 - Tanenbaum & van Steen, Distributed Systems. Principles and Paradigms, 2007
  • 5. iFunFactory Inc. DISTRIBUTED SYSTEMS ANOTHER DEFINITION A distributed system is a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal. - Wikipedia
  • 6. iFunFactory Inc. DISTRIBUTED SYSTEMS ANOTHER DEFINITION A distributed system is a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal. #네트웍으로 연결된 컴퓨터들, #메시지 패싱, #공통의 목표 - Wikipedia
  • 7. iFunFactory Inc. DISTRIBUTED SYSTEMS DEFINITION KEY TERMS # 독립된 컴퓨터들의 집합체 # 네트웍을 통한 메시지 패싱 # 공통의 목표 # 하나의 단일 시스템
  • 8. iFunFactory Inc. DISTRIBUTED SYSTEMS DEFINITION KEY TERMS # 독립된 컴퓨터 프로세스들의 집합체 # 네트웍을 통한 메시지 패싱 # 공통의 목표 # 하나의 단일 시스템
  • 9. iFunFactory Inc. GAME SERVER AS A DISTRIBUTED SYSTEM # 독립된 컴퓨터 프로세스들의 집합체 ⇨ 역할에 따른 서버군들 (로그인, 로비,…) # 네트웍을 통한 메시지 패싱 ⇨ RPC 메시지 (via TCP, UDP, REST, IPC, …) # 공통의 목표 ⇨ 게임 서비스 # 하나의 단일 시스템 ⇨ 서버구성은 플레이어에게는 비밀♡
  • 10. iFunFactory Inc. CONSENSUS PROBLEM IN DISTRIBUTED SYSTEMS  여러 프로세스들이 “하나의 값” 으로 의견 일치를 이루는 것.  “값”이라 하는 것은 다양한 의미를 갖음. • Transaction 을 commit 할지 abort 할지에 대한 결정도 “값” • Master-slave 구조에서 “누가 master” 인지에 대한 결정도 “값” • “값”보다는 어쩌면 “state” 라는 말이 더 잘 어울릴지도…
  • 11. iFunFactory Inc. CONSENSUS PROBLEM IN DISTRIBUTED SYSTEMS 왜 갑자기? 이게 중요한가?
  • 12. iFunFactory Inc. CONSENSUS PROBLEM IN DISTRIBUTED SYSTEMS 왜 갑자기? 이게 중요한가?
  • 13. iFunFactory Inc. CONSENSUS PROBLEM IN DISTRIBUTED SYSTEMS 왜 갑자기? 이게 중요한가? 분산 시스템에서 피해갈 수 없는 문제임 • 서버들간 시간 동기, Master 선출, 분산 transaction 의 commit 여부, 원격 자원의 locking… • MySQL master-slave sync 에도… • MongoDB replica 의 primary election 에도… • 여러분의 Gmail 메일 박스가 구글 서버에 복제되고 있는 이 순간에도…
  • 14. iFunFactory Inc. CONSENSUS PROBLEM IN DISTRIBUTED SYSTEMS 왜 갑자기? 이게 중요한가? 분산 시스템에서 피해갈 수 없는 문제임 • 서버들간 시간 동기, Master 선출, 분산 transaction 의 commit 여부, 원격 자원의 locking… • MySQL master-slave sync 에도… • MongoDB replica 의 primary election 에도… • 여러분의 Gmail 메일 박스가 구글 서버에 복제되고 있는 이 순간에도…  여러 프로세스가 하나의 일관된 상태에 도달해야 되는 모든 경우는 consensus 문제를 풀어야 함
  • 15. iFunFactory Inc. SOLUTION #1 CENTRALIZED APPROACH  의사 결정을 하나의 결정권자에게 맡김 • 별도로 만든 process, REDIS, SQL DB, … Global Coordinator Process #1 Process #2
  • 16. iFunFactory Inc. SOLUTION #1 CENTRALIZED APPROACH  의사 결정을 하나의 결정권자에게 맡김 • 별도로 만든 process, REDIS, SQL DB, …  장점: 간단함 (Simplicity is beauty) Global Coordinator Process #1 Process #2
  • 17. iFunFactory Inc. SOLUTION #1 CENTRALIZED APPROACH  의사 결정을 하나의 결정권자에게 맡김 • 별도로 만든 process, REDIS, SQL DB, …  장점: 간단함 (Simplicity is beauty)  단점: 장애에 취약 • Coordinator 가 “Single point of failure” Global Coordinator Process #1 Process #2
  • 18. iFunFactory Inc. SOLUTION #1 CENTRALIZED APPROACH Coordinator 를 여럿 두면 어떨까? Coordinator #1 Process #1 Process #2 Coordinator #3 Coordinator #2 Coordinator Group
  • 19. iFunFactory Inc. SOLUTION #1 CENTRALIZED APPROACH Coordinator 를 여럿 두면 어떨까? ⇨ Coordinator 간의 master 선출 문제 그리고 coordinator 간 sync 문제 Coordinator #1 Process #1 Process #2 Coordinator #3 Coordinator #2 Coordinator Group
  • 20. iFunFactory Inc. SOLUTION #1 CENTRALIZED APPROACH Coordinator 를 여럿 두면 어떨까? ⇨ Coordinator 간의 master 선출 문제 그리고 coordinator 간 sync 문제 ⇨ 또 다른 consensus 문제 Coordinator #1 Process #1 Process #2 Coordinator #3 Coordinator #2 Coordinator Group
  • 21. iFunFactory Inc. 잠깐! 시스템 구현에 “만능 키” 는 없다. 선택지의 장단점을 잘 이해하고 선택하는게 중요하다.
  • 22. iFunFactory Inc. 내 서비스 환경에서 fail-stop 이 괜찮다면 Single coordinator 도 좋은 선택이다.
  • 24. iFunFactory Inc. SOLUTION #2 DE-CENTRALIZED APPROACH  Distributed Algorithm 으로 구현 • 프로세스들은 채널을 통해 메시지를 주고 받음 • 프로세스들이 독립적으로 연산해서 “동일한 값”에 도달해야 함 Process #1 Process #2 Process #3
  • 25. iFunFactory Inc. SOLUTION #2 DE-CENTRALIZED APPROACH  Distributed Algorithm 으로 구현 • 프로세스들은 채널을 통해 메시지를 주고 받음 • 프로세스들이 독립적으로 연산해서 “동일한 값”에 도달해야 함  Fault-tolerant 해야함 • 채널의 안정성 (Two Armies Problem) • Process 의 오류 (Byzantine Generals Problem) Process #1 Process #2 Process #3
  • 26. iFunFactory Inc. TWO ARMIES PROBLEM (UNRELIABLE LINKS) 두 부대가 적군을 공격할 시간을 전령을 통해 협의하는데, 전령이 적군을 뚫고 제대로 갔다는 보장이 없다!
  • 27. iFunFactory Inc. BYZANTINE GENERALS PROBLEM (FAULTY PROCESS) 풍전등화 앞 제국의 운명. 적군과의 일전을 앞두고 일부 배신한 장군은 가짜 전령을 보내는데… 사진 출처: filmhdwallpapers.com 에서 영화 Gladiator
  • 28. iFunFactory Inc. ABOUT PAXOS  Leslie Lamport 에 의해 1989년에 발표  가정 • 프로세스는 죽을 수 있음 • 메시지는 유실되거나 중복될 수 있음  보장 • 프로세스들이 모두 같은 순서로 입력을 처리하는 것을 보장 • 프로세스의 과반수 이상이 살아있다면 consensus 에 도달 가능  Google Chubby, Cassandra 등을 포함해 광범위하게 사용됨 사진 출처: Wikipedia.com
  • 29. iFunFactory Inc. ABOUT ZOOKEEPER ATOMIC BROADCAST (ZAB)  Yahoo Research 의 Junqueira, Reed, Serafini 에 의해 2010년 논문으로 발표  Paxos 의 문제점 • 프로세스들이 같은 순서로 입력을 처리하는 것을 보장할 뿐, 입력의 순서는 보장하지 않음 • 이 때문에 crash 에서 복구될 때 입력의 순서가 crash 전과 다를 수 있음 • 이를 방지하기 위해서 입력을 하나씩 보내면 throughput 이 급격히 떨어짐  가정 • FIFO 채널이라는 Paxos 보다 강한 네트워크 요구 조건 (TCP)  보장 • 입력의 total order 가 복구 후에도 바뀌지 않음을 보장
  • 30. iFunFactory Inc. ABOUT APACHE ZOOKEEPER 이 슬라이드 기억나십니까?
  • 32. iFunFactory Inc. ABOUT APACHE ZOOKEEPER  Coordination system • 분산 시스템의 consensus 문제를 위탁할 수 있는 빌딩 블록  분산 시스템 구현에서 다양하게 활용 • 분산 locking, 동적 configuration 관리, 마스터 election, 메시지 큐, …  사용 • 2000년대 말부터 Yahoo 내부 web crawler 등에서 사용 • Hadoop 에서 cluster 관리를 위해서 사용
  • 33. iFunFactory Inc. ABOUT APACHE ZOOKEEPER  파일 시스템과 유사한 계층적 구조 • Znode는 data 와 children 모두 가질 수 있음 • Znode 의 data 제한은 1MB
  • 34. iFunFactory Inc. APACHE ZOOKEEPER USEFUL FEATURES  임시 노드 (Ephemeral node) • Ephemeral 속성으로 znode 생성시, 노드를 만든 세션이 끊기면 노드도 같이 사라짐 • 분산 lock 을 잡고 있는 게임 서버가 죽어도 lock 을 회수할 수 있음  순차 노드 (Sequence node) • Sequene 속성으로 znode 생성시, 노드에 자동으로 일련 번호를 붙여줌 • Request queue 구현에 활용 가능  Watcher • 특정 노드에 이벤트 발생시 알림을 받을 수 있음 • 노드 삭제, 노드 데이터 변경을 처리해야될 때 편리함
  • 35. iFunFactory Inc. CASE STUDY #1 PEER GAME SERVER DISCOVERY  상황: 로비 서버가 유저에게 접근 가능한 게임 서버 리스트를 동적으로 전달할 때  해법 1. 게임 서버는 프로세스가 뜰 때 자신의 UID 를 생성함 2. /servers/{UID} 형태로 노드를 생성하고, 노드 data 에 자신의 IP, port 를 등록함 3. /servers/ 아래의 노드들을 순회하여 이미 뜬 게임 서버들이 등록해둔 IP, port 를 알아냄 4. /servers/ 에 watcher 를 등록해 이후에 등록되는 게임 서버가 있다면 이를 알림으로 받음  퀴즈 • 게임 서버가 죽을 때 다른 서버들이 이를 눈치채게 하려면 어떻게 하면 될까? • 게임 서버를 역할별로 묶어서, 특정 역할의 서버 리스트를 알고 싶을 때는 어떻게 할까? • 게임 서버들이 접속해야되는 외부 API 서버 주소를 동적으로 관리하고 싶다면 어떻게 하면 될까?
  • 36. iFunFactory Inc. CASE STUDY #2 DUPLICATE LOGIN PREVENTION  상황: 게임 서버가 여러대일 때 사용자의 중복 로그인을 체크할 때  해법 1. 유저가 접속하면 해당 서버는 /users/{NAME}/ 형태로 노드를 생성하고, 노드 data 로 서버의 UID 를 기록 2. 다른 서버에서 유저 접속 여부를 확인하고 싶으면 /users/{NAME} 의 존재 여부 확인 3. 유저가 로그아웃하면 /users/{NAME} 을 삭제  퀴즈 • 이 방법이 SQL DB 에 로그인 상태를 기록하는 것보다 어떤 점에서 유리할까?
  • 37. iFunFactory Inc. USAGE WARNING 빈번히 갱신되는 데이터 저장소로 사용하면 절대 안됩니다. (Consensus 는 비싼 연산입니다. 특히 “쓰기” 는요.)
  • 38. iFunFactory Inc. APACHE ZOOKEEPER PERFORMANCE  쓰기보다 읽기가 많다면 바람직  서버 대수의 증가는 동시 발생 장애 유연성을 위해서이지 처리 속도를 위한 것이 아님 출처: http://zookeeper.apache.org
  • 39. iFunFactory Inc. APACHE ZOOKEEPER RELIABILITY  Slave 가 죽는 것은 별 지장 없음  Master 가 죽더라도 200ms 이내로 복구함 1. Slave 하나 죽였다가 살림 2. 다른 slave 하나 죽였다가 살림 3. Master 죽임 4. Slave 두 개를 동시에 죽였다가 살림 5. Master 를 죽임 7개 노드의 경우. 출처: http://zookeeper.apache.org
  • 40. iFunFactory Inc. ZOOKEEPER CHALLENGES IN PRACTICE  JVM 튜닝 • 만일 기존에 JAVA 프로세스 띄우던 것이 없다면 특히나 더…  부실한 문서 • 특히 서버 관리 문서가 부실함 • JAVA library 문서는 잘 되어있음. C library 문서는 header 파일을 보면서 해야됨.  동적으로 ZooKeeper 서버를 추가/삭제하는 것이 안됨 • ZooKeeper cluster 안에서 다른 서버들 리스트는 사전에 설정 파일로 고정되어야 함
  • 41. iFunFactory Inc. TALK RECAP  게임 서버는 분산 시스템입니다.  분산 시스템은 Consensus 문제를 겪습니다.  Consensus 를 풀기 위한 유명한 방법으로 Paxos 가 있습니다.  Paxos 로 일일히 구현하지 않고 coordinator 에게 맡겨서 풀 수도 있습니다.  ZooKeeper 는 fault-tolerant 한 coordinator 빌딩 블록입니다. ⇨ 따라서 게임 내 분산 처리 문제를 ZooKeeper 를 이용해 해결할 수 있습니다.
  • 42. iFunFactory Inc. 감사합니다. 혹시 질문 있으신가요? dkmoon@ifunfactory.com