O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

5.863 visualizações

Publicada em

패치해야할 서버가 전 세계에 나뉘어져 있다면, 어떻게 해야 동시에, 빠르면서, 또 신뢰성있게 서버를 패치할 수 있을까?이를 구현하기 위해 개발된 1)작은 크기의 패치데이터를 빠르게 생성하는 알고리즘과 2) 글로벌 데이터 복제를 위한 기술, 3) 동시 패치와 롤백이 가능하도록 구성한 시스템의 설계와 구조에 대해서 알아본다. 또, 핵심기능에 대한 시연과 함께넥슨아메리카에서 실제로 이를 어떻게 활용하고 있는지, 현장에서 얼마만큼의 개선이 이루어졌는지를 실증적 데이터에 기반하여 공유하고자 한다.

Publicada em: Engenharia
  • Login to see the comments

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

  1. 1. 글로벌 동시 퀵 서버패치 이렇게 구축 했다 Nexon America 김태현
  2. 2. 발표자 소개 머신비전 보안어플 네이버폰등 싸이동영상 게임개발 DevOps SecureWiz
  3. 3. 발표 순서 I. 글로벌 서버 업데이트 II. 시스템의 탄생 III. 배운점과 미래
  4. 4. I. 글로벌 서버 업데이트 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  5. 5. 서버란 무엇인가? I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 본질은 실행되는 프로그램
  6. 6. 서버 패치란 무엇인가? I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 본질은 파일을 교체하는 것
  7. 7. 서버 점검 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 서버 업데이트 본질은 결국 파일 복사
  8. 8. 인터넷 강국 한국 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 한국에서는 어디로 보내든 파일 이동이 빠르다.
  9. 9. 글로벌 동시 퀵 How? I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 서버가 글로벌로 흩어져있다면? 흩어진 서버를 동시에, 그러면서, 빨리 업데이트를 하려면?
  10. 10. 여섯가지 문제 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 글로벌,동시,퀵 업데이트를 구현하기 위해 우리가 직면했던
  11. 11. 문제 1. 대용량 파일 다운로드, 복사 a. 긴 복사 시간 b. 큰 용량 c. 스케일 부담 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 크다!
  12. 12. 생각한 해결책 • 버전마자 중복 파일이 많더라. • 중복을 줄이면 전송량을 줄일 수 있다. • 중복이 안되는 파일도 데이터 일부는 중복되지 않을까? • 중복은 없애고 서로 다른 데이터만 옮길 순 없을까? I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  13. 13. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 데이터 중복을 찾기 위해 채택한 알고리즘
  14. 14. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 해쉬값이 같다. 고로 같은 패턴이다.
  15. 15. 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 는 이전 단계에서 구했던 해쉬값에서 아주 적은 연산만으로 현재 단계의 해쉬값을 구할 수 있다. 빠르다.
  16. 16. 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. 속도가 빠르고 메세지 사이즈가 큰 곳에 적합하다.
  17. 17. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  18. 18. 큰 파일 테스트 결과 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 테스트한 1.6GB 파일에서 버전간 30M 만 차이남. 약 98%가 동일 데이터! 서비스중인 실제 게임에서 사용되는 연속적인 두 버전의 파일이 얼마나 차이나는지 보았더니…
  19. 19. 패치 생성과 업데이트 시연 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  20. 20. 테스트 결과 – 압도적 성능 우위 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 가장 뛰어난 경쟁자 rdiff 에 비해 속도 약 2배 우위
  21. 21. 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배 추가 성능 향상
  22. 22. Lab 테스트 결과 총 3.6GiB 파일들의 diff 추출에 약 43초 소요 추출된 diff로 3.6GiB 파일들을 업데이트 하는데 약 8초 소요 (core i7 8GB 머신) 실제 서비스중인 게임의 전체 파일들을 테스트 해본 결과
  23. 23. 실제 적용 결과 #1 모 게임의 실제 패치 시간 적용전 모 게임의 실제 패치 시간 적용후 패치 업데이트 시간 8분50초 에서 31초로 감소. 약 17배 속도 개선! 개발을 완료한 후 실제 게임 업데이트에 적용해보았더니…
  24. 24. 문제2 글로벌 데이터복제 추출한 diff 데이터를 글로벌로 흩어진 서버들에게 미리 보내놓고 준비시키자. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 차이점만 추출에 성공! 이제 차이점만
  25. 25. 생각한 해결책 • 복제파일시스템 • 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 를 바로 쓰자.
  26. 26. 복제할 데이터의 양이 작기에 • 주기적으로 • 새로운 파일들이 생기면 • 그 파일들만 받아온다. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  27. 27. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 따로 어플리케이션을 만들지 말고 엔지니어들에게 익숙한 툴을 활용한 것은 장애시 신속한 대응에 유리하기 때문
  28. 28. 신호를 주고 받을 메세지 큐 • 새로운 빌드 생성완료 • 싱크 준비 완료 • 싱크 완료 • 업데이트 완료 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 언제 복제할지, 언제 어떤 동작을 수행할지 연락을 주고받기 위해 아마존 SQS 사용 이런 이벤트를 주고 받는다.
  29. 29. 새 버전의 복제 1. 새 버전이 만들어지면 2. SQS로 통지되고 3. 큐를 바라보는 전세계의 서버가 복제를 수행 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  30. 30. 문제3. 버전관리와 롤백 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 “이미 늦었…”
  31. 31. Git? - 2GB 파일 제한 - Git-annex : 테스트 중 버그. 신뢰성? - Mercurial : 한 동안 써봄. 성능 불만족. - 필요한 요구사항은 오직 롤백 뿐. 복잡한 버전관리 불필요 - 만들자! I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 대용량 파일 버전관리를 위해 Git을 쓸 수 있을까?
  32. 32. 게임 버전만의 특징 • 크게 현재버전, 테스트버전으로 나뉨 • 현재버전의 패치버전과 테스트버전의 패치버전 • 테스트버전이 여러개인 경우도 있음 • 순방향으로만 증가 • Merge가 없음 • 전달시 Full버전과 Patch버전으로 나뉨 • 적용을 취소해달라는 버전이 있음 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  33. 33. 게임 버전에 맞춘 버전시스템 현재버전 테스트버전 아무 버전으로 이동 가능해야함 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  34. 34. 버전 정보 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 그룹을 가상으로 묶음.
  35. 35. 문제4. 글로벌 분산된 시스템의 상태정보 패치파일 뿐만 아니라 버전정보등도 글로벌로 공유되어야 한다. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  36. 36. 버전 정보 공유 Cross-IDC 리플리케이션 가능한 DB를 쓰자. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  37. 37. Couchbase 사용 이유 • Cross-IDC 리플리케이션 XDCR 지원. • Persistent DB. • 속도와 같은 성능은 덜 중요했다. • 데이터양이 많지 않아 대용량 불필요. • 설치와 사용이 쉽다. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  38. 38. 문제 5. Fault Tolerance 보장 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 한 region 에 장애가 있어도 다른 region 은 동작 가능하게
  39. 39. 글로벌 단일 시스템 구성의 약점 • 인터넷은 높은 신뢰성 보장이 힘든 네트웍 • 국가간, 원거리 연결은 수시로 불안 • 원거리간 문제가 생기면 전체 시스템이 사용불가.I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 글로벌로 monolithic 한 시스템 구축을 피하자.
  40. 40. 지역별 독립 노드 구성으로 장애 전파 없음 • 특정 노드의 장애가 다른 노드에 영향을 주지 않는다. • 인터넷 의존을 낮추고 노드별로 독립 동작 가능 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  41. 41. 서브시스템간 독립성 보장 설계 버전처리 시스템 파일복제 시스템 어플리케 이션 실행 시스템 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 아키텍처 역할별로 서브시스템을 구성한 뒤,
  42. 42. 문제6. DevOps팀의 특성 민첩하게 만들 수 있되 미래 확장 여지가 있게 • 개발과 운영의 균형 유지가 쉽지 않다. • 개발없이 운영의 발전은 어렵다. • 운영경험없는 개발은 위험하다. • 다양한 전문/레벨의 엔지니어가 있다. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 데브옵스는 늘 긴급한 장애대응이란 인터럽트에 노출되어 있기 때문 운영은 서비스하는 게임의 수, 종류, 운영조직의 구조, 특성에 따른 특수성이 있음.
  43. 43. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  44. 44. Python 이거만한게 없다. -운영에서는 troubleshoot 에 좋은 것이 짱이라서 -Script 는 문제 현장에서 코드를 바로 읽을 수 있어서 -컴파일 없이 즉시 고칠 수 있어서 -비교적 접근하기 쉽고 까다롭지 않은 언어라서 -읽기 쉬운, 초급자도 읽기 쉬운, 고치기 쉬운 코드 필요해서 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  45. 45. 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
  46. 46. I I. 시스템의 탄생 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  47. 47. Laszlo 탄생 Laszlo는 글로벌로 분산된 환경에서 고속으로 패치 업데이트를 하기 위한 소프트웨어 시스템 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 극중인물 Laszlo 프로젝트 이름
  48. 48. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  49. 49. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  50. 50. 기술 스택 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  51. 51. 다섯가지 핵심 컴포넌트 소개 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  52. 52. 핵심 컴포넌트 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  53. 53. 핵심 컴포넌트 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  54. 54. 핵심 컴포넌트 3 - sync • cpatch가 만든 패치 데이터의 글로벌 복제 담당. • python과 rsync로 개발됨 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  55. 55. 핵심 컴포넌트 4 - Rundeck • 모든 명령을 모아서 수행하는 역할 • 각 노드마다 Rundeck 이 있으며 해당 노드에서 작동하는 모든 명령을 메뉴로 제공. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  56. 56. 핵심 컴포넌트 5 - puppet • 패치 업데이트에 필요한 서버별 설정이 있음 • 글로벌로 흩어진 수백대의 서버의 설정 필요 • Puppet으로 한 곳에서 모든 설정을 변경,관리,배포 하고 있음. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  57. 57. 게임별 결과 - GhostInTheShell I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  58. 58. 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. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  59. 59. GhostInTheShell로 부터 개선한 것 • ****.db 파일이 패치 업데이트 실패 • 알고보니 실행중 계속 변경되는 파일임. • 하지만 패치시 새로 전달 된다. • 항상 새로운 파일로 다루도록 /TN 옵션 개발. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  60. 60. 게임별결과 - Atlantica I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  61. 61. Atlantica Records I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 • 패치 빌드 < 1분 • 패치 업데이트 < 1~25초 (과거 수분 소요) • 과거 여러버전을 순서대로 업데이트하던 작업을 마지막 버전 한번만 업데이트 하는 작업으로 개선됨.
  62. 62. Atlantica로 부터 개선한 점 • Atlantica 의 경우 개발자가 특정 버전을 라이브에는 적용하지 말라고 할 때가 있음. 버전을 지우는 건 지원 안되어 수동으로 힘들. • 아이디어 : 특정 중간 버전을 지우면 다음 버전을 full 로 만들어버림. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  63. 63. 게임별결과 – Riders of Icarus I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  64. 64. Icarus로 부터 개선한 점 • Icarus 는 incremental 로 바이너리가 옴. • 하지만 특정 폴더의 경우 전달 당시 없는 파일들은 패치시에도 라이브환경에서 지워져야함. 난감. • 그래서 특정 폴더에 대해서는 Mirror 를 하는 기능을 만듦. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  65. 65. I I I. 배운점과 미래 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  66. 66. 전체적으로 배운점 - 오픈소스 잘 활용하자. - 잘 썼으면 기여도하자. - 좋은 알고리즘 많다. 공부하자. - Golang 장점 활용하면 좋다. - Rundeck이 API 호스팅을 할 수 있더라. - … I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  67. 67. 근데 개발자가 빌드할 순 없을까? • 버전을 정하는 사람은 개발자다. • 어떤 파일이 어떤 버전인지를 정하는 것도 개발자다. • Steam의 경우 개발자 머신에서 빌드하여 올린다. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  68. 68. 클라이언트 바이너리도 함께 • 어차피 서버와 클라는 하나의 버전으로 간다. • 따로 관리되어 실수 하는 경우도 생긴다. • 따로 따로 두번 작업하게 된다. I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  69. 69. Pipeline 프로젝트 시작 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 개발자 운영사 & 유저 개발자가 새 버전 빌드를 마친 후 운영사에서 업데이트 하기까지의 일련의 과정을 Laszlo에 기반하여 간결한 웹서비스로 제공한다.
  70. 70. 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 관리
  71. 71. 경쟁사 동향 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  72. 72. 블리자드 I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 • 이미 자동화된 파이프라인 구축 • 버전만 선택하면 서버/클라 모두 해당 버전으로 변경
  73. 73. Riot games - Voyager I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래 검색엔진 기반 실시간 이슈 감지 시스템
  74. 74. 넥슨 - 글로벌 리더인가? - 뭔가 보여주고 있을까? - 무엇으로 보여줄까? 기술력? - 무슨 기술? (게임개발 and 게임운영) - 어떤 수준의 기술? World-class! I. 글로벌 서버 업데이트 문제 1 문제 2 문제 3 문제 4 문제 5 문제 6 II. 시스템의 탄생 Laszlo Ghost In The Shell Atlantica Riders of Icarus III. 배운점과 미래 배운점 경쟁사 동향 우리의 미래
  75. 75. 마무리
  76. 76. 사진출처 위치 출처 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%2Fww w.engadget.com%2F2015%2F08%2F20%2Fgoogle-reveals-server-info%2F&bvm=bv.119745492,d.cGc&psig=AFQjCNG3pdB7qhzBlawbIOXFfr1noeWhmA&ust=14 60903117145843 8p. 망지도 http://kt-egov.co.kr/service/infra.do 70p http://engineering.riotgames.com/news/voyager-original-korean
  77. 77. JUST DO IT.
  78. 78. Thank You.

×