ISUCON12予選に参加した
初めてISUCONに参加し、予選敗退はしたものの沢山の学びと気づきを得ました。
チーム名:赤ちゃんsomeday(人数:2人)
最終スコア:12810
率直な感想
勉強不足!!
もう何もわかっていないので、一緒に参加した方に頼りっきりでした。。。不甲斐なし。。
でも楽しかった。ISUCON参加者のDiscordは終わった後すごいワイワイしてて、いい意味で文化祭みたいだった本当。
※特に勉強不足だったと感じだこと
- 圧倒的なSQL知識不足
- N+1などの解消
- インデックス、ORDER BYやLimit等のMySQLなどの挙動についての知識
- バルクインサートについて
- flock...
- Redisの実装方法
- こいつはそもそも実装したことない
- nginxの知識不足
- SQLと同じくらいでかい
- JWTの知識不足
- 名前と仕組みは軽く知ってる程度
- SQLiteとか使ったことなかった。。。
- マルチテナントのアプリケーション知識
- 今後実装予定だった。今は何も知らない。
- TCP/IPの知識不足
- SSL/TLSの知識不足
(もう何もわかりません)
ISUCON12 予選問題
マルチテナンシーWebアプリケーション isuports
SQLiteが鬼門でしたね。。
使った言語/ツール
- go
- Ansible
- qt-query-digest
- alp
- pprof(練習だけ)
事前準備
2ヶ月前くらいから過去問を解く。
Ansibleを使って諸々のインストールとかnginxの設定ファイルをサーバーに1コマンドで置けるようにしてた。
→ 本番ではそこまで活躍せず
もっと過去問解いたり他の勉強したりする必要があったけど、後の祭り。
序盤
最初にレギュレーションやマニュアルを二人で確認する。
その後一緒に参加した方がデプロイツールを元々作ってくれていたため、その辺りをお任せしてミドルウェアの確認やAnsibleを実行して土台を準備したりスキーマ確認したりした。
バージョン管理化には、webapp配下のアプリケーションのみ入れました。
(これが後で痛い目を見る)
中盤
Ansibleでnginxの設定ファイルを上書きしてしまい、SSLの設定が消えました。。
バージョン管理していれば戻せたのですが、管理外だった&その時点であまり点数が上がっていなかったためもう一度インスタンスを立て直し設定し直しました。
Ansibleは一部のみに使用することに変更。
またローカルの開発環境構築に時間がかかってしまったためローカルを諦め、実サーバーで作業することに変更。
N+1の修正やバルクインサート対応、idをuuidから乱数に変更するなど修正。
この辺りから点数が動き始める。
尚、私はIndex関連をやったり設定ファイルやツールのインストールして終わる。無力。
後半
直前までN+1問題の対応、またgoのデーモン化、環境変数の設定をする。
チェックリストを作成してたのに関わらず、デバッグログ出力をoffにするのを忘れる。。。
競技終了ギリギリまで作業し、結局作業を止めたのは1分前でした。
デーモン化できててよかった。。
まとめ
圧倒的な知識・経験不足でしたが、ISUCONの楽しさは実感したため知識をつけるとより楽しくなるのだろうと勉強欲が出てきました。
「推測するな、計測せよ」の言葉通り計測しようと思っていましたが、予選本番では想定通りにはいかず推測で進めていく場面がありました。SQLiteなどをなんとかする時間と推測で修正することを天秤にかけ推測を選んでしまったのですが、今の実力でなんとかできる気はしませんでした。。
来年も0次予選(予選出場応募戦争)が予想されますが、皆さんまた対戦よろしくお願いします!!
Discussion