見出し画像

ISUCON13に参加しました(12,799点)

ISUCON13に参加しました。

12に引き続き、チームオガヨシで出場しました。
前回に引き続き、インフラを主に担当しました。

結果は、12,799点で181位でした。

実装はGoを選択しました。

サーバーの構成は最終的に以下のようになりました。

  • Web + App + DNS + DB(isudns)

  • DB(isupipe)

計測は以下のサービスを利用しました。

  • alp

  • pprof

  • pt-query-digest

以下、個人的なふりかえりを書いていきます。

前回の反省

前回の反省は以下のとおりでした。

  • 問題をチームに共有できず、結局解決できなかった

  • サーバーを作り直したときにデプロイできなくなってしまった

準備

以下の問題を解きました。

  • 10(予選)

  • 11(予選)

  • 12(予選)

  • private-isu

当日

以下のことを意識しました。

  • 個人としては、アプリケーションの改善よりもインフラの改善を優先する

  • インフラの準備が終わったら、マニュアルとコードを読み、システムを理解する

  • 問題を発見したらチームに共有する

10:00

競技環境の構築をしました。
サーバーの基本的な設定をしました。
/home/isucon配下をレポジトリにpushしました。
(pushできず、代わりにやってもらいました)
Makefileをコミットしました。
pt-query-digestを実行できるようにしました。

11:00

alpを実行できるようにしました。
マニュアルを読みました。

12:00

2台目をMySQL(isupipe)サーバーにしました。
ベンチマークの後半に1台目のMySQL(isudns)の負荷が高くなっていることを確認しました。

13:00

pt-query-digestを見ると、iconsのuser_idの検索が遅かったので、indexを追加しました。
チームで統計を確認して、課題を整理して、役割分担をしました。
DNSに課題があったので、私はDNSを中心にみることにしました。

14:00

DNSを3台目で動かそうとしました。
env.shにISUCON13_POWERDNS_SUBDOMAIN_ADDRESSという設定があったので、3台目を指定してみたら、ベンチマークが失敗しました。
そのほか、DNS周辺を調査して、解決策を考えました。
試行錯誤してみたもののとくに何もできませんでした。

16:00

エンドポイントごとに3台目に振り分けることができないかと思って試してみたのですが、うまくいきませんでした。

17:00

PowerDNSのTTLなどを調整しようとしたら、ベンチマークが失敗してしまったのでもとに戻しました。

18:00

終了

ふりかえり

初動は概ねいつも通りできたと思います。
計測して課題を把握して、役割分担をするところまでは上手くいっていました。
解決の方向性も良かったと思います。

しかし、その後は何も貢献することができませんでした。

DNSを3台目で動かそうとしたのですがうまくいきませんでした。
まず、どのような仕組みで動いているかの把握ができませんでした。
たとえば、PowerDNSのMySQLだけ3台目で動かす、という発想には至りませんでした。
registerHandlerでpdnsutilコマンドが実行されていることは把握できたのですが、どうすれば3台目で実行できるのかはわかりませんでした。

DNS水責め攻撃の対策は何も思いつきませんでした。
アクセスログを解析して傾向を把握することは前回もやっていたはずなのに、今回は思いつきませんでした。

ベンチマークの待ち時間をもっと有効に使えたはずでした。
少なくともデプロイしてブラウザで確認するなどはやったほうがよいと思いました。

今回は貢献ができず悔しい気持ちでいっぱいです。
次回は貢献できるように練習をしたいと思います。

この記事が気に入ったらサポートをしてみませんか?