Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ネットゲーム開発者がサーバレスしてみたver1.10

2,741 views

Published on

JAWS-UG 沖縄勉強会 Cloud on the BEACH 2016 勉強会の部(経験者トラック)の発表資料です。

※登壇時の資料より、口頭で説明していた部分を加筆し、冗長と感じた部分を修正しております。

Published in: Software
  • Be the first to comment

ネットゲーム開発者がサーバレスしてみたver1.10

  1. 1. @Lexues inc. All rights reserved. JAWS-UG沖縄勉強会 Cloud on the beach 2016 勉強会の部(経験者向けトラック) ネットゲーム開発者が サーバレスしてみた 1 Ver.1.10 2016.04.29 株式会社レキサス 鈴木康元
  2. 2. @Lexues inc. All rights reserved.2 とりあえず、お前だれよ?
  3. 3. @Lexues inc. All rights reserved.3 鈴木 康元 39歳 出身 茨城 → 東京 → 北海道 → 沖縄 趣味 GWave、嫁、半導体情報収集 経歴 ゲーム開発(15年)、教育系アプリ開発、 SIer(1年)、レキサス2年目 担当 ハロペアプリ開発リーダー(SPL) コトバンバン開発リーダー(SPL) ADOC-H開発リーダー(SPL) など 得意技 地味プログラム(高速化とか) 主に設計とコアな部分や難易度が高い 部分の実装担当 レキサス プロダクト企画開発部 R&D担当システムエンジニア
  4. 4. @Lexues inc. All rights reserved.4 twitter @yasuharutwi facebook yasuharu.suzuki.50 よかったらフォローお願いします。 お友達になりましょう。
  5. 5. @Lexues inc. All rights reserved.5 これまでやってきたこと ”ゲーム開発”
  6. 6. @Lexues inc. All rights reserved.6 GAMEPACKシリーズ • 主に富士通FMVシリーズへのバンドルソフトとして、Windows95以来10年以上続けて組み込み製 品として採用された。 (C) DATT JAPAN INC ※ダットジャパン株式会社より許諾を得て掲載しております。
  7. 7. @Lexues inc. All rights reserved.7 やる雀、ゴルフやり隊シリーズ • 2001年に世界初の携帯端末向け4人対戦麻雀アプリ「やる雀」を松下電器産業と共同開発。 • 翌年には毎週新しいゴルフコースが追加される「ゴルフやり隊」もS-inした。 ※ダットジャパン株式会社より許諾を得て掲載しております。
  8. 8. @Lexues inc. All rights reserved.8 ゲームパックMOBシリーズ • PC向け「GAMEPACK」シリーズのモバイル端末向けバージョンを開発。 • Bluetooth対戦、HTTP通信によるネット対戦(1stバージョン)などに対応し、対戦機能を充実。 • 2年後にはUDP通信による高速ネット対戦(2ndバージョン)に対応した。 1stバージョン アプリ本数:7本 対戦アプリ:4本 2ndバージョン アプリ本数:15本 対戦アプリ:11本 ※ダットジャパン株式会社より許諾を得て掲載しております。
  9. 9. @Lexues inc. All rights reserved.9 私が開発してきた ネット対戦ゲーム について解説していきたいと思います
  10. 10. @Lexues inc. All rights reserved.10 ネット対戦ゲーム “とにかく低レイテンシが求められる”
  11. 11. @Lexues inc. All rights reserved.11 1stバージョン
  12. 12. @Lexues inc. All rights reserved.12 普通なら 「大量アクセスに耐えられるように 設計しましょう!」 という議論がありそうなものですが….
  13. 13. @Lexues inc. All rights reserved.13 「どうせ誰も遊ばんだろう」
  14. 14. @Lexues inc. All rights reserved.14 携帯電話の利用シーンを考えると、 電車の乗り降りなど10秒以下の短時間で さくっと遊べるアプリの方が流行る。 対戦相手の手番を待ってプレイする人は 少ないだろうと予測していた。
  15. 15. @Lexues inc. All rights reserved.15 開発期間:アプリ7本(うち対戦4本) プログラマ:4名×2人月 ネット対戦のサーバ側の実装期間:せいぜい0.5人月 他にアプリそのものの実装時間や、Bluetooth対戦の 実装も必要だった。 (課金処理やランキング、ユーザー管理も標準装備) 「開発リソース?そんなものはない!」
  16. 16. @Lexues inc. All rights reserved.16 mobile client users Internet web server web server web server database database 1stバージョン構成図 サーバサイド:Javaのみ 通信:HTTPのみ レスポンス:200ms〜300ms 1秒あたりの総処理量:せいぜい200ms〜300ms
  17. 17. @Lexues inc. All rights reserved.17 Internet ソフトウェア構成 シングルプレイ ネット対戦対応 ユーザー情報 ランキング マッチング ネット対戦 サーバアプリ
  18. 18. @Lexues inc. All rights reserved.18 当初は予想通り、誰も遊ばなかった。。。 ※同時対戦数=多くて1〜2
  19. 19. @Lexues inc. All rights reserved.19 転機
  20. 20. @Lexues inc. All rights reserved.20 まさかの「将棋」アプリヒット 初のVGA端末登場
  21. 21. @Lexues inc. All rights reserved.21 「超美麗ディスプレイ」などとメーカーが持ち上げる 「VGAアプリコーナー」ができる ただし、VRAM容量は変わらず、実質1/4 当然「将棋」も余裕でメモリ不足。。。 画像をテトリスして詰め込みました。 ↓
  22. 22. @Lexues inc. All rights reserved.22 同時対戦数は20〜30に 1秒あたりの総処理量:4000ms〜6000ms ピーク時には毎日アラート ※ちなみに携帯アプリのNET対戦アクティブ率は1%以下。 つまり月額300円のサービスで2000名ほどの新規ユーザーを獲得した計算になります。
  23. 23. @Lexues inc. All rights reserved.23 お願いだから遊ばないでください (心の叫び)
  24. 24. @Lexues inc. All rights reserved.24 「意外とネット対戦て遊ぶ人いるんだな」 加えてネット対戦利用者は サービス継続率がめちゃくちゃ高い ↓ では力を入れて開発しましょう
  25. 25. @Lexues inc. All rights reserved.25 というわけで 開発コード:NET-ZERO 1ms以下(0ms)のレイテンシを 目標にして開発しました
  26. 26. @Lexues inc. All rights reserved.26 mobile client users Internet web server web server web server database database 1stバージョン構成図@おさらい サーバサイド:Javaのみ 通信:HTTPのみ レスポンス:200ms〜300ms 1秒あたりの総処理量:6秒(30名対戦時)
  27. 27. @Lexues inc. All rights reserved.27 mobile client users Internet vs server web server web server database database 2ndバージョン構成図 サーバサイド:Java + C言語(対戦サーバはフルC言語) 通信:HTTP+UDP レスポンス:0ms(測定不能) 1秒あたりの総処理量:50ns(50名対戦時) インメモリDB(10秒に1回DBへ書き込み)、オンCPUキャッシュリングバッファ
  28. 28. @Lexues inc. All rights reserved.28 Internet ソフトウェア構成@おさらい シングルプレイ ネット対戦対応 ユーザー情報 ランキング マッチング ネット対戦 サーバアプリ
  29. 29. @Lexues inc. All rights reserved.29 Internet ソフトウェア構成 2ndバージョン シングルプレイ ネット対戦対応 ユーザー情報 サーバアプリ その他 ランキング マッチング ネット対戦
  30. 30. @Lexues inc. All rights reserved.30 6000ms ↓ 50ns
  31. 31. @Lexues inc. All rights reserved.31 6000ms(30名対戦時) ↓ 50ns(50名対戦時) ざっくり比較ですが とりあえず1000万倍くらいは高速化されますた <1秒間あたりの総処理時間について> 読みたい人は読んでくさい。 対戦サーバ内で実際に処理を行った時の処理時間を総和して計算。1stバージョンではHTTPであったためアプリから常に通信が来ていた(厳密には2秒に1回程度)が、2ndバ ージョンではUDPになったため、相手のアクションを待つタイプのアプリ(麻雀、将棋、大富豪など)では10秒〜数10秒に1度しか通信が来なくなった。さらに2ndバー ジョンではゲームデータはすべてオンメモリ化、10秒に1度バックグラウンドでHDDに保存、通信処理は別スレッドでポーリング&送信するなど様々な最適化を行い、1リクエ ストに対する処理時間も数100ns(ナノ秒) 〜 数100us(マイクロ秒)レベルにまで高速化された。これらの改善により、サーバサイドの総処理時間は劇的に改善された。
  32. 32. @Lexues inc. All rights reserved.32 さて。IoT
  33. 33. @Lexues inc. All rights reserved.33
  34. 34. @Lexues inc. All rights reserved.34 アプリ側つくりました。 で、 メンテナンス情報の表示どうしようかなと
  35. 35. @Lexues inc. All rights reserved.35
  36. 36. @Lexues inc. All rights reserved.36
  37. 37. @Lexues inc. All rights reserved.37 CloudFront 写真 CloudWatch Cognito IAM Role AWSサービスへの 認証情報取得 S3 期限付きURL Dynamo Mobile Platform トークン登録 メッセージ送信要求 SNS Lambda CDN Xamarin Mobile Client User Route 53 Amazon API Gateway 超シンプル
  38. 38. @Lexues inc. All rights reserved.38 1stバージョン リスクは負いたくないですね。 (セコいのは相変わらずです)
  39. 39. @Lexues inc. All rights reserved.39 ・アプリ側は通信できなくても動作するように実装。 ・Dynamoは主キーとrangeキーでデータ引っ張ってきて返すだけ。 ・ユーザー固有のデータでもないので問題出たら削除可能。 超スモールスタート。
  40. 40. @Lexues inc. All rights reserved.40 ・費用を見積もりやすくなった。Lambdaって課金されんの?w ・Dynamoって大して安くないね。書き込みスループットが5倍て。 ・Dynamoはユーザーデータであまり編集されないものを入れるべき。 ・自動パーティション便利。 ・ALTER_TABLEいらないのも便利。メンテいらず。 ・メンテ告知を関係者と協議するコストを考えると安くなる? ・Lambdaのレスポンスは150ms〜300ms程度 ・マシンに優しく、人に(設計に)厳しいDynamoさん。多少とっつきにくい ・RDSよりは低レイヤー、低レベルなソリューション ・スループットで簡単にパフォーマンスをUP/DOWN。耐障害性が高い。 ・テーブルごとにスループット設定しなければならないのは、ちと面倒 成果
  41. 41. @Lexues inc. All rights reserved.41 先のネット対戦との比較
  42. 42. @Lexues inc. All rights reserved.42 1stバージョン:6000ms (30名) 先のネット対戦との比較 vs server web server Lambda 2ndバージョン:50ns (50名) Lambda:150ms〜300ms ソフトウェアは違いますし、本来単純比較は出来ませんので、 あくまでお遊び程度でお考えくださいm(_ _ )m ※128MB時。メモリ増やすと速くなることも。
  43. 43. @Lexues inc. All rights reserved.43 1000人来たら?
  44. 44. @Lexues inc. All rights reserved.44 1stバージョン:300秒 (1000名) 1000人来たら? vs server web server Lambda × 1000 2ndバージョン:1us (1000名) Lambda:150ms〜300ms (1000名) ※Lambdaは1000インスタンスまでオートスケール ※なので1000名来ても処理時間は変わらず
  45. 45. @Lexues inc. All rights reserved.45 Lambda、恐るるに足らず! (言いたかっただけ) 真面目な話、FPSのような即応性を求められるゲームは無かったので、サーバ内の処理時間が 150ms(Lambda)でも、1us(2ndバージョン)でも、ユーザー体験としてはさほどかわらないです。
  46. 46. @Lexues inc. All rights reserved.46 1stバージョン 耐障害性 vs server web server Lambda × 1000 2ndバージョン Lambda 1000名来られると、そもそも動かない。 アラート鳴り続ける。 サーバの不調によりときどき落ちる。 (お客様にお詫びのコイン配布) ※実際にLinuxの不具合やハードの不調と思われる現 象で落ちたことが何度かあった。 300秒@1000名 1us@1000名 150ms@1000名 基本落ちない。 (ソフト的な不具合がないこと前提ですが。) ※落ちても1/1000の問題のため、サービス全体へ の影響は少ない。ユーザーからすると通信エラーと なるだけで、リトライすれば済む。
  47. 47. @Lexues inc. All rights reserved.47 将来的にはもう少し使いたいので いい経験になった。
  48. 48. @Lexues inc. All rights reserved.48 CloudFront 写真 CloudWatch Cognito IAM Role AWSサービスへの 認証情報取得 S3 期限付きURL Dynamo Mobile Platform トークン登録 メッセージ送信要求 SNS Lambda CDN ELB EC2 SES SQS Kinesis Xamarin RDS Redshift Mobile Client User Route 53 ElastiCache Amazon API Gateway 将来的にはこれくらい。
  49. 49. @Lexues inc. All rights reserved.49 ご静聴ありがとうございました。

×