creative mode

映像とwebが好きです

読書メモ:ゲーム開発が変わる!Google Cloud Platform 実践インフラ構築

目的

ゲームにおけるクラウドアーキテクチャの実例を知り業務に活かす。

感想

書籍としてまとまっている情報はなかなかないため、ゲームインフラの全体像を掴むのには良いと思いました。 ゲームと言っても、事例は一番クラウドサービスと相性が良いモバイルゲームが中心です。 実例を知るという目的は達成できたと思います。ただ、事例紹介とGCPの機能紹介が大半で内容は薄いかなと思いました。

GCPの概要や他のクラウドサービスとの比較が手厚く書かれているので、GCPを検討している人は参考になると思います。 逆に業務で既に使っている人は新しい知見を得られにくいかもしれないです。

また、2016年の本なので内容は古いです。今はいろんなゲームの実例が資料として公開されているので、補完すると良いと思います。

メモ

ゲームインフラに求められる要件

前提として以下の要件を満たす構成が必要になります。ポイントは柔軟性。 - サーバーに求められる性能が高い - 大規模なゲームだと数百台のサーバ - サーバ管理の仕組みづくりとインフラのコストをいかに抑えるか - ピーク時と平常時に求められる性能の差が大きい - イベント更新時にアクセス数が跳ね上がる - インフラリソースの稼働率を最適化する必要がある - 流行り廃りに応じて規模を変更する必要がある - 爆発的にアクセス数が伸びることがある - ユーザーに飽きられ、縮退していく時もサーバリソースを無駄にしない - 性能の需要予測が難しい - 熟練のエンジニアでもサーバーリソースの予測は難しい - サーバー増減は柔軟にできるように

GCPが他のクラウドサービスに比べて有利な点

一般的なゲーム用途では以下のメリットを得られる場合が多いようです。 特に、料金体系がゲームインフラに合っているのが良いですね。

  • Google専用の通信網
    • GCPの根幹をなすものであり、一番大きなメリット
    • リージョンを越えたプライベートネットワーク
    • 高速かつ安定
  • ロードバランサ
    • 事前準備やウォーミングアップなしで秒間100万リクエスト以上処理可能
    • IPベースのグローバルロードバランシング
  • VM
  • ライブマイグレーション
    • メンテナンスが発生した際にインスタンスを稼働させたまま、同一ゾーン内の別サーバへ自動的に移動してくれる
  • 料金
    • 柔軟に増減させる場合はコストが優位になりやすい
  • ユーザビリティ
    • ユーザ管理にGoogleアカウントを使用するため管理が楽
    • gcloudコマンド、Google Cloud Shell、メタタグなど使いやすいツールが揃っている

GCPのゲームインフラユースケース

数あるサービスの中で特にゲームインフラに使われているサービス達

  • 実行環境
    • Google Compute Engine(GCE): 一般的に使われるIaaS。ベンダロックインもそんなに心配しなくて良い。
    • Google App Engine(GAE): HTTP(S)通信をベースとしたゲームに使う。リアルタイム性が強い通信以外で使う。
    • Google Kubernetes Engine(GKE): まだ普及していないと書かれているが、現在は主流になりつつあるか。
    • 本書には書かれてないが、小規模なゲームならFirebaseやCloud Functionも候補になるか
  • ストレージサービス
    • Cloud SQL: MySQLと互換性のあるマネージドRDBMS。マスタデータはこれで良さそう。
    • Google Cloud Storage(GCS): 静的コンテンツの配信
    • Google Cloud Strage Nearline: リソースやデータのバックアップ
    • Cloud Datastore、Bigtable: スケーラビリティの高い、NoSQLのマネージドサービス。性能で使い分ける。今だとここにSpannerも入るか
  • ネットワーク
    • ロードバランサ
      • HTTP(S) Load Balancing(HLB):L7でのロードバランシング
      • Network Load Balancing(NLB):L4でのロードバランシング
    • キャッシュサービス
      • HLB(Cloud CDN)やGCS、GAEでエッジキャッシュを利用できる
      • エッジキャッシュは細やかな制御ができないためCDNを100%置き換えるのは難しい
      • GoogleCDNベンダが協業しているため、品質の向上やコストの割引が見込める
  • データ分析
    • BigQuery: ユーザーのログ分析。Treasure Data、Amazon Redshiftが類似品
    • Cloud Pub/Sub:メッセージングサービス。fluentd、Amazon KinesisApache Kafkaが類似品
    • Stackdriver Logging: ログデータの分析やモニタリング
    • Dataflow:大規模データ処理。Hadoop、Sparkが類似品

その他のゲーム事例

最近は色々なゲームインフラ事例が公開されているので、参考になります。

Google Cloud Next Tokyo 2018

19日、20日Google Cloud Next Tokyoに参加しました。

Google Cloud Next Tokyoは、Googleクラウド製品の事例や新機能を解説するイベントです。

詳しくは後でまとめるとして、GKE、Spanner、Stackdriver活用事例が参考になりました。Cloud Auto MLやGoogle Map PlatformみたいなGoogleならではのサービスも試したいですね〜

今はマイクロサービス化がトレンドになっているので、適材適所にマネージドサービスを使っていく感じになりつつありますね。

とても良い刺激を受けたイベントでした。また来年も参加したいです。

Firebaseハンズオンに行ってきた

repro-tech.connpass.com

最近触り始めたFirebaseのハンズオンに行ってきた。
webとiosAndroidのコースがあり、自分はiosを選択した。

ハンズオンの内容は、こちらのCodelabを進めながら、分からないところを相談するという感じ。(なぜか、Chapter 6のインデックス貼ってないときに出るはずのエラーがでなかった。とりあえずは動いたので、手動でインデックスを貼って対応した。)

Firebaseには約20の機能があるが、今回はほぼFirestoreがメインだった。

Firestoreはざっくり言うとサーバーレスでオートスケールするNoSQL。
簡単なアプリだったら、クライアントコードだけで開発が完結することもあるし、ロジックを仕込みたいときはCloud Functionを使うことで大体カバーできそう。

RDBMSとは使い勝手がかなり違うが、その違いを理解して使えば開発効率はかなり高くなりそう。

当たり前だけど、データ更新頻度が高いオンラインゲームなんかは転送量に気を付けて設計する必要はある。

ふりがなプログラミング

前に話題になっていた、この2冊を読んでみた。

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

目指したのは「究極のやさしさ」

表紙に書かれたこの謳い文句は伊達じゃなかった。

この本は登場する構文や関数、記号に至るまでコード全てにふりがなをふり、さらに処理の流れを日本語の文章にした読み下し文が添えてある。これがとても分かりやすい。

JavaScriptPythonも使ったことがあるので、興味本位で読んでみたら「なるほど、そういうふりがなの振り方をするのか」と感心した。

自分がプログラミング初学者の時は記号の意味が分からずに苦労したので、構文を覚えることに関してはこの本が心強いかもしれない。

もちろん、初心者がつまづきやすいポイントはふりがなだけではなく図解もされているため単純に入門書としておすすめ。

他の言語でも応用できそうな手法だなーと思っていたら、既にExcel VBA版があった。

ステップアップとして、いろんなサンプルコードにふりがなを振ってみると良いかもしれない。あと、アルゴリズムかな。

「オンラインゲームのしくみをしってみよう」というタイトルで発表してきました。

こちらのイベントで発表しました。

supporterzcolab.com

スライドはこちら。
オンラインゲームの仕組みをしってみよう - Speaker Deck
(埋め込みだと非常に見にくいのでリンクで)

勉強会、参加するだけじゃなくてたまには発表しないと… 懇親会で参加者の方からいろいろ意見や質問を頂いたので、ブラッシュアップしていこうと思います。

PvPゲームのマッチングシステムメモ

対戦ゲームでは一方的な試合ばかりになってしまうとつまらない。 プレイヤーは実力の拮抗した白熱したバトルを求めているため、実力の近いプレイヤー同士で戦うための仕組みが必要。

以下に、よく使われる手法をメモ。 いずれも厳密にマッチングさせようとすると待ち時間が長くなってしまうので、ある程度マッチングしなかったら条件を緩めたほう

レベル制

単純にプレイ時間応じて上がっていく場合、実力とレベルが見合わないことが多くなる。 リリース直後はみんな同じなので、最初はあまり意味がない。 PvPは大抵レートなのでよりもCOOPで使われる。

レート制

試合の勝ち負けででレートが増減するタイプ。 ある一定まで上がれば、実力に応じたレートになる。 リリース直後はみんな同じなので、こちらも最初はあまり意味がない。

直近の試合の結果を使用

負けた人は負けた人同士 勝った人は勝った人同士で対戦。

リアルタイムな強さをマッチングに反映出来る。

その他の様々なプレイデータを使用

上記以外のプレイヤーの行動や装備等を元にマッチング。 マッチングロジックや扱うデータが増えてしまい、処理が重くなる。 非同期でマッチングテーブルを作っておいて、実際にマッチングする際にそのテーブルを参照するなどの工夫が考えられるか。

vimconf2016に行ってきました

vimconf.vim-jp.org

vimconfに行ってきました。今回が初めての参加です。
以前からvimをサーバーで使っていましたが、最近はmacでもvimをメインのエディタとして使うようになって来たので丁度良い機会に参加しました。
ちゃんと触り始めて3ヶ月ぐらいだけど、分かりやすい発表が多かったのでなんとかなりました。
以下は全体を通した感想です。

日本のvimユーザーの多さ

発表の中でvimのpatchの開発者の多くが日本人という話がありました。確かにプラグインを作っている方も多いですし、ググればvimの情報が日本語でわんさか出てくるのでvimを使っている人は結構居るのかも。

このイベント自体、100人ぐらいの参加者が居たのも驚きました。
学生や新卒の方も結構居て、聞くところによると若い世代でvimが流行っているらしいです。
atomやsublimeTextじゃないんですね。
ちなみに大学でエディタ(emacs)ハラスメント?を受けてるみたい人が多いみたいです。(なぜかそれを乗り越えてvimを使う)

あと、PythonGolangユーザーが多いのも印象的でした。

プラグインを使うだけじゃなく、自分で作る

コンテンツの多くが開発者によるプラグインの紹介なのですが、機能紹介だけでなく、プラグイン開発の知見を知ることができ面白かったです。
自分はまだプラグインを漁る程度ですが、便利そうな機能は自分で作ってみるというのも良いですね。

ちなみに、プラグインのアイデアとして他のエディタやIDEを使ったときに便利だった機能を参考にすることもあるようです。

終わりに

色んな人のvimrcのこだわりを聞くの楽しい。
vimconfのスポンサー募集してるって言ってたけど、どんな会社がスポンサーになるか気になる。