ndc 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

78
글로벌 동시 퀵 서버패치 이렇게 구축 했다 Nexon America 김태현

Upload: tae-hyun-kim

Post on 18-Jan-2017

3.956 views

Category:

Engineering


14 download

TRANSCRIPT

Page 1: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

글로벌 동시 퀵 서버패치 이렇게

구축 했다

Nexon America

김태현

Page 2: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

발표자 소개

머신비전

보안어플

네이버폰등

싸이동영상

게임개발

DevOps

SecureWiz

Page 3: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

발표 순서

I. 글로벌 서버 업데이트 II. 시스템의 탄생 III. 배운점과 미래

Page 4: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

I. 글로벌 서버 업데이트

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 5: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

서버란 무엇인가?

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

본질은 실행되는

프로그램

Page 6: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

서버 패치란 무엇인가?

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

본질은 파일을

교체하는 것

Page 7: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

서버 점검

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

서버 업데이트

본질은 결국 파일

복사

Page 8: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

인터넷 강국 한국

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

한국에서는 어디로 보내든 파일 이동이 빠르다.

Page 9: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

글로벌 동시 퀵

How?

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

서버가 글로벌로 흩어져있다면?

흩어진 서버를 동시에,

그러면서, 빨리 업데이트를 하려면?

Page 10: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

여섯가지 문제

1. 대용량 파일 다운로드, 복사 2. 글로벌 데이터 복제 3. 버전관리와 롤백 4. 글로벌분산된 시스템의 상태정보 5. Fault Tolerance 보장 6. DevOps팀의 특성

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

글로벌,동시,퀵

업데이트를 구현하기

위해 우리가 직면했던

Page 11: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

문제 1. 대용량 파일 다운로드, 복사

a. 긴 복사 시간

b. 큰 용량

c. 스케일 부담

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

크다!

Page 12: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

생각한 해결책

• 버전마자 중복 파일이 많더라. • 중복을 줄이면 전송량을 줄일 수 있다. • 중복이 안되는 파일도 데이터 일부는 중복되지 않을까? • 중복은 없애고 서로 다른 데이터만 옮길 순 없을까?

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 13: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Algorithms

• Rabin Karp algorithm

• Adler-32 Rolling Hash algorithm

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

데이터 중복을 찾기

위해 채택한

알고리즘

Page 14: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Rabin Karp Algorithm

a c d i c o n z d h

a c d i

a c i c

a i c o

i c o n

Hash(

Hash(

Hash(

Hash(

) = 111

) = 222

) = 333

) = 999

Hash( ) = 999 “ i c o n “

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

해쉬값이

같다. 고로

같은

패턴이다.

Page 15: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Rolling hash Algorithm

h[i+1..i+m] = h[i..i+m-1] – h[i] + h[i+m]

Rabin Fingerprint

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

해쉬함수가 느리면 곤란하다.

Rolling Hash 는 이전 단계에서 구했던 해쉬값에서 아주

적은 연산만으로 현재 단계의 해쉬값을 구할 수 있다.

빠르다.

Page 16: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Alder-32 Rolling Checksum Algorithm

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

zlib, rsync 에 사용된 Rolling Checksum.

속도가 빠르고 메세지 사이즈가 큰 곳에 적합하다.

Page 17: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Rabin Karp & Adler-32 를 바이너리 블럭 탐색에 이용

111 222 333 444

111 333

Old File

New File

서로 다른 부분을 찾으려면 같은 곳을 제외하면

되니까.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 18: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

큰 파일 테스트 결과

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

테스트한 1.6GB 파일에서

버전간 30M 만 차이남.

약 98%가 동일 데이터!

서비스중인

실제 게임에서

사용되는 연속적인 두 버전의 파일이 얼마나

차이나는지 보았더니…

Page 19: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

패치 생성과 업데이트 시연

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 20: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

테스트 결과 – 압도적 성능 우위

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

가장 뛰어난 경쟁자 rdiff 에 비해 속도 약 2배 우위

Page 21: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Concurrency with Golang

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Golang의 장점인 Concurrency를 이용하여

구현했더니…

4채널

concurrency

적용시 약 2배

추가 성능 향상

Page 22: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Lab 테스트 결과

총 3.6GiB 파일들의 diff 추출에 약 43초 소요

추출된 diff로 3.6GiB 파일들을 업데이트 하는데

약 8초 소요 (core i7 8GB 머신)

실제 서비스중인 게임의 전체 파일들을

테스트 해본 결과

Page 23: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

실제 적용 결과 #1 모 게임의 실제 패치 시간 적용전

모 게임의 실제 패치 시간 적용후

패치 업데이트 시간 8분50초 에서 31초로 감소.

약 17배 속도 개선!

개발을 완료한 후

실제 게임 업데이트에

적용해보았더니…

Page 24: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

문제2 글로벌 데이터복제

추출한 diff 데이터를 글로벌로 흩어진 서버들에게 미리 보내놓고 준비시키자.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

차이점만 추출에 성공!

이제 차이점만

Page 25: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

생각한 해결책

• 복제파일시스템

• MooseFS, GlusterFS

• Cross Data-center 지원은 GlusterFS뿐

• 내부를 보니 Rsync 쓰잖아?

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

필요한 기능은 복제. 그렇다면

GlusterFS를 쓰는 대신 가볍게

Rsync 를 바로 쓰자.

Page 26: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

복제할 데이터의 양이 작기에

• 주기적으로

• 새로운 파일들이 생기면

• 그 파일들만 받아온다.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 27: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Crontab/Rsync/ssh

• Crontab : 쉽다. 관리용이. 고장율 낮다.

• Rsync : 신뢰성. 성능. cpatch 와 교차 검증.

• ssh : 보안성 확보

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

따로 어플리케이션을 만들지 말고 엔지니어들에게

익숙한 툴을 활용한 것은 장애시 신속한 대응에

유리하기 때문

Page 28: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

신호를 주고 받을 메세지 큐

• 새로운 빌드 생성완료 • 싱크 준비 완료 • 싱크 완료 • 업데이트 완료

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

언제 복제할지, 언제 어떤 동작을 수행할지 연락을 주고받기 위해 아마존 SQS 사용

이런 이벤트를 주고

받는다.

Page 29: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

새 버전의 복제

1. 새 버전이 만들어지면

2. SQS로 통지되고

3. 큐를 바라보는

전세계의 서버가

복제를 수행

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 30: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

문제3. 버전관리와 롤백

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

“이미 늦었…”

Page 31: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Git?

- 2GB 파일 제한 - Git-annex : 테스트 중 버그. 신뢰성? - Mercurial : 한 동안 써봄. 성능 불만족. - 필요한 요구사항은 오직 롤백 뿐. 복잡한

버전관리 불필요 - 만들자!

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

대용량 파일

버전관리를 위해 Git을

쓸 수 있을까?

Page 32: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

게임 버전만의 특징

• 크게 현재버전, 테스트버전으로 나뉨

• 현재버전의 패치버전과 테스트버전의 패치버전

• 테스트버전이 여러개인 경우도 있음

• 순방향으로만 증가

• Merge가 없음

• 전달시 Full버전과 Patch버전으로 나뉨

• 적용을 취소해달라는 버전이 있음

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 33: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

게임 버전에 맞춘 버전시스템

현재버전 테스트버전

아무 버전으로 이동 가능해야함

v1 v2 v3 v4 v10 v11 v12 v13 v14 v15

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 34: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

버전 정보 schema

product version#1

version#2

version#3

version#10

version#11

branch A

branch B

unique

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Product 하나가

여러 version을

가지며 version은

서로 중복되지

않음.

Branch 는

verison 그룹을

가상으로 묶음.

Page 35: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

문제4. 글로벌 분산된 시스템의 상태정보

패치파일 뿐만 아니라 버전정보등도 글로벌로 공유되어야 한다.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 36: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

버전 정보 공유

Cross-IDC 리플리케이션 가능한 DB를 쓰자.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 37: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Couchbase 사용 이유

• Cross-IDC 리플리케이션 XDCR 지원. • Persistent DB. • 속도와 같은 성능은 덜 중요했다. • 데이터양이 많지 않아 대용량 불필요. • 설치와 사용이 쉽다.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 38: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

문제 5. Fault Tolerance 보장

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

한 region 에 장애가 있어도 다른

region 은 동작 가능하게

Page 39: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

글로벌 단일 시스템 구성의 약점

• 인터넷은 높은 신뢰성 보장이 힘든 네트웍 • 국가간, 원거리 연결은 수시로 불안 • 원거리간 문제가 생기면 전체 시스템이 사용불가.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

글로벌로 monolithic 한 시스템

구축을 피하자.

Page 40: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

지역별 독립 노드 구성으로 장애 전파 없음

• 특정 노드의 장애가 다른 노드에 영향을 주지 않는다. • 인터넷 의존을 낮추고 노드별로 독립 동작 가능

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 41: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

서브시스템간 독립성 보장 설계

버전처리 시스템

파일복제 시스템

어플리케이션 실행 시스템

Lane

#1

Lane

#2

Lane

#3 • 서로 Lane별로 분리 • 한 Lane에 문제가 생겨도 다른 Lane에

영향 없음. • 한 Lane에 장애시 그 Lane만 고침. • 장애식별 및 문제해결속도 향상

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Lane 아키텍처 역할별로 서브시스템을

구성한 뒤,

Page 42: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

문제6. DevOps팀의 특성 민첩하게 만들 수 있되 미래 확장 여지가 있게

• 개발과 운영의 균형 유지가 쉽지 않다.

• 개발없이 운영의 발전은 어렵다.

• 운영경험없는 개발은 위험하다.

• 다양한 전문/레벨의 엔지니어가 있다.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

데브옵스는 늘 긴급한

장애대응이란 인터럽트에

노출되어 있기 때문

운영은 서비스하는

게임의 수, 종류,

운영조직의 구조,

특성에 따른

특수성이 있음.

Page 43: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Script rather than binary

Why?

-운영에서는 troubleshoot 에 좋은 것이 짱. -Script 는 문제 현장에서 코드를 바로 읽을 수 있다. -컴파일 없이 즉시 고칠 수 있다. -비교적 접근하기 쉽고 까다롭지 않은 언어 -읽기 쉬운, 초급자도 읽기 쉬운, 고치기 쉬운 코드 필요.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 44: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Python 이거만한게 없다.

-운영에서는 troubleshoot 에 좋은 것이 짱이라서 -Script 는 문제 현장에서 코드를 바로 읽을 수 있어서 -컴파일 없이 즉시 고칠 수 있어서 -비교적 접근하기 쉽고 까다롭지 않은 언어라서 -읽기 쉬운, 초급자도 읽기 쉬운, 고치기 쉬운 코드 필요해서

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 45: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Python 은 App역할

patch Version control

build update sync

Core

Components

Applications I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Layered Architecture

Page 46: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

I I. 시스템의 탄생

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 47: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Laszlo 탄생 Laszlo는 글로벌로 분산된 환경에서 고속으로 패치 업데이트를 하기 위한 소프트웨어 시스템

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

극중인물

Laszlo 프로젝트

이름

Page 48: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Casablanca 프로젝트 요약

프로젝트기간 : 2015년 2월~12월

개발기간 : 2015년 2월~8월

개발인원 : 1명 + 팀원들의 도움

POC : ~4월

프로토타입 개발 : ~5월

프로덕션 개발 : ~8월

라이브 적용 : ~12월

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 49: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Laszlo 현황

• GhostInTheShell, Riders of Icarus, Maple Story,

Mabinogi, Atlantica, Vindictus 여섯개 게임에

적용하여 2015년 부터 사용중

• No major issues so far

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 50: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

기술 스택

golang

python

Rundeck

AWS (SQS,SNS)

Rabin karp / Adler-32

Couchbase

Puppet

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 51: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

다섯가지 핵심 컴포넌트 소개

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 52: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

핵심 컴포넌트 1 - cpatch

• 기존 패치 업데이트 시간을 1/17로 크게 줄였다. • 글로벌 빠른 데이터 복제를 가능하게 한 공신 • Windows/Linux platform 지원 • Golang 으로 개발됨

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 53: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

핵심 컴포넌트 2 - tree

• 버전정보 담당 • Product - Branch - Version 구조 • Golang과 Couchbase로 개발됨

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 54: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

핵심 컴포넌트 3 - sync

• cpatch가 만든 패치 데이터의 글로벌 복제 담당.

• python과 rsync로 개발됨

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 55: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

핵심 컴포넌트 4 - Rundeck

• 모든 명령을 모아서 수행하는 역할 • 각 노드마다 Rundeck 이 있으며

해당 노드에서 작동하는 모든 명령을 메뉴로 제공.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 56: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

핵심 컴포넌트 5 - puppet

• 패치 업데이트에 필요한 서버별 설정이 있음 • 글로벌로 흩어진 수백대의 서버의 설정 필요 • Puppet으로 한 곳에서 모든 설정을

변경,관리,배포 하고 있음.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 57: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

게임별 결과 - GhostInTheShell

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 58: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

GhostInTheShell Records

• 패치 빌드 1~5분 • 서버 Regions : NYC, SLC, LV, LON, FRA, AUS • 패치 업데이트 : < 1분

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 59: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

GhostInTheShell로 부터 개선한 것

• ****.db 파일이 패치 업데이트 실패 • 알고보니 실행중 계속 변경되는 파일임. • 하지만 패치시 새로 전달 된다. • 항상 새로운 파일로 다루도록 /TN 옵션 개발.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 60: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

게임별결과 - Atlantica

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 61: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Atlantica Records

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

• 패치 빌드 < 1분 • 패치 업데이트 < 1~25초 (과거 수분 소요) • 과거 여러버전을 순서대로 업데이트하던 작업을

마지막 버전 한번만 업데이트 하는 작업으로 개선됨.

Page 62: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Atlantica로 부터 개선한 점

• Atlantica 의 경우 개발자가 특정 버전을 라이브에는 적용하지 말라고 할 때가 있음. 버전을 지우는 건 지원 안되어 수동으로 힘들.

• 아이디어 : 특정 중간 버전을 지우면 다음 버전을 full 로 만들어버림.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 63: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

게임별결과 – Riders of Icarus

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 64: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Icarus로 부터 개선한 점

• Icarus 는 incremental 로 바이너리가 옴. • 하지만 특정 폴더의 경우 전달 당시 없는

파일들은 패치시에도 라이브환경에서 지워져야함. 난감.

• 그래서 특정 폴더에 대해서는 Mirror 를 하는 기능을 만듦.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 65: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

I I I. 배운점과 미래

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 66: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

전체적으로 배운점

- 오픈소스 잘 활용하자. - 잘 썼으면 기여도하자. - 좋은 알고리즘 많다. 공부하자. - Golang 장점 활용하면 좋다. - Rundeck이 API 호스팅을 할 수 있더라. - …

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 67: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

근데 개발자가 빌드할 순 없을까?

• 버전을 정하는 사람은 개발자다. • 어떤 파일이 어떤 버전인지를 정하는

것도 개발자다. • Steam의 경우 개발자 머신에서

빌드하여 올린다.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 68: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

클라이언트 바이너리도 함께

• 어차피 서버와 클라는 하나의 버전으로 간다. • 따로 관리되어 실수 하는 경우도 생긴다. • 따로 따로 두번 작업하게 된다.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 69: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Pipeline 프로젝트 시작

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

개발자 운영사

& 유저

개발자가 새 버전 빌드를 마친 후 운영사에서

업데이트 하기까지의 일련의 과정을 Laszlo에

기반하여 간결한 웹서비스로 제공한다.

Page 70: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

API host 로써의 Rundeck

• Via HTTP/S api 호출 구조가 이미 구현됨. • UI 를 통해 api 리스트를 보고 관리가 용이. • 호출 기록과 결과를 볼 수 있고 조회가 용이. • 파라미터 정보등의 도큐멘팅을 편하게 할 수 있음.

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Restful

API

API 등록

API 관리

Page 71: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

경쟁사 동향

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 72: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

블리자드

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

• 이미 자동화된 파이프라인 구축

• 버전만 선택하면 서버/클라 모두 해당 버전으로 변경

Page 73: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Riot games - Voyager

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

검색엔진 기반 실시간 이슈 감지 시스템

Page 74: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

넥슨

- 글로벌 리더인가? - 뭔가 보여주고 있을까? - 무엇으로 보여줄까? 기술력? - 무슨 기술? (게임개발 and 게임운영) - 어떤 수준의 기술? World-class!

I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus

III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래

Page 75: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

마무리

Page 76: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

사진출처

위치 출처

2p. 머신비전 www.dynamicmachinedesign.com

7p. https://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&ved=0ahUKEwiDsoe0rpPMAhVQymMKHQk0C5EQjRwIBw&url=http%3A%2F%2Fwww.engadget.com%2F2015%2F08%2F20%2Fgoogle-reveals-server-info%2F&bvm=bv.119745492,d.cGc&psig=AFQjCNG3pdB7qhzBlawbIOXFfr1noeWhmA&ust=1460903117145843

8p. 망지도 http://kt-egov.co.kr/service/infra.do

70p http://engineering.riotgames.com/news/voyager-original-korean

Page 77: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

JUST DO IT.

Page 78: NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다

Thank You.