Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon

2.358 visualizaciones

Publicado el

DeNA TechCon 2017の登壇資料です。

Publicado en: Tecnología
  • Sé el primero en comentar

DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon

  1. 1. Copyright © DeNA Co.,Ltd. All Rights Reserved. Feb 10, 2017 Makoto HARUYAMA DeNA Co., Ltd. のゲームを支えるプ ラットフォーム Sakasho
  2. 2. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自己紹介 2  2008年 DeNA入社 (みんなのウェディング)  2010年 エンジニアになる  2011年 DeNA退社 -> 福岡へ  2013年 DeNAに出戻り  2016年 ゲーム事業本部 Makoto HARUYAMA GitHub https://github.com/SpringMT Twitter https://twitter.com/Spring_MT 春山 誠 @Spring_MT
  3. 3. Copyright © DeNA Co.,Ltd. All Rights Reserved. モバイルゲーム用プラットフォーム Sakasho
  4. 4. Copyright © DeNA Co.,Ltd. All Rights Reserved.  Sakashoは社内のほぼ全てのゲームで 使われ続けている  Sakashoを使っていると クライアント開発に集中できる  Sakashoを使っているゲームは 盛り上がっている! 4 Sakashoとは 今回お話しするSakashoとは?
  5. 5. Copyright © DeNA Co.,Ltd. All Rights Reserved. 目次 1. Sakashoの機能と構成 2. 堅実な開発を目指して 3. 安定した運用 4. Sakashoの取り組み 5. Sakashoの課題とこれから 6. まとめ 5
  6. 6. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの機能と構成
  7. 7. Copyright © DeNA Co.,Ltd. All Rights Reserved.  アカウント管理  ユーザーデータ管理  課金処理  マスタ配信  アセット配信  CS対応のための仕組み など 7 Sakashoの機能と構成 モバイルゲームを作る上で必要な機能を提供 スムーズなゲーム開発が可能に
  8. 8. Copyright © DeNA Co.,Ltd. All Rights Reserved. SDKの提供 組み込むだけでSakashoの機能が利用可能  Unity、C++のゲームエンジンに対応  iOS、Android共に対応可能  課金などのOSに依存している機能も、Sakasho と連携して簡単に使える インターフェースを提供 8 Sakashoの機能と構成
  9. 9. Copyright © DeNA Co.,Ltd. All Rights Reserved. 各ゲームの専用サーバーとの連携機能  ゲーム専用サーバーからSakashoにアクセスできるWeb APIを提供  ゲーム専用サーバーを介してのユーザー情報の取得などに対応  デバッグ、QA、テストにも利用 9 Sakashoの機能と構成
  10. 10. Copyright © DeNA Co.,Ltd. All Rights Reserved. 汎用的なWebページもかんたんに 作るのが地味に面倒な お知らせなどの汎用的な ページ配信システムも提供 10 Sakashoの機能と構成 タイトル問わず 同一文言を利用したい ポリシーや規約などの 一元管理も可能
  11. 11. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの機能と構成
  12. 12. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの構成を考える上で Sakashoの機能と構成 最も避けたいのはサービスダウン  障害の影響は最小限に押さえ込みたい 運用が始まったAPIは極力変更しない  サービスへの影響のある変更は極力抑える  後方互換製を担保する 一貫性を重視し、不整合が起こりにくい作り  1つのトランザクションで複数のデータの更新を一気に  アイテムを受取済みにすると同時にプレイヤーデータを更新
  13. 13. Copyright © DeNA Co.,Ltd. All Rights Reserved. 13 マイクロサービスがよいのでは?
  14. 14. Copyright © DeNA Co.,Ltd. All Rights Reserved. マイクロサービスとは Sakashoの機能と構成 参考: http://microservices.io/patterns/microservices.html 機能をサービスという ⼩さなコンポーネント単位に 分割するアーキテクチャ
  15. 15. Copyright © DeNA Co.,Ltd. All Rights Reserved. 一般的なマイクロサービスの利点 Sakashoの機能と構成 各サービスは比較的小さくなる ○ コンテナの起動が早くなり、開発のイテレーションが高速に 各サービスのデプロイは独⽴して⾏える ○ 各サービスを独⽴して開発可能 ○ 複数のチームが独立して動く事ができる ○ 各サービスが独立しているので開発の規模拡大が容易 障害耐性を向上させる ○ 各サービスが完全に独立しているので、影響が他に及ばない 参考: http://microservices.io/patterns/microservices.html http://www.slideshare.net/zigorou/microservices-57643957
  16. 16. Copyright © DeNA Co.,Ltd. All Rights Reserved. マイクロサービスの構成で必要なこと Sakashoの機能と構成 独立性の確保 ○ 開発、デプロイの独立 ○ 各サービスは夫々独立したデータベースを持っている 各サービスのインターフェース ○ HTTP/RESTのような同期的なプロトコル ○ AMQPのような非同期的なプロトコル 参考: http://microservices.io/patterns/microservices.html http://www.slideshare.net/zigorou/microservices-57643957
  17. 17. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoに合いそう
  18. 18. Copyright © DeNA Co.,Ltd. All Rights Reserved. 役割毎に10の独立したAPIコード群 Sakashoの構成 Sakashoの機能と構成  他のAPIへの影響を考えずにデプロイできる  ひとつのAPIが止まっても 他のAPIに影響がでない状態を保てる  API毎のコード量は少ない  サーバーリソースを細かく調整できる  省メモリ
  19. 19. Copyright © DeNA Co.,Ltd. All Rights Reserved. 実際に開発・運用してみて Sakashoの機能と構成 スタート当初はAPI数も少なく管理自体も楽だった 運用を続けていくにつれてAPIが増加 メンテナンスが大変に…
  20. 20. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの機能と構成 APIをまたいだ共通モジュール群が存在 同一トランザクションで処理するため API毎の担当者制ではない 結局少ないメンバーで運用しているので、 全員が全てのAPIを触っている API毎のコードは独立しているが、DBは共通 独立性が担保できていない 発生してしまったデメリット
  21. 21. Copyright © DeNA Co.,Ltd. All Rights Reserved. 21 マイクロサービスから モノリシックへ
  22. 22. Copyright © DeNA Co.,Ltd. All Rights Reserved. コードを統合 Sakashoの機能と構成  省メモリ  サーバーリソースを細かく調整できる  API同士の影響を最小限に 10あったAPIのうち、2つを統合済 これまでのよいところは引き継ぐ サーバーの増強などは特になし(今の構成のまま)
  23. 23. Copyright © DeNA Co.,Ltd. All Rights Reserved. 堅実な開発を目指して
  24. 24. Copyright © DeNA Co.,Ltd. All Rights Reserved.  要件定義からエンジニアが参加して仕様を作る  仕様通りに作る  仕様通りに動き続けることを担保する 堅実な開発を目剤して Sakashoの開発で重要なポイント
  25. 25. Copyright © DeNA Co.,Ltd. All Rights Reserved. 25 要件定義からエンジニアが 参加して仕様を作る
  26. 26. Copyright © DeNA Co.,Ltd. All Rights Reserved. 仕様はゲームチームと一緒になって作る 堅実な開発を目指して プレイヤーに届けたい価値を共有する ビジョンの共有 / とにかく聞きまくる 有識者の知見を集約させ、 仕様を練り上げる 必要であればCS、QA、関連チームの意見もSakashoが集約する
  27. 27. Copyright © DeNA Co.,Ltd. All Rights Reserved. 堅実な開発を目指して ユースケースをベースにした インターフェース作成  呼び出し方  レスポンスに何を含めるか  エラーのハンドリング
  28. 28. Copyright © DeNA Co.,Ltd. All Rights Reserved. 28 仕様通りに作る
  29. 29. Copyright © DeNA Co.,Ltd. All Rights Reserved. 堅実な開発を目指して 設計 実装 テスト
  30. 30. Copyright © DeNA Co.,Ltd. All Rights Reserved. 仕様書はGithubで管理 常にみんなが確認できる状態に 設計 堅実な開発を目指して 用語の定義 / 機能要件の整理 / APIのインターフェース / テーブル定義 など
  31. 31. Copyright © DeNA Co.,Ltd. All Rights Reserved. コードだけでなく仕様や設計の時点でPRして運用 しっかりと検討してから実装に着手することで 実装開始後の手戻りを減らすことができる 設計 堅実な開発を目指して 仕様や設計書の段階からチーム内でレビュー
  32. 32. Copyright © DeNA Co.,Ltd. All Rights Reserved. 堅実な開発を目指して
  33. 33. Copyright © DeNA Co.,Ltd. All Rights Reserved. SDKの実装と ドキュメント生成を自動化 フォーマットはJSON形式で定義→ 実装 (SDK) 堅実な開発を目指して
  34. 34. Copyright © DeNA Co.,Ltd. All Rights Reserved. ロジックのレビューに集中できる環境を準備  rubocopの自動化ツール  PRのフォーマット bookmarklet 実装 (Web API) 堅実な開発を目指して https://github.com/SpringMT/bitting
  35. 35. Copyright © DeNA Co.,Ltd. All Rights Reserved.  単体テスト  結合テスト  テストアプリを使った動作テスト  QAチームでのテスト テスト 堅実な開発を目指して
  36. 36. Copyright © DeNA Co.,Ltd. All Rights Reserved. 単体テスト  仕様を保証するものではなく、 あくまでDeveloper Testing 結合テスト  仕様を保証するテスト  後述 単体テスト・結合テスト 堅実な開発を目指して
  37. 37. Copyright © DeNA Co.,Ltd. All Rights Reserved. テストアプリは、組み込んだSDKから 自動的に機能を反映するので メンテフリー skackへの通知や必要な情報の ダンプなどの機能あり テストアプリはQAチームも利用 テストアプリを使ったテスト 堅実な開発を目指して
  38. 38. Copyright © DeNA Co.,Ltd. All Rights Reserved.  仕様が確定したら必ずSakashoチームが仕様をシェア  テスト観点・テスト項目の作成を行ってもらいSakasho チームとシェア  実際にテストアプリを使って検証 QAチームでのテスト 堅実な開発を目指して
  39. 39. Copyright © DeNA Co.,Ltd. All Rights Reserved. 39 仕様通りに動き続けること
  40. 40. Copyright © DeNA Co.,Ltd. All Rights Reserved. 結合テストの整備  因子・水準を作成してそれを満たすテストを書く  因子・水準QAチームも共有しレビューしてもらう 後方互換性の担保 APIのバージョニング戦略  基本的にリリースしたバージョンには手を加えない  加えるような変更をする場合は、新しいバージョンにする  新しいSDKからそのバージョンを使うようにする  古いバージョンのAPIが残り続けている現状 -> 2017年の課題 堅実な開発を目指して
  41. 41. Copyright © DeNA Co.,Ltd. All Rights Reserved.  因子・水準を作成しそれを満たす テストを書く  因子・水準はQAチームと共有し レビューしてもらう 結合テストの整備 堅実な開発を目指して
  42. 42. Copyright © DeNA Co.,Ltd. All Rights Reserved. 42 堅実な開発を目指して  googletestを使ったSDKのテスト  google製のC++テスティングFW  https://github.com/google/googletest  ライブラリのインストールはいらず、ccファイルをテストコ ードと一緒にビルドすればテストの実行ファイルができる  Xcode(XCTest)と一緒に動かせる  テスト結果を出力しやすいこと(JUnit形式) 結合テストと自動化 42
  43. 43. Copyright © DeNA Co.,Ltd. All Rights Reserved. 堅実な開発を目指して テスト結果を 通知
  44. 44. Copyright © DeNA Co.,Ltd. All Rights Reserved. 堅実な開発を目指して テスト結果を 通知
  45. 45. Copyright © DeNA Co.,Ltd. All Rights Reserved. 堅実な開発を目指して 負荷テストなど人力では難しい検証も実施  同時実行のテストによるデッドロックの検証  レプリ遅延を狙った検証
  46. 46. Copyright © DeNA Co.,Ltd. All Rights Reserved. 安定した運用
  47. 47. Copyright © DeNA Co.,Ltd. All Rights Reserved. 安定した運用のための取り組み 1. スパイクを避ける 2. キャパシティ管理 3. 継続的なパフォーマンス改善 47 安定した運用
  48. 48. Copyright © DeNA Co.,Ltd. All Rights Reserved. 48 スパイクを避ける
  49. 49. Copyright © DeNA Co.,Ltd. All Rights Reserved. 49 安定した運用 APIサーバーのslow restart  Unicornの新しいプロセス(master + worker)が全て立 ち上がってから古いプロセスを停止  一時的にプロセス数が全体の2倍になり、メモリ 使用量が一瞬増える  これを防ぐために、新しいworkerプロセスを1つ起 動できたタイミングで古いworkerプロセスを停止す るように修正
  50. 50. Copyright © DeNA Co.,Ltd. All Rights Reserved. APIサーバーのslow restart 50 安定した運用
  51. 51. Copyright © DeNA Co.,Ltd. All Rights Reserved. 51 キャパシティ管理
  52. 52. Copyright © DeNA Co.,Ltd. All Rights Reserved. 安定した運用 リソースの使用状況をシミュレ ーションするコマンドを作成。 このコマンドの結果をdailyで レポートメール送るように しており、サーバーの台数調整 の指標としている リソースの過不足判断を出来るレポート
  53. 53. Copyright © DeNA Co.,Ltd. All Rights Reserved. 53 Worker枯渇監視 安定した運用 rack-server_statusを使ったworkerの枯渇監視 Unicorn::ConfiguratorFromEnvで UNICORN_WORKER_PROCESS_NUM を変更してworkerを増やす https://github.com/SpringMT/rack-server_status https://github.com/SpringMT/unicorn-configurator_from_env
  54. 54. Copyright © DeNA Co.,Ltd. All Rights Reserved. 54 継続的なパフォーマンス改善
  55. 55. Copyright © DeNA Co.,Ltd. All Rights Reserved. 55 パフォーマンス向上のために 安定した運用  クエリ改善  キャッシュ導入  ロジック改善 やっていることはシンプル
  56. 56. Copyright © DeNA Co.,Ltd. All Rights Reserved. 56 安定した運用 56  Web API <-> DBネットワークの帯域の使用が増えた  DBに大量にデータを取りにいくようなクエリが発行 されていた  Web APIのプロセスキャッシュ導入  大量にデータを取りにいかないように仕様を変え ずにWeb APIを修正 メモリキャッシュとアプリの修正
  57. 57. Copyright © DeNA Co.,Ltd. All Rights Reserved. 57 安定した運用 メモリキャッシュとアプリの修正 57 プロセスキャッシュ導入 Web APIのコード修正
  58. 58. Copyright © DeNA Co.,Ltd. All Rights Reserved.  Sakashoはゲームのメンテナス状態や、マスター、アセッ トのバージョンなど、リクエスト毎に必ず項目がある  データが格納されたそれぞれのテーブルにSELECT分を投げる  リクエスト毎に各テーブルにクエリを投げると負荷がかか りすぎるので、必要なデータをまとめておくテーブルを作 成してそれを一回参照する 58 安定した運用 キャッシュテーブルの導入 58
  59. 59. Copyright © DeNA Co.,Ltd. All Rights Reserved. 59 安定した運用 キャッシュテーブルの導入 59 game_id version 1 1.0 2 2.0 masters game_id version 1 1.0 2 2.0 assets game_id opend_at 1 2017-02-10 2 2017-02-11 maintenances ・・ Web API
  60. 60. Copyright © DeNA Co.,Ltd. All Rights Reserved. 60 安定した運用 キャッシュテーブルの導入 60 game_id asset master maintenace 1 1.0 1.0 true 2 2.0 2.0 false game_status Web API ・・
  61. 61. Copyright © DeNA Co.,Ltd. All Rights Reserved. 61 安定した運用 キャッシュテーブルの導入 61
  62. 62. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの取り組み
  63. 63. Copyright © DeNA Co.,Ltd. All Rights Reserved. 「社内専用」という利点を活かした開発  リリース後のCS対応のサポート  プレイヤーの調査や障害対応  ポリシーなどの確認  プロモーション時の負荷対策 63 Sakashoの取り組み 機能提供以外にも 横断的にゲームチームをサポートして情報収集
  64. 64. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの課題とこれから
  65. 65. Copyright © DeNA Co.,Ltd. All Rights Reserved. 65 特定の構成に最適化させたつくりになっていた Sakashoの課題とこれから  異なる構成のゲームに対応させようとなると、 要件が複雑になり機能開発の難易度が上がる  あえてクライアントに実装されたロジックでゲームの大 部分が進行するような構成のゲームに最適化させること でスピードと安定性を優先
  66. 66. Copyright © DeNA Co.,Ltd. All Rights Reserved. 66 Sakashoのポリシー (抜粋) Sakashoの課題とこれから 原則的にゲームロジックを持たず、抽象化された機能提供のみを行うため、主に 一定のインタラクションを要求するために、クライアントに実装されたロジック でゲームの大部分が進行するような構成のゲームに向いています。逆に、 MMORPGのような、サーバ上にゲームロジックやステータスを多く持ち、クラ イアントでは主に表示と入力を行うような構成を要求するゲームには向いてい ません。 クライアント側にタイトル特有のロジックが寄ることは、サーバアクセスの少な さによるユーザ体感の向上とともに、ロジックが一ヶ所に集まることによる開発 効率の向上が図れる、という思想に基づいて各APIは設計されています。 Sakasho Users Guideより抜粋
  67. 67. Copyright © DeNA Co.,Ltd. All Rights Reserved. これまでの制約を超えて Sakashoの課題とこれから スピード感や安定した開発を優先して、特定の構成に寄せ た作りになっていたが、安定した運用が定着した今、新た なステージとして「これまで対応できていなかった構成の ゲームへの対応」を進めていく
  68. 68. Copyright © DeNA Co.,Ltd. All Rights Reserved. 68 ゲームのロジックをサーバーへ Sakashoの課題とこれから  ゲームのロジックを取り込める体制へ  ゲームチームがより「おもしろいゲーム」づくりに 集中できる体制へ ゲームチームとと一緒になって より複雑な機能を作り始めている
  69. 69. Copyright © DeNA Co.,Ltd. All Rights Reserved. まとめ
  70. 70. Copyright © DeNA Co.,Ltd. All Rights Reserved. 70 まとめ  Sakashoは社内専用ゲームプラットフォームとして安定 して稼働をつづけている  この安定稼働は、社内専用という利点と 構成に制約を設けることによって実現されている  今後はこの制約を取り払い、 より幅広いゲーム構成に対応できるよう挑戦を続ける
  71. 71. Copyright © DeNA Co.,Ltd. All Rights Reserved. ご清聴ありがとうございました

×