今年も ISUCON の予選に挑戦した。
また転職したので、社内でメン募を行って、エントリした。
チーム名は ウデムシマニア。
今回は他の2人が初参戦だったため、9月末の土曜日に会社に集まって事前練習を一度行った。
予選の内容は、isubata なるチャットサービスを複数台構成で最適化するものだった。
メンバーの役割分担は、SmartHRのテックブログに書いてある感じで作業をした。
ログをプロファイルしたり、ベンチマークのログから、画像の配信がネックであることが読み取れたので、画像を MySQLから取り出して、
各サーバにファイルとしておいて nginx でserve してということをしたりして、スコアはそこそこ伸びたものの、画像を304で返すことができずに終了してまった。
画像をnginx で返すことはできていたものの、初期のファイルの書き出しを /initilize で行っていたため、各サーバのファイルのtimestampがバラバラかつ、
ベンチマークがアップロードするファイルを、各サーバにscp する際も timestamp のコピーを忘れたので、cacheが全く効いていなかった...
複数台構成にした際に、画像を一つの サーバから配信する方法というのが、 実務ではS3に頼り切ってるため、全く手が出せなかったのも大きかった。
(goofys で S3 mountしちゃうとか考えたけど、それは、明らかにレギュレーション違反だったので、、、)
NFSは遅いしそれ以外でというのが全く思い浮かばず、、
予選突破された方のブログを読むと、nginx でやったり、WebDAVでやったり、 varnish でやったりと、やり方はいくらでもあるようだったので、明らかに実力不足だった。
あと、puma を unixsocket で 起動したものの、 nginx 側の設定がうまく行かず、結局 port を listen する方式のままだったのが悔やまれる。。
また、ベンチマークの結果のログメッセージをうまく読み取れておらず*1、それに引きづられてしまって、時間を使ってしまった。
こまかな作業ログは、こちら GitHub - meganemura/isucon7
ただし、nginx の設定をrepository に入れ忘れてる。。
スコアのログ
time |
score |
2017-10-22T13:07:23 |
3971 |
2017-10-22T13:13:14 |
2879 |
2017-10-22T13:21:50 |
3965 |
2017-10-22T14:51:32 |
5837 |
2017-10-22T15:23:30 |
5619 |
2017-10-22T15:37:54 |
5843 |
2017-10-22T15:45:28 |
6068 |
2017-10-22T15:47:19 |
3948 |
2017-10-22T15:52:07 |
6081 |
2017-10-22T15:59:50 |
10666 |
2017-10-22T16:11:26 |
18030 |
2017-10-22T16:14:56 |
13780 |
2017-10-22T16:36:34 |
22387 |
2017-10-22T16:43:15 |
22635 |
2017-10-22T16:46:38 |
23097 |
2017-10-22T16:52:13 |
24015 |
2017-10-22T17:02:05 |
23295 |
2017-10-22T17:10:27 |
25863 |
2017-10-22T17:11:39 |
29664 |
2017-10-22T17:21:13 |
28363 |
2017-10-22T17:25:18 |
26061 |
2017-10-22T17:35:08 |
40704 |
2017-10-22T17:50:36 |
39790 |
2017-10-22T17:53:05 |
32632 |
2017-10-22T18:02:46 |
31570 |
2017-10-22T18:04:44 |
34949 |
2017-10-22T18:08:33 |
31768 |
2017-10-22T18:10:40 |
35023 |
2017-10-22T18:12:13 |
33783 |
2017-10-22T18:17:32 |
18398 |
2017-10-22T18:25:05 |
23806 |
2017-10-22T18:30:03 |
20030 |
2017-10-22T18:34:14 |
37193 |
2017-10-22T18:37:00 |
36867 |
2017-10-22T18:41:14 |
30252 |
2017-10-22T19:05:42 |
33042 |
2017-10-22T19:11:29 |
35268 |
2017-10-22T19:14:03 |
33025 |
2017-10-22T19:23:54 |
36749 |
2017-10-22T19:26:25 |
41020 |
2017-10-22T19:31:08 |
38828 |
2017-10-22T19:37:23 |
40640 |
2017-10-22T19:47:06 |
34930 |
2017-10-22T19:51:07 |
41707 |
2017-10-22T19:52:53 |
54367 |
2017-10-22T19:55:38 |
45560 |
2017-10-22T20:03:02 |
52380 |
2017-10-22T20:09:49 |
49159 |
2017-10-22T20:15:11 |
47085 |
2017-10-22T20:17:06 |
36081 |
2017-10-22T20:18:40 |
39018 |
2017-10-22T20:21:15 |
52990 |
2017-10-22T20:23:55 |
41478 |
2017-10-22T20:25:18 |
44206 |
2017-10-22T20:32:40 |
45805 |
2017-10-22T20:38:38 |
55714 |
2017-10-22T20:42:23 |
39386 |
2017-10-22T20:43:40 |
45687 |
2017-10-22T20:47:03 |
42989 |
2017-10-22T20:48:23 |
47609 |
2017-10-22T20:49:36 |
39142 |
2017-10-22T20:51:03 |
43979 |
2017-10-22T20:55:37 |
37914 |
2017-10-22T20:58:21 |
41095 |

こんな感じでベストスコアとしては、 55714 となりました。
ただ、再起動時に redis が起動してなかった模様で、予選結果としては、 fail ということが最終結果でした。。。
余談
予選中にオフィスの扉が開いたと思ったら、社長がやってきた。
予選のスコアがいまいち伸びておらず、社長の相手を無下にしていたら、寂しそうに蒙古タンメン中本に行くと言って去っていきました...
おわり
今年も、力及ばず予選敗退になってしまったけど、チームメンバからは、絶対来年も出たいという気持ちを得られたので、次は予選突破したい!
予選で複数台構成の問題をつくったり、そもそものサーバのセットアップなど、運営の皆様、ありがとうございました!
isucon.net