ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

35
健太郎

description

2012年8月30日に北海道大学で行われた「Cloud Week 2012@北海道大学 ~クラウド技術の最先端を探る~」の講演発表で使用した資料。

Transcript of ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

Page 1: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

!"#$%&'()*&+,

!-./01

! ! "#$%&'()*+,-./ !

!"#$%&'()*+,-.

/01 健太郎

Page 2: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

!"#$%&'

! !"健太郎

! #$%&'#$()

! *+,-.

! ke-tai.org 管理⼈

! /0-12345067,89:

! ;<=>37?@ABCD0*EF

Page 3: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

!"#$%('

! ;<=>37?@ABCD0*

! 北海道札幌市のソフトウェア開発会社

! GHIJKLMN02N3OPQRS

TU-VWXYZ(2009)T[\4]^C(2010) TLord of Knights(2012)T4307_U`3O THE CONQUEST (2012)

※プログラム開発のみを担当しており、企画・運営は⾏っておりません

Page 4: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

)*+,-

!"#⼒がぐんぐんと上昇して$"#%&も⻑くなる

'()*+,-./0123!"#45678

!"#$%&'()*+,$-./012345$6789:;<=14>[email protected]

Page 5: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

./.,-

9:;<<<=>4?@?)%4AB,CD

?@?⼒がぐんぐんと上昇して+(+E"F"も⻑くなるGHI

JJJE+(+EF)KL#MFNM*LOMLP,Q./0123?@?45678

"?(RF)STFU%R"UVWX

!"#$%&'

Page 6: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

01234567894

YZ[\]^_`ab4cde^_fghija

klmn/AopqrstuAv

Page 7: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

:;<=>

! !"#$%&'()%*+,-./012

! 3456/012

! 7895:%*;%</012

! =>?@/012ABCDEF

! =>?@/012AGHEF

! =>IJK/012

! LM/N21O.P/012

! QRS

Page 8: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

!"#$%&'()%*+,

!!!!

Page 9: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

!"#$%&"'()

!"#$%&"'()*+,-./012,3145678!"#$%9:;<=">?@9A

"BC(-D-6EFGHIJ8KLM"N"OPQRST"#U?VOWXYZ[

\]^_`?a]?&"'9bacN&"'Fd_e

fgF7@h"Yijk!"#$%&"'LGHVlmn8oLpqr"9st9

s"Yuv^_wxyz{|A"BC8}~&"�c?YGHVlmn�����

=]�%�Y��Lm�WOX��e����年��k7-D-��i��LQ�#rY

�40�0�[h�LA"BCVlm8��&"'��YGH^_&"'Y��IJ8

�5�..YGH^_�A?#$]?� �Y¡¢£Y���¤¥V¦^X§8¨©ª«

^_¬­kX��e

®0�0¯5°01¬W±²

!"##$%&&'()*+,+$-.+()/01&*+,+&234567389

!!!!

Page 10: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

?@<ABCDEFBGHI%&'

!"#$%&#'('()*+'&,-.

! $%&'()%*TUV%JWXY/ZO[RT\]^

³ ´ha?´µ¶·¬¸oJk¹º^_�»¼½¾

³ P?[¿À$ÁÂ

³ XÃÄÅÆÇLÈÉ�WYÊËX��

³ pÌÍ�ÎÏLVÐ�ÑÎ_ÒÏW7XÎ

³ s?ÓS�OnÑ7ÔÕkÖ×n�Î

! _`#abcdeQfg1

³ ØkÙÚLÛWkÜnÑ7d�WÝÞYßά­Ä

³ �ÄnÛWLàá!"#$%&"'kâãYXÅ��¥�FY8

ä��åæç�OèÎÑË_OέÝÞY

Page 11: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

?@<ABCDEFBGHI%('

開発者から⾒た最近のソーシャルゲーム開発

! JhiTjkl/Zm2n21O

³ :]érb�[h7ÏêÌÃ8».ë1ì593�ííÏ

³ ガラケー界隈は少し落ち着いて来た印象

³ îï{|L&"'ðñkò21óôVõö÷7øªn�ùú

! 9mofpqrcsf21Z1

³ �a]�?<9A"~9]?ûaX§àÑYüWXÎ

³ ýþÿ(ý1!1þ1ó5,ÿ°40"0ó!#1!.#6Y$%IJ_

³ &¼»'()*-s?ÓS�LS"+Yµ,o­

³ O7Î,-./Ym�W8XÃê0�ÑL1£2s?ÓS�7

ä oÌoÌ34IJ75Í_ÅÏ

Page 12: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

?@<ABCDEFBGHI%J'

()*+,-./0123456738$9

! tu#vw

³ l�67L8�k9Îs?ÓS�:ÍZJ_ÏLÏ;<�Ñ=�

³ >?Ú!L"#/(s?ÓS�$%&8'7'(k8)*7+W,^6

! 求められる能⼒

³ 継戦能⼒(続く運営・アップデート、終わりがない)

³ 情報の横への共有化、他者/他社への展開能⼒

³ 安定したリソース提供、⻑期を⾒越した教育スキームの確⽴

³ 海外展開能⼒

! $%&'()%*xyz#{|}

³ -./®5ëA"BC0L128&"QûrT"#U?0L3ö

³ 45LP?#R"6"&"'L:;</OoL~;�s?´l�

Page 13: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

!"#$%&'(

!!!!

Page 14: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

KLMNOP1Q(1)

ソーシャルゲームとクラウドは相性が良い

インフラ視点から⾒たソーシャルゲームの特徴

~��%J�#��K����T�N1

wxyaz{|}~���um

wx�^_uA������ad��m

~�%<v�T�n1

wx�4����������

wx�����

wxfgZ�aZY�Z_3�

Page 15: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

KLMNOP1Q(2)

Q. /012,3+'&4.A. 最近では国内のクラウドサービスを利⽤しています�,:�ih{zq������m ¡�l�¢AWS£�mt¡¤¥¦§4¨a©d4��¢�ª«AWS ¡

!"#$%&'()*+,-../

こんなポイントを⾒て選んでいます

³コストや安定度(障害履歴)は当然⾒る³78LBがあり、それが強⼒であること³インスタンスの追加が容易で速いこと(電話やメールとかは論外6

³qrC�0LI/OY9ËøªnÑÎ_:O8SSD;ÏdWY�γ⾼価でも強⼒なスペックのインスタンスが⽤意されている、

äまたは物理マシンとの併⽤が可能(最後の⼿段的な使い⽅6

Page 16: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

KLMNOP1Q(3)01234+5678!"#$%&'()*+,#-.)/01234

!!!"

#$%&'()*)+

,-,.*/+0#,1

23"

45678.*.+ 094-#

:;6"

<(<&%&'(=>9:5?@?A5&??B

CDE"

FG5GH?I>9&%&@J>9452K6

Page 17: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

)*+#,-./-0

%&'(

!!!!

Page 18: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

RSTMUBGVBWOP1Q

56789PHP1:3+';<=>?@-''#A';<BCDEFGEH7IJ@<

! +,78

x ?@?¬P?)%*¬P­N®¯lAsq°±²±

x ³´3µ¶ °m�·���CD¸¹ad4º»¼�

w 新⼈教育が容易な⾔語が向いている

! [½a¾¿ai

x Àr[½a¾¿aiq�ÁÂm/

x 以前はあえてのベタ書きだったが、開発効率や再利⽤性など

w の⾯からフレームワークを作成し利⽤するように

x ï#ÄRF¯3�4ÅÆ[½a¾¿aiqÇÈuÂ�ÁÂm/

w 3�4Éu£²±��ÊË2,¢ÌÇÈÍÎÂm/°�Ï

Page 19: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

12345%&'(

!!!!

Page 20: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

XYZ[\OP1Q(1)まずはテストプレイなどから数値目標を⽴てる

9<=IJ_>?@AB

9CM"NYC[\]FDÐ^_?Ç

9CM"NYC分間に⾏うリクエストの数

【例】

256789:;<<<<=+25678>?;5@)67ABCDEFGHEGI8>*J4

;EGIAKL*J5@9:;<分操作し続けて離脱と想定

;EGIA;分間に⾏う平均リクエスト数9:MN

O ;<P@#2567EGI89:;<<<<:Q:R:S:;RRTEGI

UO ;P@VWHXYZ[\JN89:;RRT:]:M:S:^__MN

UUO ;`@VWHXYZ[\JN89:^__M:Q:R<:S:;_aN

ÐwÑÒk;ÓÔ¸iÕd_LÖpq×AØÎÙ°m

Page 21: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

XYZ[\OP1Q(2)9:;<;=>?@ABCDE

9X_EËFGLDÐkHÎ#Ih`k^_

9ÐJL�ÇYÅÅW^KXά­k^_

9全部をシナリオに⼊れるのは無理なので重い処理ランキングを元に、

 利⽤頻度と処理の重さを考慮して配分する

ih{zÚ,ÛÜ)K)%クライアントを複数台⽤意して⼀⻫実⾏

ÝÞuAßàáâqi¸} ã/äqåäB/

æç3èéêa]ZëìíÞqîsï¡

FGHIJ+("#$%KLMNOPQRSTU

このあたりを⼀緒に協⼒してくれる

"#$%V#WXYNZ[\]E

Page 22: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

6789:12;<

%&'(

!!!!

Page 23: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

]^_`<XYabOP1Q(1)

KLMN9-OPQ&4@R9STU;<

�n��0/��2?@

wx ð�ñòó[½a¾¿aiô4õö÷

wx øù�aú¼T?û4õö÷

共通部分はあらゆる処理で呼ばれることになる

üts;#Ã�±3ÎÙ�;<<<¸iÕd_3è;<<<ýþ�

ÿ!W"#�õmð�ñòq$%uÂW&u�

'4(,øù4b)ëh¾qW&uÂm±

Page 24: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

]^_`<XYabOP1Q(2)^_+`a]76EFGbcdefgAIJ

【共通処理編V

G;IP共通処理内で何をしているかを全て把握しているか

O どういう処理が⾏われるか、bcdは何回流れているか、などを完全に把握すること

O 共通部分に処理を⾜すときは、かならずチーム内で許諾を取ること

G*IPそもそも、その処理は本当に必要なのか

O 最も効果的な負荷対策は、処理の速度を速めるより処理⾃体を無くすことである

O eVHfghiZ j サーバ型のアプリの場合は、相当処理が削れる

O クライアント側でキャッシュや処理できるような処理がないか⾒直す

GÓIPfg^+ꢠã3mä

O klmnopqr s:tutvwvxu sssss:yzbcd:#{)|}

+klm?~u��G���)#nopqr)BJ�>V��4

O 共通処理内では、bcd実⾏回数がゼロが望ましい

Page 25: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

]^_`<XYabOP1Q(3)

G,IP無駄なものの発⾒

O ��&�u����u��*V?�GZ�G�#��A�

O ��l���#vw����w�x)��pH

O �u� ��¡¢£LYHW¤Z)¥

U ��&¦8¢§¨\©}&}ª«p�&,�¬­

G-IP'4./´0

O �®G¢XfG¯i�f&,¥°¨±>�²A³pHV&J�>/BJ#)¥

U ´µ\JN8A¶}/#?¥·¸��pH¹�rGFiº*J�>

O »¼b½bb¾¿Àの利⽤は最低限に留めること

Page 26: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

]^_`<XYabOP1Q(4)^_+`a]76EFGbcdefgAIJ

【個別処理編V

G;IP1m?@?hZfZëqr/ó2ëh3ã4ô

O 実⾏速度を記録する仕掛けを作り、最も遅くて呼ばれる回数の多い順に対処

O k�wvxu�ºÁÂw�w���&,)ÃÄ*JÅÆ/

G*IP567の⾒直し

O Ç}ÈÉ#Ê>Ë,?bcdAÌÍ)Ç}+h¤W�ÎpH)#ÏÐÑÒ?ÓÔ}4

O ÕÖ#×Ø>ÙGÚ8AÛ%>ÜÝV&Â&}¥ÙGÚ?ÞV¶ßV�\©àá�>

O giÙpHYâ§ã#HXW¢Y�GHXW�ºVäC©áJHXW��*

O t j��u�zjå��u¡æで早くても実⾏回数の多いクエリを発⾒しチューニング

O vwvæ�などのグラフから問題を発⾒する

GÓIP仕様で⾒直す

O çè�ÊéêDÔëë/¥ìí&áîGïVL\J>�²A&}Á�ÞVðñ

O どうしてもダメなら仕様の⾒直しを相談

Page 27: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

]^_`<XYabOP1Q(5)hijIk1lFGbc

./LMLNg7!"#$%&'()*+,-./012Fd_e

�Än®5ëA"~OýþC\]b78PBVµO^:OFL3F=_Y8

ýþ6C�"7QRk7µO^:OYF=XÎ�Í8::Y:;�OX_e

¬�Ñ8./VX_EËKLA"~kÚS^_TúYUÑË_

!8!5G#)#&M&()U3�IP,¦§/

O 情報が古い可能性があることに注意、トランザクション処理にはあまり使えない

!9:d½Y;,¦§/

O òÞ?YógôV67Ô¥ZfiIHqõiö÷øù½ú¾Àû)üYÚGV67*J

U+ýóGþÿGHó!î)Õ"4

O üYÚG�iWG)ö#�$ߥ%&&HXWÁÂ{V'(b¢YóGôV

U )C©}á¢*Å/

O giýf#'+Å,V/-Ë)áJ

Page 28: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

]^_`<XYabOP1Q(6)hijIk1mn

<ß¿a`z,ò§èÎ3mjYb4=a¾¼�>�?!>ß4

�m=a¾4���cdjaò"¢#§Â�/��� ã3mv

!$%ò"

³ 切り離しやすいテーブルを他のýþに持って⾏く(例+VWXÄ|Yýþ6

!&Ñò"

³ M"NZýQ[FÚ?^_

³ @�"~%ýþV\ê8o:kM"NZýO]^ýþV_`n�é"b%V\Ò

³ a6b`?k7iÏ��érbM"NBLcXÎýþkb`

de7�[hfFgBLýþVhk<a?N�#U?lmiPQ;<nÑÎ_

³ Ú?ýþが多くなるほど性能が劣化する

³ バックアップ時の整合性や、エラー時の処理が⼤変

³ M"NÇLÜ<WYÊά­X�[h7ÐWjZÎ

³ »k-l' ï2mó!5#knon�Î

Page 29: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

]^_`<XYabOP1Q(7)ofgpqbc

./7ÅÅ�ÑÎXÎYpûq"6?CYUXÎ8

'./�,r10!,!045.m!Ys�^_8X§L t7�;�utVv­

6C�"Ú?IJÑÎ_ t78

デッドロック検出がされないので更に厄介

'W()

_hZ*i++Z��¢,-3.s/±

³ �[hfkwULxy|VÎJÑÎ_

³ »k-2.r¼#1"ï1¯!m#5X§Lz"%V{ö

)^i��±ää/0a;`¢1ä±ò§/

³ ⾏ロックをかけるので8�つのポイントを同時に更新できない

³ |]?<}Lé"b%X§F~WYêX�

user_point_tbl!user_id!energy_point!battle_point

user_energy_point_tbl!user_id!energy_point

user_battle_point_tbl!user_id!battle_point

! !

Page 30: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

=>%?('@AB

!!!!

Page 31: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

cdO9Q13Ie

WXY1Z[\U;<

23)®ÕZú]}4AB44aj�ad56789:;<

ww=>?@AB

äO ./¥eV;01?«Gqoî2Gþö#3?·4

2ÕfdCa_4AB4ܯ5677D!E管理:

w_h;`+êa0\ZëFYzäGHIJAB

äOUò567×8¥ロックを理解するのにオススメ

2ÜR®MK)qLn/56 〜ソーシャルゲームの舞台裏〜

ww9)MTB

äOU9DµÁ*¥Õ:;&<=

56NO¥Ï�

>?!>Ô©~½ù"#ù:l$½bb¥b��æ%w�u#u¡���

>>*B&¸¥?©'#6(i)rGÚ>¾*8カテゴリは全部⾒てます

Page 32: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

8fg(1)! $%&'()%*+,}��v�f00eO

! �S��O}##vw/��/?{N21n^1

! クラウドとソーシャルゲームは相性が良い

! 3456��c��/��

! �4��9APIc _N21OR9mof¡N1! ¢£J<I/O¤�¥! ¦§¨�©¦Jª�<c«¬­RN2efT^1

Page 33: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

8fg(2)! 5:%*;%<c®¯T°JJ±

! =>?@cIJKR²³�<�JK¤¯m2´�R?

@

! DBhJµ%#=>¶·T¸RZO

! =>/c3456~¹º�T»¼RZm2?{

! 基本に忠実に鉄板構成で、ただし⾏けるところはガン

½4R

! �vZ[R}¾1�©¿N1WÀd¿NÁ[RT��

! 10}ÂÃ#ĤÅ�Æ/

Page 34: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

hijk

PQRSYZ[\]^_`ab ¢ÕZú]}qTUuÂmt¡

! 社⻑も含めほぼ全てがプログラマで技術者に優しい環境

! �VW'北海道札幌市

! XmumYZ[mÁ\m�À]mÁ\m�^_`3m�aum

! 短い通勤時間、徒歩や⾃転⾞で通勤;<ò�ä£*h

! bjaZ�ûjaZcde

! ?@?CDÕZú]}

! dcfCDÕZú]}

! ܯ567ÕZú]}

! YZ[hÕZú]}

Page 35: ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

l

!"#$%&'(!)*+,-