はじめまして。コーポレート・コミュニケーション室のid:kfly8です。
このたび、モバファクの技術ブログをはじめることになりました!日頃の開発で得られた知見など書いていければと思っています。
どうぞよろしくお願いします。
先日、研修の一環で、社内ISUCONを開催しました。ここでは、簡単に様子の紹介と問題を作るにあたって考えたことを述べます。
ソースコードはこちらです。 GitHub - mfac/mfac-isucon
課題アプリケーション
課題は、地図上にメモを残す、位置情報を使ったアプリケーションでした。具体的には次のようなことができます。
- テキストのメモを位置情報と紐づけ投稿できる
- メモの閲覧ができる
- 投稿順
- メモに紐づけられたハッシュタグと関連したメモ
- メモの位置情報のご近所
- メモに絵文字でリアクション
実装の概要について書きます。フロントエンドはVue.jsでSingle Page Application(SPA)な構成にし、地図の表示にはOpenStreetMapとleaflet.jsを利用しています*1。バックエンドで用意した言語は、PerlとGolangの2つです。サーバはConoHaのVPSを利用しました。ConoHaはシンプルな使い勝手で使いやすいですね!
初期データは、メモを約10万件程度用意し、それに紐づくリアクションを同程度用意しました。
テーマ・背景
今回、弊社で社内ISUCONを開催した際、気軽に参加しやすくする為、チームでなく、1人参加としました。また普段の開発の振り返りになるように、とっつきやすいような問題設定を考えました。具体的には次のようなことを考えました。
- 構成は簡素にする
- サーバは1台構成にする
- 迷い道を減らす為、アプリケーションの振る舞いは少なくする
- 競技の体裁を保つため、位置情報関連記述の知識によって、優劣が発生しないようにしたい
- 近傍探索の問題をまじめに(?)解く必要がないようにする→データを小さくしてしまう*2
- 参考実装では、余計なことはせず、mysql の buffer pool に載せるで十分解でした。
本物のISUCONでは避けているような「データをメモリに乗っけておしまい」「言語選択による差異が出る」という状況が起きやすい問題設定だったと思いますが、社内ISUCONだったのでそれも一興とし許容しました。
また、運営の負担を減らす為に、次のようなことを考えました。 *3
- フロントエンドの実装を共通にする
- ビジネスロジックは、SQLに寄せることで、言語移植を簡単に済ませる
- 認証なしのSPA構成にして、ベンチマーカーのシナリオ実装を
json.Unmarshal
するだけに寄せる
こういったことは運営側になってはじめて気づくことができ、面白かったです。
社内ISUCONの様子
実際の社内ISUCONの様子はこんな感じでした。
社内ISUCON初代チャンピオンの様子。
寿司の様子。美味しい。
これは今日行われた社内ISUCONの様子です pic.twitter.com/r9VvVJxn4d
— odan (@odan3240) 2018年9月11日
まとめ
- 社内で、地図にメモを残すアプリケーションのISUCONを実施した
- ISUCONは、運営側を体験することでも気づきが得られる
ISUCONは楽しいですね!
モバイルファクトリーは、技術好きなエンジニアを募集しています。
*1:ベンチマーカーが外部サービスに負荷をかけない為に、SPA構成だったことは都合がよかったです
*2:データが大きい場合のデータの間引く方法の一例はこちらを参照 2015年のYAPC::Asia のランチセッションで紹介しました
*3:運営負担を減らすのであれば、過去実装を使えば良かったかもしれないですが、魔が差しました