isucon4本戦で惨敗してきた #isucon

チーム「ご注文はPHPですか?」として @matsuu @do_aki ご両人と共に参加してきました!利用言語はGoです。 個人的には4回中3回目の参加になります。 (去年は自分の予選が結婚式、本戦が同僚の結婚式で日程的に無理でした)

2年ぶりのISUCONをとても楽しみに意気揚々と参加したところ、、、、 結果はランク外。ちーん。

ISUCON4final

最後まで表示されてるピンクが我らです。
今回は見せ場なし。

最終結果としては、6桁いってない3位以下のチームはなんというかウーン...という感じですね。。。

作業風景はこんな感じ。 1人1台のPCに予備機持ち込みが2名、加えてipadにもデータを表示してました。 そんなわけでPCが5台あったわけなんですけど、利用OSはMacOS, gentoo on MacOS, gentoo, Ubuntu, Windowsでした。

IMG_20141108_105718542

↓こういうの買って持っていくべきだったかなーとも思ってます。ちょっと画面小さかった。小さいディスプレイ集めても大きなディスプレイには敵わない。

とはいえ他の時に使わなそうだし3万円渋った。イカンかった。

さくせん

今回のお題は動画広告配信アプリ。 とはいえアプローチは変わらんだろうということで腰を据えて対応を開始しました。

具体的には事前に作っておいたツールを使ってアクセスログを集計しながら、 ポイントを絞って重たいものから順番に対処していきました。 予選の時は私がPythonでちゃちゃっと作ったのですが、 予選〜本戦の間に @matsuu さんがgoで高機能なものに作り変えていたのでそれを活用。

割と簡単に動画配信で帯域使いきってそこから先はいやーな空気が続き、 ボトルネックじゃないとわかっている動画以外のURLへのアクセスを調整したりする時間が続きました。 途中-27000という変なスコアをたたき出しつつ試行錯誤するも、ここでどうにも対処しきれず。

最後は修正が中途半端になり終了。悔しい結果に終わりました。

はんせい

今回はクライアントサイドキャッシュという基本的なところに気づかなければならなかったのが最初のハードルでした。 懇親会でも何人かと話したんですけど、現実にはあんなにキャッシュ効くこと無いだろうしローカルIPとグローバルIP使って配信とかも無いのですごいベンチマークっぽいなって感じはしたのですが、とはいえ基本的なところに気づけないのはなんとも情けない感じで完敗です。

途中でいろいろ試行錯誤して動画をnginxでキャッシュしてみたり、redisではなくファイルに落としてみたり、assetを配信するサーバはアプリ内で指定できるのでこれを恣意的に比率を変えてみたりしたのですがどれもイマイチ。 ずーっとアプリを触っていたからといってアプリがきちんと読めていたかというとそれも微妙で、goだとredisとの接続をinit()でやってるので、起動順序によってどうもredisに繋がらなくなってエラーが出たりしそうなことに終了直前に気づいてウワーンとなったりしてました。failにならなかったのは、redisが1号機でアプリが3号機だったからでしょうか。謎です。

帯域サチって嫌な雰囲気になった後、他チームで高スコアが出た時に全作業を止めて考えなおすべきでした。 私のファシリテーションの失敗です。チクショー!!!

ベンチマークが「回る」ってのも現実のWebサービスとは違うところで、そのへんの感覚をつかむためには自分で一回書いてみないとダメかなーという気もしています。

まとめ

  • 運営おつかれさまでした!
  • ISUCON楽しい。大人になっても負けて反省して成長できてよい
  • 基本がだいじ。持ってる知識とか技術の量ではなくて使い方がだいじ
  • お題が尽きたら一緒に考えますので続けていきたいですね
  • 奥さんからは「賞金で掃除機とScanSnapと…」言われていたのですが叶わず。懇親会で余ったALL FREEを大量に貰ってきたのでそれで勘弁してもらおうと思います
Event 

See also