Elixirでのゲーム開発事例

8967cfd9e8cf05a062187c2a4c7da05a?s=47 Ryo Atsuta
June 01, 2019
140

 Elixirでのゲーム開発事例

以下の機能を説明
・リアルタイムバトル
  - Websocketでリアルタイム性を実現
・リアルタイムマッチング
  - Websocketでリアルタイムで参加者を確認可能
  - 14人揃った時点でマッチング完了
・自動スケールアウト(失敗談)

8967cfd9e8cf05a062187c2a4c7da05a?s=128

Ryo Atsuta

June 01, 2019
Tweet

Transcript

  1. Elixirでのゲーム開発事例例 !1

  2. ⾃自⼰己紹介 !2

  3. ⾃自⼰己紹介 !3 名前:熱⽥田 亮 会社:アルサーガパートナーズ株式会社 ・Web系の開発がメイン ・Elixir/Phoenix, PHP/Laravel 'VMM4UBDL&OHJOFFS ・ゲーム開発

  4. !4 ήʔϜ

  5. 担当していた機能

  6. !6 ・リアルタイムマッチング ・⾃自動スケールアウト ・リアルタイムバトル 担当した機能

  7. リアルタイムバトル (GvG)

  8. !8 ϦΞϧλΠϜότϧ

  9. !9 λοϓ ϦΞϧλΠϜότϧ

  10. !10 λοϓ ߈ܸ ϦΞϧλΠϜότϧ

  11. !11 ϦΞϧλΠϜότϧ

  12. !12 ϦΞϧλΠϜότϧ

  13. !13 ൣғ߈ܸ ϦΞϧλΠϜότϧ

  14. !14 ϦΞϧλΠϜότϧ

  15. !15 ϦΞϧλΠϜότϧ

  16. !16 ϦΞϧλΠϜότϧ (WH.BOBHFS (WH (VJME $IBSBDUFSY/ 4VQFSWJTPSߏ੒ (WH (VJME ϧʔϜຖʹੜ੒

    ఢ ຯํ 5JNF ఢ"*ʢসʣ
  17. リアルタイムマッチング !17

  18. !18 GvG開始までの流れ 1. ルームにエントリー 2. 14⼈人集まるまで待機 3. マッチング完了了(準備時間) 4. 出撃

    ϦΞϧλΠϜϚονϯά
  19. "-# .BUDIJOH User (W( (W( (W( ϦΞϧλΠϜϚονϯά

  20. "-# .BUDIJOH User &OUSZ (W( (W( (W( ϦΞϧλΠϜϚονϯά

  21. "-# .BUDIJOH User &OUSZ Ϣʔβʔ͕ू·Δ·Ͱ଴ػ (W( (W( (W(

  22. "-# .BUDIJOH User $BODFM Ϣʔβʔ͕ू·Δ·Ͱ଴ػ (W( (W( (W(

  23. "-# .BUDIJOH User Ϣʔβʔ͕ू·Δ·Ͱ଴ػ Ϛονϯά׬ྃ ʢ%#ʹอଘʣ %# อଘ (W( (W(

    (W(
  24. "-# .BUDIJOH User Ϣʔβʔ͕ू·Δ·Ͱ଴ػ Ϛονϯά׬ྃ ʢ%#ʹอଘʣ %# อଘ (W( (W(

    (W( )5514 (W(αʔόʔ্ͰϧʔϜຖ ʹ։࢝ॲཧ͕࣮ߦ͞ΕΔ
  25. "-# .BUDIJOH User %# อଘ (W( (W( (W( )5514

  26. "-# .BUDIJOH User %# (W( (W( (W( )5514 ४උ׬ྃ อଘ

  27. "-# .BUDIJOH User %# (W( (W( (W( )5514 ४උ׬ྃ ֬ೝ

  28. "-# .BUDIJOH User %# (W( (W( (W( )5514 ४උ׬ྃ ֬ೝ

    ग़ܸՄೳ
  29. (W( (W( (W(

  30. (W( (W( (W( ग़ܸ

  31. (W( (W( (W( ग़ܸ

  32. (W( (W( (W( ग़ܸ

  33. ϦΞϧλΠϜϚονϯά4VQFSWJTPSߏ੒ .BJO.BOBHFS .BUDIJOH.BOBHFS .POJUPSJOH
 .POJUPSJOH
 .POJUPSJOH
 8PSLFS User .BUDIJOHαʔόʔ &OUSZ

    8PSLFSੜ੒
  34. ⾃自動スケールアウト (失敗談)

  35. "-# .BUDIJOH User x 20,000 ࣗಈεέʔϧΞ΢τ %# (W( (W( (W(

    (W( (W( (W( (W( (W( (W( (W(
  36. "-# .BUDIJOH ࣗಈεέʔϧΞ΢τ ๲େͳྔͷ ΤϯτϦʔ %# User x 20,000 (W(

    (W( (W( (W( (W( (W( (W( (W( (W( (W(
  37. "-# .BUDIJOH ࣗಈεέʔϧΞ΢τ ๲େͳྔͷ ΤϯτϦʔ %# User x 20,000 ໿ϧʔϜ෼ͷ(W(։࢝ॲཧ

    (W( (W( (W( (W( (W( (W( (W( (W( (W( (W(
  38. "-# .BUDIJOH (W( ࣗಈεέʔϧΞ΢τ ๲େͳྔͷ ΤϯτϦʔ %# User x 20,000

    ໿ϧʔϜ෼ͷ(W(։࢝ॲཧ (W( (W( (W( (W( (W( (W( (W( (W( (W( ։࢝ॲཧͷͨΊ %#઀ଓ
  39. ここまでは良かったが

  40. "-# .BUDIJOH (W( ࣗಈεέʔϧΞ΢τ ๲େͳྔͷ ΤϯτϦʔ %# User x 20,000

    ໿ϧʔϜ෼ͷ(W(։࢝ॲཧ (W( (W( (W( (W( (W( (W( (W( (W( (W( ։࢝ॲཧͷͨΊ %#઀ଓ
  41. "-# .BUDIJOH (W( ࣗಈεέʔϧΞ΢τ ๲େͳྔͷ ΤϯτϦʔ %# User x 20,000

    ໿ϧʔϜ෼ͷ(W(։࢝ॲཧ (W( (W( (W( (W( (W( (W( (W( (W( (W(
  42. "-# .BUDIJOH (W( ࣗಈεέʔϧΞ΢τ ๲େͳྔͷ ΤϯτϦʔ %# User x 20,000

    ໿ϧʔϜ෼ͷ(W(։࢝ॲཧ (W( (W( (W( (W( (W( (W( (W( (W( (W( ίωΫγϣϯ͕ऴΘΓ·ͨ͠ɻ
  43. 何が起こったか

  44. !44 原因 DB接続の上限を上回っていた 20 x 1430 = 28,600 GvGサーバー側PoolboyのSizeが20 User

    x 20,000がエントリー 20,000 / 14 = 約1430ルーム
  45. 対処⽅方法

  46. !46 ・DBのコネクション上限を変更更 対処⽅方法 ・PoolboyのSizeを減らす 以上になります。

  47. ご静聴有難う御座いました