ISUCON4予選に参加しました

isucon4の予選に@iguchi1124くんと二人で、twiskuldというチーム名で参加しました。

担当

YuZakuro - インフラ担当

井口くん - アプリケーション担当

やったこと

8:00

起床。slackのログには「[6:02 AM]訳あって寝るのが遅くなる(今から)ので、明日はやばいかも...」(原文ママ)との書き置きが。

10:00

チームメート起床せず。

とりあえずインスタンスを立ち上げて動作を確認。とりあえず点数を確認すると1400点くらいだった。

少しでも速いほうが有利かとGolangに変更しようとするが動かない。

11:00

Golangが動く。この時点で1700点くらい。

何をしてよいか全くわからないが、とりあえずnginxでキャッシュを取ることを思いついてググりながら実装するも、点数の増減は誤差の範囲(実際には設定ミスでキャッシュされていなかったが気付かず)

時間不明(たぶんこの辺り)

久留米高専のBob&Tomが、クレジットカードがなくて参加できないと嘆いていた。

12:00

golangのソースを眺めるも、一つ一つの関数が大きすぎて読む気がしない。結果、適当に流し読みする。 これが最大のミス

とりあえず昼食を取る。この日の昼食は前日の夕食の残りのカレーだった。

13:00

適当にググっていると、nginxでキャッシュを取るだけでなく、静的ファイルを処理するようにすればいいらしいことを知る。

その実装をしている途中に、nginxキャッシュを取れていないことに気づき修正。

加えて、workloadが64を超えた辺りでスコアがかなり上がることに気づき、workload128で実行 -> 11000点程度まで上がり、15位まで順位が上がる(一日通してこの時点が最高順位)

が、実行時間が長くなって不正な感じがしたのでworkloadを下げたり上げたりしてとりあえずworkloadを4に戻した。グラフには11000点程度の山が2つできている。

14:00

井口くんが起きていることに気づく。アプリケーション部分を彼に押し付けてお願いして、sqlのチューニングにとりかかる。

といっても、sqlを普段触っているわけではないのでググりながら方法を探していた。

15:00

ググっていたところ、インデックスを貼ればいいということがわかったので、login_logのuser_idとcreatedに複合インデックスを貼った。

スコアが2倍くらいになる。

15:00-17:00

適当にインデックス貼ってみたりとか、nginxの設定見なおしてみたりとかするもよくわからない。(あとアプリケーションを見ているであろう井口くんの方も動きがない)

時間浪費タイム。集中力が切れてスマブラしてた。

17:00

順位表凍結。

twitterで学生枠3位であることを知りやる気を出す。

が、30分かけたがやはり何をやっていいかわからなかったのでworkloadのチューニングをする。

17:56

workloadを96まで上げて最終提出。

結果

一日目終了時点で学生3位(一日目全体では17:00の時点で55位ぐらい。

反省

  • コードをもうちょっとしっかり読んでググっていれば、何かしら改善できることは合ったはず。
  • 上記も合わせて、表面的ですぐできる改善ばかりを行ってしまった。インデックスを貼ったあとくらいに、残りの時間全部を使ってコードの方の調整をやるべきだった。
  • アプリケーションを井口くんに押し付けて、自分は一切何もやらないのは良くなかった。言い方は悪いが、彼が何もできないのはわかっていたので積極的にそちらのチューニングもするべきなのはわかっていたはず。

感想

  • 思ったより戦えた。何もできずに終わるかと思ったが、少しくらいはチューニングできたし、結果も学生3位と思っていたよりも良かった。
  • やはり知識の不足は痛感。終了後にチャットでいろいろと教えてもらったけれど、初めて聞く単語すらかなり合った。
  • そもそも飛び込みで参加してなんとかなるようなコンテストじゃなかったです。次回は学生枠から余裕で本選に行けるくらいまでは勉強したい。
  • 井口くんは実力不足を私以上に痛感したはずなので(この夏休みで何回目だろうね。頑張れ若者)、これからどんどん勉強してほしいと思う。吸収は私より断然早いし、彼の今後に期待。
  • 普段はSRMAtCoderみたいなコンテストに出ているけれど、こういうコンテストも楽しいなと思った。今まで避けていたインフラ系にも興味が出てきたし、運営の皆様には感謝!!