107

Click here to load reader

Ndc14 분산 서버 구축의 ABC

Embed Size (px)

DESCRIPTION

NDC14 분산 서버 구축의 ABC - 대규모 분산 시스템을 구축하기 위한 실용적 예와 그 원칙들 발표자료

Citation preview

Page 1: Ndc14 분산 서버 구축의 ABC

분산 서버 구축의 ABC – 대규모 분산 시스템을 구축하기 위한 실용적 예와 그 원칙들

NEXON KOREA

이호규

Page 2: Ndc14 분산 서버 구축의 ABC

Flying sole 를 준비중인 최소 1 년 이상의 서버프로그래머

Page 3: Ndc14 분산 서버 구축의 ABC

Dungeon Striker Smack Down VS Low (THQ) Riding Star 그 외 퀴즈게임 , 보드게임 , 출시 못한 MMO 들

(…OTL..) 2003 년도부터 시작 대략 10 년 넘은 개발자

안녕하세요 ?

Page 4: Ndc14 분산 서버 구축의 ABC

Outline

Page 5: Ndc14 분산 서버 구축의 ABC

1. 분산 서버는 왜 필요한가 ?

2. 어떻게 분산할 것인가 ?

3. 견고한 분산 서버 시스템이란 ?

4. 기타1) 분산 서버 배포에 관하여…2) 분산 서버와 개발관련…

목차

Page 6: Ndc14 분산 서버 구축의 ABC

1.Why?분산 서버는 왜 필요한가 ?

Page 7: Ndc14 분산 서버 구축의 ABC

Dungeon Server

하나만 있으면 안되나요 ?

Page 8: Ndc14 분산 서버 구축의 ABC

Answer??

Page 9: Ndc14 분산 서버 구축의 ABC

Why?필요하게 되었을까요 ?

Page 10: Ndc14 분산 서버 구축의 ABC
Page 11: Ndc14 분산 서버 구축의 ABC
Page 12: Ndc14 분산 서버 구축의 ABC

Yes!! 게임이 바뀌었습니다 .

Page 13: Ndc14 분산 서버 구축의 ABC

More!! 유저들

세상과의 교류심지어 하나의 공통 세상

Page 14: Ndc14 분산 서버 구축의 ABC

단일서버

Page 15: Ndc14 분산 서버 구축의 ABC

Yes!!

Page 16: Ndc14 분산 서버 구축의 ABC

OK, Then? 무엇을 분산 해야 할까요 ?

Page 17: Ndc14 분산 서버 구축의 ABC

분산이란 ?Machine 의 하드웨어 부하를 분산

Page 18: Ndc14 분산 서버 구축의 ABC

Machine 의 부하Network Traffic

CPUMemory

Page 19: Ndc14 분산 서버 구축의 ABC

Good 기능의 분산을 통한 서비스 안정성

ex. 채팅서버 shutdown, but Game play 는 가능함

Page 20: Ndc14 분산 서버 구축의 ABC

Bad 정보의 분산으로 디버깅의 어려움

e

에러처리 복잡 e

동시성 버그 파악의 어려움

Page 21: Ndc14 분산 서버 구축의 ABC

1 부 끝 !

Page 22: Ndc14 분산 서버 구축의 ABC

2.How?어떻게 분산할 것인가 ?

Page 23: Ndc14 분산 서버 구축의 ABC

분산서버의 기본기능 or 로직이 독립적으로 작동

독립적 = 서로에게 영향을 주지 않음

Page 24: Ndc14 분산 서버 구축의 ABC

Scale OutA+B = C 가 아니라 A A A

Page 25: Ndc14 분산 서버 구축의 ABC

Origin…

Page 26: Ndc14 분산 서버 구축의 ABC

Step 1

Page 27: Ndc14 분산 서버 구축의 ABC

Step 2

Page 28: Ndc14 분산 서버 구축의 ABC

Step 3

Page 29: Ndc14 분산 서버 구축의 ABC

Step 4

Page 30: Ndc14 분산 서버 구축의 ABC

Front / Back

Page 31: Ndc14 분산 서버 구축의 ABC

주의할 점

통합 독립적 로직 vs 단순 기능 로직

Page 32: Ndc14 분산 서버 구축의 ABC

기능 로직 분리ㅁ

예외처리의 복잡함ㅁ

Transaction 처리의 복잡함ㅁ

로그 분석 복잡함e

Page 33: Ndc14 분산 서버 구축의 ABC

통합 로직 ㅁ

동시성 제어 용이ㅁ

버그 재현 및 수정에 용이ㅁ

개발 유지보수 용이e

Page 34: Ndc14 분산 서버 구축의 ABC

결국 Role 로 분산

Page 35: Ndc14 분산 서버 구축의 ABC

Scale Up성능과 비용의 타협

Page 36: Ndc14 분산 서버 구축의 ABC

Step 3

Page 37: Ndc14 분산 서버 구축의 ABC

Manager?어떻게 scale out 하죠 ?

Page 38: Ndc14 분산 서버 구축의 ABC

비용을 생각해 봅시다 .

Page 39: Ndc14 분산 서버 구축의 ABC

애매… 그닥 아주 빈번한 처리가 아님

e

정보 분산 동기화 비용 너무 큼e

성능보단 안정성

Page 40: Ndc14 분산 서버 구축의 ABC

이런 경우 Scale Up이 좋습니다 . ( 장비빨 !!)

Page 41: Ndc14 분산 서버 구축의 ABC

Database?음 .. 이것은 어떻게 scale out?

Page 42: Ndc14 분산 서버 구축의 ABC

Why? 필요하게 되었을까요 ?

대규모 Social Game 을 생각해봅시다

Page 43: Ndc14 분산 서버 구축의 ABC

만 , 십만 아닌

수백만명 !

Page 44: Ndc14 분산 서버 구축의 ABC

게임서버는 Scale out

But DB? 그래서…

Page 45: Ndc14 분산 서버 구축의 ABC

Sharding! Database 의 Scale Out

Page 46: Ndc14 분산 서버 구축의 ABC

Shard 는

파편이라는 뜻입니다 .

Page 47: Ndc14 분산 서버 구축의 ABC

Social Game

Page 48: Ndc14 분산 서버 구축의 ABC

Sharding 방법

Mapping table Dynamic share

Page 49: Ndc14 분산 서버 구축의 ABC

Mappingshard 정보를 테이블에 저장

Cache 를 이용해 성능을 최적화

Page 50: Ndc14 분산 서버 구축의 ABC

Watch! Mapping Table size

( 20byte*1 million = 20M )e

Global DB 의 부하 (Scale Up)e

Page 51: Ndc14 분산 서버 구축의 ABC

Dynamic!기준 값을 key 로 하여 Data 분산

개발 구현이 쉬움

Page 52: Ndc14 분산 서버 구축의 ABC

Watch! Static Sharding 으로 인한

Re-Sharding 문제 e

Page 53: Ndc14 분산 서버 구축의 ABC

Sharding, Good!, But?database transaction?

Page 54: Ndc14 분산 서버 구축의 ABC

DB SQL 에서가 아닌

Code에서 처리해야 합니다 .

Page 55: Ndc14 분산 서버 구축의 ABC

Social Game

Page 56: Ndc14 분산 서버 구축의 ABC

Break!

Page 57: Ndc14 분산 서버 구축의 ABC

이엉차 !

Page 58: Ndc14 분산 서버 구축의 ABC

Next?더 무엇을 해야 하나요 ?

Page 59: Ndc14 분산 서버 구축의 ABC

병목 !CPU? Memory? I/O?

Enterprise

Page 60: Ndc14 분산 서버 구축의 ABC

CPUPipe Line 이 아닙니다

a

병목 처리를 주의

Page 61: Ndc14 분산 서버 구축의 ABC

Memory64bit machine ( Win..2008 R2 En..)

최대물리 메모리 2TBa

각 분산서버 메모리 사용

Page 62: Ndc14 분산 서버 구축의 ABC

I/O제일 느린 자원

DB I/O, Network I/O

Page 63: Ndc14 분산 서버 구축의 ABC

DB I/OMemory Update First

Data Validation From DB

Page 64: Ndc14 분산 서버 구축의 ABC

Net I/O네트워크 라인 분리

채팅 때문에 게임이 느려져서는 안됩니다 .

Page 65: Ndc14 분산 서버 구축의 ABC

Broadcast지불할 수 밖에 없는 비용 Grouping 을 통한 최적화

네트워크 라인 분리완벽한 최적화 < 90% + 장비

Page 66: Ndc14 분산 서버 구축의 ABC

Next?

Page 67: Ndc14 분산 서버 구축의 ABC

Test!어떤 것을 테스트 해야 할까요 ?

Enterprise

Page 68: Ndc14 분산 서버 구축의 ABC

Machine 지표CPU, Memory, Network bound

In/Out

Page 69: Ndc14 분산 서버 구축의 ABC

Logic 지표e

Packet Queue 길이-> Packet Handler

e

Logic Frame 처리 속도

Page 70: Ndc14 분산 서버 구축의 ABC

Network 지표Network Latency Send Queue data 크기

Page 71: Ndc14 분산 서버 구축의 ABC

병목 !전체적으로 게임이 느려짐 ?

Scale out 을 해도 개선이 안됨 ?

Page 72: Ndc14 분산 서버 구축의 ABC

성능 !단일서버의 성능 ( 동접등 )

Page 73: Ndc14 분산 서버 구축의 ABC

How?장비 Spec 중요 !

Broadcast + 중요 Logicㄷ

ex) 대량사냥 + 대량로그인 / 로그아웃

Page 74: Ndc14 분산 서버 구축의 ABC

서버성능 !비동기 I/O

Polling vs Event계산 , 값 Cache

Page 75: Ndc14 분산 서버 구축의 ABC

Multi! Process or Thread

Page 76: Ndc14 분산 서버 구축의 ABC

ProcessI/O Multi thread

e

Single Logic Threade

관리 , 개발의 편리함

Page 77: Ndc14 분산 서버 구축의 ABC

Thread 멀티코어를 활용한 처리량 증대

e

Singleton 제약 e

Concurrent 버그 발생 위험

Page 78: Ndc14 분산 서버 구축의 ABC

2 부 끝 !

Page 79: Ndc14 분산 서버 구축의 ABC

3.What?견고한 분산 서버 시스템이란 ?

Page 80: Ndc14 분산 서버 구축의 ABC

What?

견고한 분산 시스템이란 무엇일까요 ?

Page 81: Ndc14 분산 서버 구축의 ABC

SolidFault tolerance

e

User tracee

Server Dashboard

Page 82: Ndc14 분산 서버 구축의 ABC

Fault!Exception Handling

Failover

Page 83: Ndc14 분산 서버 구축의 ABC

Exceptione

Always Availablee

Graceful Exception Handlinge

Error Trace

Page 84: Ndc14 분산 서버 구축의 ABC

SEH, TryCatch 예외처리를 통한 서비스 지속

Call Stack, dump 를 통한 에러 추적

Page 85: Ndc14 분산 서버 구축의 ABC

Graceful! 단순 에러 처리 보단 친절 제공

ex. 에러 메시지 표시 + 10 초 후 로비

Page 86: Ndc14 분산 서버 구축의 ABC

Error Trace Call Stack + Debug Log

Exception 발생시 기록한 일정수의 휘발성 로그를 저장 (BlackBox)

Page 87: Ndc14 분산 서버 구축의 ABC

Failovere

Instant Loade

Local DB, Memory DBe

Replication

Page 88: Ndc14 분산 서버 구축의 ABC

Instant! 필요할 때 정보를 복구

중요하지 않는 정보를 다를 때 유용ㄷ

ex. 메일서버

Page 89: Ndc14 분산 서버 구축의 ABC

From DB! 시작될 때 필요정보 모두 Load

복구 안정성 좋음ㄷ

서비스 시작 Delay, 정보기록 부하ㄷ

ex. 매니저서버

Page 90: Ndc14 분산 서버 구축의 ABC

Replication! Master / Slave (Write 동기화 )

안정적인 복구 모델ㄷ

다수의 Slave 를 통한 Read 부하분산ㄷ

ex. DB 서버 , 매니저서버

Page 91: Ndc14 분산 서버 구축의 ABC

Failover

Page 92: Ndc14 분산 서버 구축의 ABC

Dash Board!특정 유저의 추적

현재 분산서버 모니터ㄷ

지표 수집

Page 93: Ndc14 분산 서버 구축의 ABC

Log파일 로그 < DB 로그

e

검색이 용이e

일일 로그 ( DB 일별 테이블 )

Page 94: Ndc14 분산 서버 구축의 ABC

MonitorMemory DB( redis ) 를 이용하자

e

성능지표 ( latency )e

Warning ( exception, critical value)

Page 95: Ndc14 분산 서버 구축의 ABC

Indicator중요 지표 ( cs ) 는 서버에서

E

게임 분석 지표는 client base log 를 고려e

Page 96: Ndc14 분산 서버 구축의 ABC

Client Base 필요한 정보을 Client 가 가지고 있음

서버 로깅 부하와 분리 가능 ( Rabbit MQ )ㄷ

로그 작업의 편리 ( client 패치 , 시점 )ㄷ

Ex. 특정 레벨업 때의 장비 정보 , 던전 입장시 파티원의 직업

Page 97: Ndc14 분산 서버 구축의 ABC

Client Logging

Page 98: Ndc14 분산 서버 구축의 ABC

Next?

Page 99: Ndc14 분산 서버 구축의 ABC

Redis?!pub /sub 을 통한 다양한 Admin

ㄷ공지사항 , 특정 유저 알림ㄷ

실시간 event ( QA Live test )ㄷ

상점 on/off 등 feature 관리 기능 ( 제재기능 )

Page 100: Ndc14 분산 서버 구축의 ABC

Admin

Page 101: Ndc14 분산 서버 구축의 ABC

3 부 끝 !

Page 102: Ndc14 분산 서버 구축의 ABC

Extra…

Page 103: Ndc14 분산 서버 구축의 ABC

Deploy! United Server

One Binary Server

Page 104: Ndc14 분산 서버 구축의 ABC

United! 각 서버를 객체로 ..

정말 쉬운 배포ㄱ

정말 쉬운 디버깅

Page 105: Ndc14 분산 서버 구축의 ABC

One! 서버간 버전 불일치 X

쉬운 배포ㄱ

약간 복잡한 종합 설정

Page 106: Ndc14 분산 서버 구축의 ABC

Schedule! Say No!

6:4 developmentTest Driven Development

Page 107: Ndc14 분산 서버 구축의 ABC

Thank you!