Web開発者の日常

主にプログラミング関連。たまに日常も綴ります。

バイト戦士、ISUCON4オンライン予選に参戦

time 2014/09/29

みたらし団子

こんばんは。職業は学生バイト戦士です。

9/27-28 の土日で開催された ISUCON4 オンライン予選の 2 日目に参戦してきました。

反省点を忘れないために書き留めておきたいと思います。

 

チーム「みたらし団子」の一員として、アルバイト先の社員さん (miio, rarere) と共に参加しました。

miio: MySQL, memcached と共に心中
rarere: 計測ツール導入、インフラ周り設定
わたし: Node.js アプリ実装改善

このような作業分担で進めました。

sponsored link

所見

スタートダッシュが遅れ、 10 時 20 分頃。

インスタンスが起動してから、まずアプリケーションにブラウザでアクセスしました。すると、”いすこん銀行”の文字が目に入ります。ネットバンキングのシステムか…トランザクション激しそう。なんて考えながらログインしてみると、なんということでしょう…ログイン以外の処理が無いではないですか。

つまり、ログイン処理を高速化する問題なんだと解釈し、コードを読むことに。

まさかの app.js しか無い実装。ブラウザでリクエストを飛ばすのは GET / と POST /login と GET /mypage だけ。

テンプレートエンジンが過去の予選では Jade, EJS と来たので、似たようなテンプレートエンジンなら Hogan に置き換えようと思っていたのですが、 CoffeeScript の文法を組み込んだ爆速テンプレートエンジンを謳っている ECT でした。
公式サイトにある Hogan より速いというベンチマーク結果を見て、置き換えることを断念しました。

そもそも、このたった 2 ページのアプリにテンプレートエンジンが必要あるのか、いや無い。もう、このアプリからテンプレートエンジンを駆逐してやる!と。

また、トランザクションが 1 つも無くログイン処理だけであれば、 Redis あたりで置き換えた方が良いだろうと思いましたが、そこまで一人では手が回らないので DB 周りは miio さんに任せました。

ここまで考えた所で 11 時でした。

私がやったこと

  • 静的ファイルを nginx で配信
  • nginx と node 間で UNIX domain socket
  • テンプレートエンジンを駆逐、より単純なものを独自実装
  • レスポンスから無駄な空白改行、ヘッダを除去
  • node の cluster で 4 つの worker を起動、 memcached で session 共有

出来なかったこと

  • DB 周り (MySQL チューニング)、Redis に置き換えるのやってみたかった (嵌るだろうけど)
  • キャッシュ周り、 Varnish とか
  • 計測ツールの活用、どこがボトルネックになっているのか随時確認すべきだった
  • 最初はデバッグ視点でアプリの挙動を外部から十分に確認する (早い段階でコードを読むと、コードを書きたくなり視野が狭まるので良くない)

嵌ったこと

  • X-Forwarded-For ヘッダを nginx で付与してアプリに渡すとベンチマーカーが ip mismatch エラーを吐く
  • 手元の環境でコードを書きたくて、ファイルをダウンロードするのに ec2-user のみでしかログイン出来ないと不便なので /home/isucon/.ssh/authorized_keys を作成するものの、 isucon ユーザでログイン出来ない…何故… (権限が 0600 なのは確認済み)

非常に勉強になった 8 時間でした。

同時並行でコードを修正して何度もベンチを走らせては fail させていたので、途中のスコアはよく覚えていませんが、最終的に 13000 台でタイムリミット。最終的な結果はまだ出ていませんが、全体の順位の中間くらいでしょうか。まだまだだったな…という感覚です。

来年、また参加したいと思います。その時までには、くだらないことで嵌らないよう事前に十分嵌っておき、今回出来なかったことについて経験を積んでおきたいと思います。

次回は学生最後の年になるので、是非学生チームを組んで参加したいです!誘ってください ∩(>◡<*)∩

最後に

ISUCON 運営の方々、参加者の方々、お疲れ様でした。

sponsored link

ブックマーク



アーカイブ

2017年3月
« 5月    
 12345
6789101112
13141516171819
20212223242526
2728293031