004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

30
Redis 로 소셜게임개발자 구출하기 CTO, SUNDAYTOZ 임현수 @fribirdz

Upload: cyworld-appstore-sk-communications

Post on 25-Jan-2015

4.704 views

Category:

Documents


13 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

Redis로����������� ������������������  소셜게임개발자����������� ������������������  구출하기

CTO,����������� ������������������  SUNDAYTOZ

임현수

@fribirdz

Page 2: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

소셜게임(서버)의����������� ������������������  특성

쓰기(Create,����������� ������������������  Update,����������� ������������������  Delete)가����������� ������������������  읽기(Read)보다����������� ������������������  훨씬����������� ������������������  많다.

데이터는����������� ������������������  계속����������� ������������������  변한다.

하나의����������� ������������������  인스턴스를����������� ������������������  여러명이����������� ������������������  갱신하는����������� ������������������  경우가����������� ������������������  많다.

트랜잭션����������� ������������������  단위의����������� ������������������  요청이����������� ������������������  많다.

Page 3: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

서비스����������� ������������������  중인����������� ������������������  

소셜게임서버의����������� ������������������  어려움

Page 4: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

업데이트����������� ������������������  =����������� ������������������  부하����������� ������������������  상승

업데이트가����������� ������������������  계속되면����������� ������������������  게임의����������� ������������������  기능도����������� ������������������  추가되거나����������� ������������������  보강된다.

기능이����������� ������������������  보강되는����������� ������������������  경우����������� ������������������  기존����������� ������������������  기능����������� ������������������  +����������� ������������������  추가����������� ������������������  요소����������� ������������������  or����������� ������������������  기존����������� ������������������  기능����������� ������������������  +����������� ������������������  소셜����������� ������������������  기능일����������� ������������������  때가����������� ������������������  많다.

그럴수록����������� ������������������  게임의����������� ������������������  복잡도는����������� ������������������  늘어나고,����������� ������������������  계산해야����������� ������������������  할����������� ������������������  양도����������� ������������������  지수적으로����������� ������������������  늘어날����������� ������������������  수����������� ������������������  있다.

Page 5: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

업데이트����������� ������������������  =����������� ������������������  부하����������� ������������������  상승

작물����������� ������������������  심기작물����������� ������������������  심기����������� ������������������  +����������� ������������������  친구����������� ������������������  작물����������� ������������������  축복하기

작물����������� ������������������  심기����������� ������������������  +친구����������� ������������������  작물����������� ������������������  축복하기����������� ������������������  +����������� ������������������  하루에����������� ������������������  한번����������� ������������������  내����������� ������������������  작물에����������� ������������������  물����������� ������������������  주기����������� ������������������  +����������� ������������������  작물����������� ������������������  도둑����������� ������������������  vs����������� ������������������  경

찰����������� ������������������  기능

작물����������� ������������������  심기����������� ������������������  +친구����������� ������������������  작물����������� ������������������  축복하기����������� ������������������  +����������� ������������������  하루에����������� ������������������  한번����������� ������������������  내����������� ������������������  작물에����������� ������������������  물����������� ������������������  주기

Page 6: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

서버����������� ������������������  부하����������� ������������������  해결의����������� ������������������  어려움

(웹서버의����������� ������������������  부하를����������� ������������������  해결하고����������� ������������������  난����������� ������������������  뒤에����������� ������������������  남은)����������� ������������������  대부분의����������� ������������������  부하는����������� ������������������  DB����������� ������������������  부하이다.

DB����������� ������������������  부하는����������� ������������������  최적화와����������� ������������������  튜닝만으로는����������� ������������������  처리에����������� ������������������  한계가����������� ������������������  있다.

Page 7: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

DB����������� ������������������  Replication

소셜게임서버의����������� ������������������  DB����������� ������������������  읽기/쓰기����������� ������������������  비율은����������� ������������������  3:7~5:5

Replication을����������� ������������������  해도,����������� ������������������  쓰기의����������� ������������������  부하는����������� ������������������  줄어드지����������� ������������������  않는다.

게임����������� ������������������  데이터는����������� ������������������  계속����������� ������������������  변한다.����������� ������������������  Master����������� ������������������  -����������� ������������������  Slave����������� ������������������  동기화의����������� ������������������  시간차가����������� ������������������  커지면����������� ������������������  게임로직의����������� ������������������  오류로����������� ������������������  전파될����������� ������������������  수����������� ������������������  있다.

Page 8: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

DB����������� ������������������  Sharding

나눠진����������� ������������������  DB����������� ������������������  간의����������� ������������������  Join,����������� ������������������  Transaction의����������� ������������������  어려움

공평하게����������� ������������������  분산하는����������� ������������������  것도����������� ������������������  쉽지����������� ������������������  않음

최근����������� ������������������  가입한����������� ������������������  회원들이����������� ������������������  더����������� ������������������  요청을����������� ������������������  많이����������� ������������������  함

Hash를����������� ������������������  통해����������� ������������������  분산한다면,����������� ������������������  서버를����������� ������������������  추가했을����������� ������������������  때����������� ������������������  처리가����������� ������������������  복잡해짐

서버����������� ������������������  설계����������� ������������������  단계부터����������� ������������������  고려되어야����������� ������������������  함

Page 9: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

Scale����������� ������������������  Up?

SATA����������� ������������������  ->����������� ������������������  SAS����������� ������������������  ->����������� ������������������  SSD����������� ������������������  ->����������� ������������������  FusionIO����������� ������������������  ->����������� ������������������  그����������� ������������������  이후엔?

AWS와����������� ������������������  같은����������� ������������������  클라우드����������� ������������������  서버는����������� ������������������  I/O����������� ������������������  성능이����������� ������������������  매우����������� ������������������  떨어진다.

Page 10: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

NoSQL로����������� ������������������  교체!

“매일����������� ������������������  수십만명에게����������� ������������������  서비스하는����������� ������������������  게임의����������� ������������������  DB를����������� ������������������  어떻게����������� ������������������  뒤엎어요.����������� ������������������  ㅎㄷㄷㄷ����������� ������������������  잘못되면����������� ������������������  사����������� ������������������  to����������� ������������������  the����������� ������������������  망”

Page 11: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

Memcached

영구적이지����������� ������������������  않음.

MemcacheDB,����������� ������������������  Membase����������� ������������������  와����������� ������������������  같은����������� ������������������  해결책은����������� ������������������  있음

읽기를����������� ������������������  줄일����������� ������������������  수는����������� ������������������  있지만,����������� ������������������  쓰기를����������� ������������������  줄일����������� ������������������  수는����������� ������������������  없음

DB를����������� ������������������  memcached로����������� ������������������  교체하면����������� ������������������  해결할����������� ������������������  수����������� ������������������  있음.

하지만....

“매일����������� ������������������  수십만명에게����������� ������������������  서비스하는����������� ������������������  게임의����������� ������������������  DB를����������� ������������������  어떻게����������� ������������������  뒤엎어요.����������� ������������������  ㅎㄷㄷㄷ����������� ������������������  잘못되면����������� ������������������  사����������� ������������������  to����������� ������������������  the����������� ������������������  망”

Page 12: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

전략

MySQL의����������� ������������������  쓰기����������� ������������������  작업����������� ������������������  중

부하가����������� ������������������  심한데����������� ������������������  Memcached나����������� ������������������  NoSQL로����������� ������������������  떼어낼����������� ������������������  수����������� ������������������  있는����������� ������������������  작업은����������� ������������������  없을까?

Page 13: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

소셜게임의����������� ������������������  특성

하루에����������� ������������������  N번씩����������� ������������������  할����������� ������������������  수����������� ������������������  있는����������� ������������������  행동

N분마다����������� ������������������  1번씩����������� ������������������  할����������� ������������������  수����������� ������������������  있는����������� ������������������  행동

내����������� ������������������  작물에����������� ������������������  1번씩����������� ������������������  할수����������� ������������������  있는����������� ������������������  행동

내����������� ������������������  친구한테����������� ������������������  1번씩����������� ������������������  할����������� ������������������  수����������� ������������������  있는����������� ������������������  행동

내����������� ������������������  친구����������� ������������������  작물에����������� ������������������  1번씩����������� ������������������  할����������� ������������������  수����������� ������������������  있는����������� ������������������  행동...

Page 14: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

Redis

고성능

Persistance����������� ������������������  Storage

다양한����������� ������������������  Data����������� ������������������  Structures����������� ������������������  지원

Page 15: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

다양한����������� ������������������  Data����������� ������������������  Structures!

String

SET,����������� ������������������  Sorted����������� ������������������  SET

LIST

Hash

Page 16: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

유용한����������� ������������������  기능들

KEYS

INCR,����������� ������������������  INCRBY

DECR,����������� ������������������  DECRBY

TTL

SDIFF

Page 17: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

명령어

공통

exists,����������� ������������������  del,����������� ������������������  type

keys,����������� ������������������  randomkeys

flushdb

ttl,����������� ������������������  expire

Page 18: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

명령어

String

get,����������� ������������������  set,����������� ������������������  getset

mget,����������� ������������������  mset

incr,����������� ������������������  incrby

decr,����������� ������������������  decrby

Page 19: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

명령어

List

pop,����������� ������������������  pop

index

lrange,����������� ������������������  ltrim,����������� ������������������  llen

blpop,����������� ������������������  brpop

rpoplpush,����������� ������������������  brpoplpush

Page 20: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

명령어

SET

sadd,����������� ������������������  srem,����������� ������������������  spop,����������� ������������������  smove

scard,����������� ������������������  sismember,����������� ������������������  smembers,����������� ������������������  srandmember

sinter,����������� ������������������  sinterstore,����������� ������������������  sunion,����������� ������������������  sunionstore

sdiff,����������� ������������������  sdiffstore

Page 21: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

명령어

SET

sadd,����������� ������������������  srem,����������� ������������������  spop,����������� ������������������  smove

scard,����������� ������������������  sismember,����������� ������������������  smembers,����������� ������������������  srandmember

sinter,����������� ������������������  sinterstore,����������� ������������������  sunion,����������� ������������������  sunionstore

sdiff,����������� ������������������  sdiffstore

Page 22: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

장점

RDBMS에서����������� ������������������  N번의����������� ������������������  쿼리로����������� ������������������  해야할����������� ������������������  일을����������� ������������������  1번의����������� ������������������  쿼리로����������� ������������������  수행할����������� ������������������  수����������� ������������������  있다.

RDBMS에서����������� ������������������  N개의����������� ������������������  row를����������� ������������������  검색해서����������� ������������������  얻어야����������� ������������������  하는����������� ������������������  결과를����������� ������������������  적절한����������� ������������������  data����������� ������������������  structure를����������� ������������������  사용해서����������� ������������������  적은����������� ������������������  cost로����������� ������������������  수행할����������� ������������������  수����������� ������������������  있다.

Page 23: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

유용한����������� ������������������  기능들

INCR,����������� ������������������  INCRBY

redis>����������� ������������������  SET����������� ������������������  visitors����������� ������������������  "10"

OK

redis>����������� ������������������  INCRBY����������� ������������������  visitors����������� ������������������  5

(integer)����������� ������������������  15

내����������� ������������������  농장����������� ������������������  오늘/전체����������� ������������������  방문자����������� ������������������  수

(오늘)����������� ������������������  선물����������� ������������������  보낸����������� ������������������  횟수

소셜����������� ������������������  에너지����������� ������������������  카운팅(with����������� ������������������  expire)

Page 24: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

유용한����������� ������������������  기능들����������� ������������������  :����������� ������������������  SET

하루에����������� ������������������  한번만����������� ������������������  할����������� ������������������  수����������� ������������������  있는����������� ������������������  행동들에����������� ������������������  사용

Key에����������� ������������������  expire를����������� ������������������  주거나,����������� ������������������  daily����������� ������������������  DB를����������� ������������������  flush

SADD����������� ������������������  (set에����������� ������������������  member����������� ������������������  추가)

SCARD����������� ������������������  (count)

SRANDMEMBER����������� ������������������  (랜덤����������� ������������������  member����������� ������������������  추출)

SISMEMBER����������� ������������������  (특정����������� ������������������  member가����������� ������������������  set����������� ������������������  안에����������� ������������������  존재하는지����������� ������������������  확인)

Page 25: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

유용한����������� ������������������  기능들����������� ������������������  :����������� ������������������  SET

친구의����������� ������������������  농장에서����������� ������������������  보물상자를����������� ������������������  열����������� ������������������  수����������� ������������������  있다.

친구����������� ������������������  1명당����������� ������������������  하루에����������� ������������������  1번����������� ������������������  열����������� ������������������  수����������� ������������������  있다.

User����������� ������������������  B가����������� ������������������  보물상자를����������� ������������������  연����������� ������������������  친구들의����������� ������������������  목록

SMEMBERS����������� ������������������  OPEN_BOX:USER_B

User����������� ������������������  B가����������� ������������������  보물상자를����������� ������������������  연����������� ������������������  횟수����������� ������������������  (일일����������� ������������������  제한)

SCARD����������� ������������������  OPEN_BOX:USER_B

User����������� ������������������  A가����������� ������������������  User����������� ������������������  B의����������� ������������������  농장에서����������� ������������������  보물상자를����������� ������������������  열었는지����������� ������������������  

SISMEMBER����������� ������������������  OPEN_BOX:USER_A����������� ������������������  USER_B

Page 26: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

유용한����������� ������������������  기능들����������� ������������������  :����������� ������������������  LIST

LLEN����������� ������������������  (get����������� ������������������  the����������� ������������������  length����������� ������������������  of����������� ������������������  a����������� ������������������  list)

LPUSH����������� ������������������  (prepend����������� ������������������  a����������� ������������������  vlue����������� ������������������  to����������� ������������������  a����������� ������������������  list)

LREM����������� ������������������  (remove����������� ������������������  elements����������� ������������������  from����������� ������������������  a����������� ������������������  list)

LTRIM����������� ������������������  (trim����������� ������������������  a����������� ������������������  list����������� ������������������  to����������� ������������������  the����������� ������������������  specified����������� ������������������  range)

Page 27: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

유용한����������� ������������������  기능들����������� ������������������  :����������� ������������������  LIST

최근����������� ������������������  내����������� ������������������  농장에서����������� ������������������  친구들이����������� ������������������  취한����������� ������������������  액션들

최근����������� ������������������  30개

최근����������� ������������������  순서대로

Page 28: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

Mysql����������� ������������������  vs����������� ������������������  Redis

TBD

Page 29: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto

Redis의����������� ������������������  단점

sharding을����������� ������������������  직접����������� ������������������  구현해야����������� ������������������  한다.

REDIS����������� ������������������  3.0에서는����������� ������������������  Clustering����������� ������������������  지원����������� ������������������  예정

데이터����������� ������������������  사이즈가����������� ������������������  커지면����������� ������������������  (특히����������� ������������������  string)����������� ������������������  메모리����������� ������������������  사용량이����������� ������������������  급격히����������� ������������������  늘어난다.

메모리의����������� ������������������  데이터를����������� ������������������  Disk로����������� ������������������  snapshotting할����������� ������������������  때����������� ������������������  I/O가����������� ������������������  급격히����������� ������������������  상승한다.����������� ������������������  데이터의����������� ������������������  크기가����������� ������������������  커질수록����������� ������������������  더����������� ������������������  심하다.

Page 30: 004. 소셜앱 개발 노하우 선데이토즈 임현수 cto