maco's life

主にエンジニアリングと読書について書いていきます。

ISUCON5 本戦での学び

ISUCON5の本戦をchatzmersとして参戦してきました。 結果からいうと惨敗でした。

敗因としてRobert C. Pike氏の下記の言葉に全て詰まっていると思います。

推測するな、計測せよ

どういうこと?

今回使用されていたデータベースがpostgresでした。 僕たちは

  • 日常的に業務でmysqlに触れていてpostgresより詳しい
  • 本戦の予行演習で mysqlのチューニング方法を予習していた

以上の判断から最初にpostgresをmysqlに置き換えることをしました。 限られた時間しかない中、もしかしたらdbにボトルネックがないかもしれない という状況で先に移行をするという決断をしたのは判断ミスだったなと思います。

今回で言えばslowqueryをみたり、cpuの使用率をみたら今回はDBに全く 負荷がなかったことはわかっていたようなので、 予選の時にできていた計測して確実に潰していくというスタンスは本戦でも 徹底していくべきでした。

mysqlに移行して何がよくなかったのか

単純に移行に時間がかかりました。 やった作業と時間がかかったポイントとしては

  • 初期データをmysqlでいれられる状態のものに置き換える
  • 移行した際に文字化け問題に悩まされる(これは最後まで解決できなかった)
  • 移行に伴いケアレスミスを連発して、少しずつ時間を削ってしまった

以上の点で苦戦しました。

結局何をしたのか

僕達ができたこととしては、

  • dbとappのserverを分割
  • dbサーバー * 1 + appサーバー * 2の構成にする
  • dbをpostgresからmysqlにする
  • その他アプリの微修正(スコアに全く影響がなかったので割愛)

以上ができたこととなります。 複数台構成にしたので、単純にスコアが初期スコアの1000から約2倍の1900ほどの上がり successで無事11位になれました。

まとめ

結果として力不足を露呈する形となりましたが、学びは多かったです。

僕らが現職で入社した時に行った社内ISUCONではスコアは良かったもののfailに終わってしまい、 スコアが残らなかったという苦い経験をしました。 それを加味して今回は、本戦が始まる前に確実にsuccessにして終わらせよう という話をしていたのでそれは有言実行できて良かったです。 二年半前からはちょっと成長ができたのかな...?

来年は上位目指して頑張りたいとおもいます。

最後に

運営の皆様本当にお疲れ様でした! ISUCONというイベントが行われる大切さと、参加することで得られる多くの経験を知ることできました。 様々な背景をもつエンジニアの方々一つの目標に向かって競い合う機会は滅多になく、そんな有意義なイベントが 今年も開催できたのは運営の大変な努力があったおかげだと考えると、感謝の極みです!本当にありがとうございました!