KLabGames Tech Blog

KLabは、多くのスマートフォン向けゲームを開発・提供しています。 スマートフォン向けゲームの開発と運用は、Webソーシャルゲームと比べて格段に複雑で、またコンシューマゲーム開発とも異なったノウハウが求められる領域もあります。 このブログでは、KLabのゲーム開発・運用の中で培われた様々な技術や挑戦とそのノウハウについて、広く紹介していきます。

※電子版ダウンロードリンクは一番下にあります。

これまでに引き続き、技術書典6でKLabの有志で技術同人誌を頒布します。

KLab株式会社サークル詳細

KLabブースは、「け53」です。

新刊 KLab Tech Book Vol.4 では、以下の内容を収録しています。

  • Argument Clinic を使ってみよう
  • Rustで世界を統一する
  • QRコードマニアックス ― 数字・英数字・漢字モード
  • Unity×レイマーチングによる映像制作の実践手法
  • 自作キーボード入門
  • 機械学習APIの力でCAPTCHAを破る
  • Unityでの条件付きコンパイルシンボル定義にエディタ拡張を活用する
  • デジカメで撮影した写真の正確なタイムスタンプを推測する

KLab Tech Book Vol.4

また、前回のVol.3も少数部再販いたします。 数が少ないので、Vol.3の物理版が欲しい方はお早めにどうぞ。

今回のVol.4はページ数が増えた関係で1000円となります。 Vol.3は500円、電子版はどれも無料で以下のリンクからダウンロードしていただけます。

皆様のご来場をお待ちしております。

ダウンロードリンク

これまでのKLab Tech Bookと、新刊Vol.4のダウンロードリンクを以下に掲載します。

※Vol.4については、当日有効になります。

こんにちは、oho-sです。どうにか今回も新刊を出すことができました。

前回の技術書典3技術書典4に続き、技術書典5でもKLabの有志で技術同人誌を頒布します。

KLab株式会社サークル詳細

今回から技術書典の会場が池袋サンシャインシティになります。詳細は技術書典5のサイトをご確認ください。 なお、KLabブースは、「か49」です。

新刊 KLab Tech Book Vol.3 では、以下の内容を収録しています。

  • プロシージャルモデリングを支えるHoudiniの機能紹介
  • 2.5万円で買える3Dプリンタのススメ
  • Airtestを用いたUnityアプリの自動実機テスト
  • Rider+UnityでRoslyn Analyzersを使う
  • バーコードリーダーになろう
  • Unity Timeline Tips集
  • 物理ベースレンダラーをRust実装して、ちょっと高速化した話
  • ヘッドレスChromeでリボ払いを回避している話

KLab Tech Book Vol.3

また、Vol.2も少数部再販いたします。 数が少ないので、Vol.2の物理版が欲しい方はお早めにどうぞ。

どちらも物理版は500円、電子版は無料で以下のリンクからダウンロードしていただけます。

皆様のご来場をお待ちしております。

ダウンロードリンク

これまでのKLab Tech Bookと、新刊Vol.3のダウンロードリンクを以下に掲載します。

※Vol.3については、当日有効になります。

@hasi_t です。 http://klabgames.tech.blog.jp.klab.com/archives/1072352628.html の続きです。

hasi_tがやったことの時系列

  • 10:00-11:30 問題を把握する
  • 11:30-12:30 nginxをインストールする
  • 12:30-13:00 昼食
  • 13:00-14:40 getEventsとgetEventを修正する : getEventsからgetEventを呼ばないようにし、SELECT * FROM sheetsを1回にし、SELECT * FROM reservationsのN+1問題を対処
  • 14:40-15:30 /admin/api/reports/sales, /admin/api/reports/events/:id/sales修正 : order by reserved_at asc を削り、数値比較でソートするように修正、getEvent呼出を削除
  • 15:30-16:00 Failしているのをなんとかしようとする
  • 16:00-16:20 SQLのロックを外して、goでロックを取るように修正
  • 16:20-17:00 /api/users/:id修正 : getEventの結果の使いまわしを実装、getEventNoDetail・getEventNoSheetsを作成
  • 17:00-17:10 reservations.user_idにINDEXを張る
  • 17:10-17:40 オンメモリキャッシュのつなぎ込み
  • 17:40-18:00 おしゃべり

目立った点

nginx化

sudo yum install nginx で適当にインストールして実行ユーザを変えたのですが、
nginxのテンポラリディレクトリの権限を付けておらず、
/admin/api/reports/events/:id/sales/admin/api/reports/sales のようにレスポンスデータが大きい場合のみエラーが発生する、
という問題を起こしてしまいました。

nginxのエラーログを見たら Permission denied が出まくってるのですぐ気づきそうなものだったのですが、
全く見ておらず、それに気づかず16時までfailし続けていました。
動作が遅いからfailしているのでは?とか言っていろいろ修正していたのですが、
ブラウザでダウンロードしようとするとネットワークエラーになり、
ログを見たらエラーが出ているという状況でした。
ベンチマーカのログを見てちゃんと確認したらすぐ分かったことで、深く反省していますorz

野蛮なロック

予約/キャンセルAPI全体のロック を取りました。
これによってSQLのFOR UPDATEは不要になります。
常日頃から並列処理やロックは扱えないと公言して憚らないので、自分としては普段どおりです。(自慢できることではない)
結果的にはダブルブッキングやデッドロックといった様々な問題が未然に防げたようなので良かったです。

感想

反省点は多いですが、結果的には良かったので良かったです。
準備してもらったレポートツールはとても優秀で楽しくチューニングできました。

昨年作問を担当したので運営側の大変さはとてもわかるのですが、 特にベンチマーカがどんな実装だったのかと気になっています。
これを作るのはめちゃくちゃ大変だったのでは…

本選を楽しみにしています!

↑このページのトップヘ