isucon6予選2日目に参加し通過できました
@Konboi、 @tkuchikiとチーム流れ弾としてisucon6予選に参加しました。
使用言語はGoで、役割はオペレーション全般をtkuchiki、アプリケーション周りをKonboiと自分という分担で進めました。
謝辞
運営の皆様、準備/運営をありがとうございました。
非常に濃い時間を過ごすことができました。
引き続きよろしくお願いいたします。
やったこと
事前準備
そもそもGoをちゃんと使ったことがなかったので「A Tour of Go」をやったり、『スターティングGo言語』を読んでGoの基礎を学ぶ(8月中旬)
『Go言語によるWebアプリケーション開発』を読みながら写経する(8月下旬)
pixiv-isuconを各自で解いて素振り(pprofの使い方を覚える)
pixivさん問題の公開をありがとうございます
alp便利
問題を解くにあたって以下の記事も参考にさせていただきました
当日
時系列のログはチームメンバーが詳細にまとめてくれているので割愛。
isudaとisutarの結合
結論から先に書くと最終的にこの変更は入れていません。
結合の対応を入れた後にベンチを回してコケたので、その修正を進めていたのですが、後にKonboiのhtmlfyのキャッシュ対応が入り、そちらで一気にスコアが伸びたので、そこを安定化させることにチームメンバー全員が振り切ったためです。
一応やったことを残しておきます。
初回ベンチを回して/が遅いことが分かったのでKonboiに/部分のコードを見てもらいつつ、その間に自分はisudaとisutarの結合をすることに
まずはローカル環境作り
DBの構築とisuda, isutarのローカルビルド
isupamがないと怒られて焦りましたが、mac用のisupamバイナリが用意されており助かりました
2つに分かれているDBをひとつにして、その後コードもisudaに結合するという方針でisutarのDBをisudaに結合
isudaのAPIにアクセスしている部分をDBのデータ参照に切り替えて、ローカルでビルドできることを確認
PRをtkuchikiに見てもらいつつ、手元のコードをデプロイ
- tkuchikiが手元のコードをrsyncして再ビルドしてくれるデプロイコマンドを用意してくれていて助かりました
デプロイ後、ベンチを回したらコケたので原因を調査(この後、Konboiの修正が入る)
チームメンバーのサポート
tkuchikiが対応してくれたPRをレビュー
Konboiがperlでredisに書き込む際にハマっていたので一緒に調べる
キーワードの追加・削除時にキャッシュをどうしようか考える(結局いい案浮かばず)
tkuchikiがsystemdの依存関係にハマっていたので一緒に調べる
感想
なんとか予選通過できたものの正直なところ運が良かったとしかいいようがありません。
15時過ぎまでずっとスコア0だったので、不安と焦りでいっぱいでした。
キャッシュ対応が入ってスコアが一気に伸びたものの、キャッシュの整合性は取れていない状態だったので「何でこれで通ったんだろう」という疑問が最後まで残っていました。
また、ちょっとした修正をするのも時間がかかってしまい自分のGoのスキル不足を痛感しました。
本戦では二人の足手まといにならないように、しっかり準備をして臨みたいと思います。
Konboi、tkuchikiありがとう。本戦もがんばりましょう!
予選後の私
isucon予選で運を使い果たしたのか、この一週間非常に運が悪いです。
予選の翌日から食中毒になり、ひたすらお腹を壊し続けています(今も完治したかは怪しい) 原因はおそらく予選2日前に食べた鳥刺し。。。
予選中に発症しなかったことが唯一の救いです。
また、おかゆを買いに近くのスーパーまで歩いていたら、鳥のフンの直撃をくらうという奇跡的な出来事が。。。
「これが本当の流れ弾だなぁ」なんてことを思いながら人生の厳しさを感じました。
同じ過ちを繰り返さないためにも食事管理をしっかりして本戦に臨みます。