学生版ヒダッカソン サーバーサイド編 に参加してきた
Noahです。
結構前の話なのですが、サイバーエージェント主催の学生版ヒダッカソン -サーバーサイド編- に参加してきました。
所感
2日に渡って開催され、初日はサイバーエージェントの社員さん方のLT、メインとなる2日目はISUCONのようなパフォーマンスチューニングをしてスコアを計測し、そのスコアの高さを競うものでした。
前日のLTでは、パフォーマンスチューニングする際にボトルネックを見つける方法など、翌日に活かせられる内容ばかりでした。
2日目では実際にパフォーマンスチューニングをしていくわけですが、MySQLにINDEXを貼ると途端にパフォーマンスが上がり、その他細かい変更などをすると午前中には1, 2位まで浮上しました。
が、午後になるとこれ以上のボトルネックを見つける方法がわからずに右往左往してしまい、そのうちにも徐々にランキングは下がっていき、N+1の箇所を発見するも解消まではできず。
ついに終了1時間くらい前にメンターの方からDBに負荷のかかっているボトルネックの探し方(mysqldumpslowなどを利用し、スロークエリを探し出す方法)や、原因がわかったらその問題に対してよくやる解消方法などを教わり、最終的には5位でヒダッカソンを終了することができました。
終わってみて
パフォーマンスの向上に計測は不可欠であり、基本的なことである 推測するな、計測せよ ということがとても大事だということがわかりました。
コードを読む、というよりは(今回の構成では)主にMySQLに負荷がかかっていたので、そちらを計測し、ボトルネックをみつけ、修正する、という単純ですが難しいことをやってのけるには、やはり日頃から経験を積むしかないとも思いました。
終わってからの社員さんからの解説では、並列化テクニックや、GolangならではのDBコネクションなどの内部処理にも着目されており、とても勉強になった2日間でした
2日目の夜の懇親会には諸用により参加ができなかったのがとても心残り…