Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

社内ISUCONをオリジナル問題で開催しました

はじめまして。コーポレート・コミュニケーション室のid:kfly8です。 このたび、モバファクの技術ブログをはじめることになりました!日頃の開発で得られた知見など書いていければと思っています。
どうぞよろしくお願いします。

先日、研修の一環で、社内ISUCONを開催しました。ここでは、簡単に様子の紹介と問題を作るにあたって考えたことを述べます。

ソースコードはこちらです。 GitHub - mfac/mfac-isucon

課題アプリケーション

課題は、地図上にメモを残す、位置情報を使ったアプリケーションでした。具体的には次のようなことができます。

  • テキストのメモを位置情報と紐づけ投稿できる
  • メモの閲覧ができる
    • 投稿順
    • メモに紐づけられたハッシュタグと関連したメモ
    • メモの位置情報のご近所
  • メモに絵文字でリアクション

f:id:kfly8:20181023074258p:plain

実装の概要について書きます。フロントエンドは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の様子はこんな感じでした。

f:id:kfly8:20181023073840j:plain

社内ISUCON初代チャンピオンの様子。

f:id:kfly8:20181023103634j:plain

寿司の様子。美味しい。

まとめ

  • 社内で、地図にメモを残すアプリケーションのISUCONを実施した
  • ISUCONは、運営側を体験することでも気づきが得られる

ISUCONは楽しいですね!


モバイルファクトリーは、技術好きなエンジニアを募集しています。

*1:ベンチマーカーが外部サービスに負荷をかけない為に、SPA構成だったことは都合がよかったです

*2:データが大きい場合のデータの間引く方法の一例はこちらを参照 2015年のYAPC::Asia のランチセッションで紹介しました

*3:運営負担を減らすのであれば、過去実装を使えば良かったかもしれないですが、魔が差しました