Your SlideShare is downloading. ×
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
004. 소셜앱 개발 노하우 선데이토즈 임현수 cto
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

4,827

Published on

0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,827
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
116
Comments
0
Likes
12
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Redis로소셜게임개발자구출하기 CTO,SUNDAYTOZ 임현수 @fribirdz
  • 2. 소셜게임(서버)의특성쓰기(Create,Update,Delete)가읽기(Read)보다훨씬많다.데이터는계속변한다.하나의인스턴스를여러명이갱신하는경우가많다.트랜잭션단위의요청이많다.
  • 3. 서비스중인소셜게임서버의어려움
  • 4. 업데이트=부하상승 업데이트가계속되면게임의기능도추가되거나보강된 다. 기능이보강되는경우기존기능+추가요소or기존기 능+소셜기능일때가많다. 그럴수록게임의복잡도는늘어나고,계산해야할양도지 수적으로늘어날수있다.
  • 5. 업데이트=부하상승 작물심기+ 작물심기+ 작물심기+ 친구작물축복하기+하 친구작물축복하작물심기 친구작물축 루에한번내작물에물 기+하루에한번 복하기 주기+작물도둑vs경 내작물에물주기 찰기능
  • 6. 서버부하해결의어려움 (웹서버의부하를해결하고난뒤에남은)대부분의부하 는DB부하이다. DB부하는최적화와튜닝만으로는처리에한계가있다.
  • 7. DBReplication 소셜게임서버의DB읽기/쓰기비율은3:7~5:5 Replication을해도,쓰기의부하는줄어드지않는다. 게임데이터는계속변한다. Master-Slave동기화의시간차가커지면게임로직의오 류로전파될수있다.
  • 8. DBSharding 나눠진DB간의Join,Transaction의어려움 공평하게분산하는것도쉽지않음 최근가입한회원들이더요청을많이함 Hash를통해분산한다면,서버를추가했을때처리가 복잡해짐 서버설계단계부터고려되어야함
  • 9. ScaleUp? SATA-SAS-SSD-FusionIO-그이후엔? AWS와같은클라우드서버는I/O성능이매우떨어진다.
  • 10. NoSQL로교체! “매일수십만명에게서비스하는게임의DB를어떻게뒤 엎어요.ㅎㄷㄷㄷ잘못되면사tothe망”
  • 11. Memcached영구적이지않음. MemcacheDB,Membase와같은해결책은있음읽기를줄일수는있지만,쓰기를줄일수는없음 DB를memcached로교체하면해결할수있음. 하지만.... “매일수십만명에게서비스하는게임의DB를어떻게 뒤엎어요.ㅎㄷㄷㄷ잘못되면사tothe망”
  • 12. 전략MySQL의쓰기작업중 부하가심한데Memcached나NoSQL로떼어낼수있 는작업은없을까?
  • 13. 소셜게임의특성 하루에N번씩할수있는행동 N분마다1번씩할수있는행동 내작물에1번씩할수있는행동 내친구한테1번씩할수있는행동 내친구작물에1번씩할수있는행동...
  • 14. Redis고성능PersistanceStorage다양한DataStructures지원
  • 15. 다양한DataStructures! String SET,SortedSET LIST Hash
  • 16. 유용한기능들 KEYS INCR,INCRBY DECR,DECRBY TTL SDIFF
  • 17. 명령어공통 exists,del,type keys,randomkeys flushdb ttl,expire
  • 18. 명령어String get,set,getset mget,mset incr,incrby decr,decrby
  • 19. 명령어List pop,pop index lrange,ltrim,llen blpop,brpop rpoplpush,brpoplpush
  • 20. 명령어SET sadd,srem,spop,smove scard,sismember,smembers,srandmember sinter,sinterstore,sunion,sunionstore sdiff,sdiffstore
  • 21. 명령어SET sadd,srem,spop,smove scard,sismember,smembers,srandmember sinter,sinterstore,sunion,sunionstore sdiff,sdiffstore
  • 22. 장점RDBMS에서N번의쿼리로해야할일을1번의쿼리로수행할수있다.RDBMS에서N개의row를검색해서얻어야하는결과를적절한datastructure를사용해서적은cost로수행할수있다.
  • 23. 유용한기능들 INCR,INCRBY redisSETvisitors10 OK redisINCRBYvisitors5 (integer)15 내농장오늘/전체방문자수 (오늘)선물보낸횟수 소셜에너지카운팅(withexpire)
  • 24. 유용한기능들:SET 하루에한번만할수있는행동들에사용 Key에expire를주거나,dailyDB를flush SADD(set에member추가) SCARD(count) SRANDMEMBER(랜덤member추출) SISMEMBER(특정member가set안에존재하는지확인)
  • 25. 유용한기능들:SET 친구의농장에서보물상자를열수있다. 친구1명당하루에1번열수있다. UserB가보물상자를연친구들의목록 SMEMBERSOPEN_BOX:USER_B UserB가보물상자를연횟수(일일제한) SCARDOPEN_BOX:USER_B UserA가UserB의농장에서보물상자를열었는지 SISMEMBEROPEN_BOX:USER_AUSER_B
  • 26. 유용한기능들:LIST LLEN(getthelengthofalist) LPUSH(prependavluetoalist) LREM(removeelementsfromalist) LTRIM(trimalisttothespecifiedrange)
  • 27. 유용한기능들:LIST 최근내농장에서친구들이취한액션들 최근30개 최근순서대로
  • 28. MysqlvsRedis TBD
  • 29. Redis의단점 sharding을직접구현해야한다. REDIS3.0에서는Clustering지원예정 데이터사이즈가커지면(특히string)메모리사용량이 급격히늘어난다. 메모리의데이터를Disk로snapshotting할때I/O가급 격히상승한다.데이터의크기가커질수록더심하다.

×