ISUCON6参加してきました!
土曜日参加でした。私は翌日温泉につかり、サウナと水風呂を往復し、予選二日目も終わった後、TLをみながら休憩所でコレを書いております。
これポストしたらもう一度サウナに入ろうとおもいます。
ということでやってきました。結果は予選落ちです!!最終得点72018点でした。
このエントリはたんなる日記なので、技術的考察などはございません!!
今回の布陣
今年は誰と出るか全く考えていなかったのですが、moznion氏の提案により突然スッときまりました!
チーム:「[=======> ] 80%」 メンバー: 私(uzulla)、sugyan、moznion
とても良いチームでした!
役割的には、私がインフラ(Azure、サーバー、ミドルウェアなどアプリより下、ベンチマーカー等)他二人がロジックやコードという感じです。
練習沢山しましたよ
三人がリアルに顔を合わせての練習は計2回。二週間前と一週間前に本番同様のスタイルでやりました。
これは実際に成果というか、体感のできる手際の上昇を感じました。そして単純に私は楽しかった(楽しいISUCONを3回やったようなものなので)。
この三人で一緒に仕事とかをしたことはないですが、何度も練習することでチームワークや手順で不安になることなく当日開始でき、無駄な作業はかなりすくなかったと思います。後述の通りスタートダッシュはよかったので、これは完全に練習の成果ではないでしょうか。
当日の記憶
私はうっかり朝4時に起きてしまったので、日の出前からつくっておいたタレを確認したり、イメトレをしたり、チートシートを整理したりしていました。
今回、できるだけ普段の環境をつかいたいとおもったので、MacbookProより重い普段つかっているLibretouchというフルキーボードとマウス、パームレストなどをもっていきます(モニターは現地で貸して頂いた)
少し早めの電車で戦場にむかったところ、遅延が発生していましたが早く出たので無傷。早めに行動することは重要。
前述の通り練習はしっかりやっていたので、特に当日段取り設備の用意ができた後はレギュレーションを何度も読んでいました。
10時になったら即デプロイ。今回デプロイがディスクイメージでなくansibleからの生成なので、最初はいってデプロイ前のコードがどこにあるのか探し出すのが最初の仕事だった気がしますw
スタートダッシュはよかった!
我々は正午ごろに最初に5桁をだして一位になりました。その後じわじわ追いつかれてきたものの、sugyan氏が「はあっ!」といったらギュン!っとひきはなし、その後さらにおいつかれそうになったらmoznionが「フンッ!」とやったらまた引き離すという、実にアツい展開でした。
スタートダッシュは私の担当箇所も多いので練習の成果もあり、滑り出しはかなり良い感じに動けたと思います。
この時、「やべえ!俺等いけるんじゃね!!??ISUCONたのしい!!!!」と全員で盛り上がっていたのをおぼえています。
しかし…
午後13時半くらい?に抜かれた後、攻めあぐねて一度かなり点を落とします。まあ戻せば元の得点に戻るのでそこまで焦ってはいなかったのですが、ここからはあまりのびる事ができませんでした。
色々とバクチ((c)moznion)を打ったりして大きく書き換える事ができる箇所を見つけても、なかなかそれが得点へのインパクトにつながりません。この時トップは10万点をこえており「これはどうやってんだ」という空気が蔓延します。
我々がやらなければならないことは「正規表現の暴力を撲殺」だったわけで、それは認識できていました。しかしこれに対する良い(そして納得できる)解決策を決断できず、ISUCONのセオリー通りに「結果をキャッシュできないか」「ワーカーと分離してみるのはどうか」などをおこなっていました。
今思い返せば、それでは正規表現を撲殺できているわけではなかったのですね…、ムムム。
無念
ということで、その後あまり得点はのびることはなく、コードをもどし、色々な小手先のテクニックを駆使してじわりと小銭を稼ぐ((c)moznion)感じで、私はワーカー数の調整や、いらないものを切り離すみたいな地味な作業を祈りながら繰り返していました。後は細かい罠(というか、修正を誘う箇所)をみつけては一応つぶしていく、みたいなことをしていましたね。
頭をひねり、コードを書く二人をみながら注意深く再起動を何回も繰り返し、問題がでないことを何度も確認しました。これは当然得点には大きく貢献できないので、段々と(なにもできないけど)焦りを感じます。
そうした中、17:43くらいにその日ベストの72000点がでて、このまま悪あがきしてなにか壊れるとヤバいのでそこで試合終了となりました。
三人で「くやしい!くやしい!ワンチャン!ワンチャン!」といいつつ、ISUCONでこんなに真剣に悔しく、15時くらいまではまちがいなくトップグループにいたわけで、個人的にはまけたものの達成感もありましたね…(志が低いと怒られそう)。
その後呑み会
他の土曜日参加者のYappoさんとkamipoさん、lestrratさんとmacopyさんとpapixさん、我らチームで吞みに行きました。
yappoさんkamipoさんの「解法」について色々きいて「え〜ッ」「なるほど〜」が半々くらいでした。
また、lestrrat氏のチームはgoをつかっていて、それ由来で大変な所もあったようで我々のPerlはわりと恵まれていたのかもとおもいました。
ここらへんで聞いた様々な事は他の上位チームとかけ離れた解法ではないとおもうので、いつかよい解説記事がでてくれると思います。
私の担当箇所の感想
私は足回りとかベンチマーカーの世話とかそういうことをやっていたのですが(いわゆるインフラチームみたいな)、もうここらへんの作業は定型文になりつつあります。そこは十分に理解していたので、何度も何度も素振りをして、当日は足をひっぱらないことに専念しました。
タレをつかってセットアップはすぐにおわったし、TcpdumpでパケットみてIf-Modified-sinceがあったのでそこらへんはExpireを30日くらいにしてKeepAlive有効にしたらほぼ一切消滅しました。ここまではよかった。
ただ、やっぱり後半には「得点を稼ぐ」という意味では時間が余ってしまうので(ベンチマーカーを回したり、監視をしたりというのがあるので、細切れの時間にはなってしまうのですが)、やはり私も積極的に「急所」をみぬいてそれをシェアできる必要があるなと痛感しました…。
そして、二人が戦っているhtmlifyの解決策は私には思いつかない所でした。残念ながらあれはやったことがない事だった。
しかたなく、マイクロサービスであるisupamについて、パケットをみて「こいつもっと良い叩き方があるのでは、間にリバースproxy的にnginxをはさんでキャッシュできたりしないかな?」などと調べたりしていましたが、これは間にあわず。
最終的には二人が戦っていたhtmlifyがやはり一番の敵ということになったのですが、上述した通り、私にはあれを上手く解決するための策が思い浮かばないし、チームメイトに良いサジェストもできなかった自分の知識、スキル不足に悲しくなりましたね…。
次に向けて
3回やってISUCONのスタートダッシュは慣れました、次も同様に日々のキャッチアップと素振りをすればスタートアップに迷惑はかけないとおもいます。 (強いて言えばサーバーのコードを手元にもってきて手元でうごくようにする素振りがもっと必要ですね、これは精進します)
また、今回はSlack連携とかの遊びも多少できましたので、次回はさらになにか楽しい事できないかと思います。(自分達の分だけでも、グラフを書くとか)
そして、上にも書きましたが、次はもっと良いロジックが提案できるように勉強し、自分の脳みそをストレッチして望みたいと思います。 まあ、なかなかそんなカンタンにはいかないだろうし、開催一ヶ月前からの練習とかでなく、普段の鍛錬がもっと必要でしょうけどね…。
感謝
ISUCON運営のみなさま、本当にありがとうございました!大変に楽しいイベントでした。
そして、特にチームメイトのsugyan氏とmoznion氏、一緒にやっていただいてありがとうございました。sugyan氏には元優勝者と一緒にやるという経験を頂きました、これは本当にかけがえがないです。moznion氏は3回目ですが、今回も誘って頂いたし、色々なサポートもしていただきました。
私は「実際の所、なにも成し遂げていない人」と言われる事もある人間で、残念ながら今回もそうなってしまったのが大変に残念ではあります。 しかし、めげずに(ISUCONにかぎらず)より一層精進し、なにかを達成し、さらになにか恩返しできればとおもっています、がんばります。
イケてるメンバーのエントリ
関係のない宣伝
2016年12月3日にBuildersconというテック系カンファレンスが開催される予定です。
https://builderscon.io/builderscon/tokyo/2016builderscon.io
「buildersconは「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭りです。」
ついにCFPもはじまりました
https://builderscon.io/builderscon/tokyo/2016/sessions
TwitterやBlogを是非フォローしましょう
公式Twitterはこちらです。