読者です 読者をやめる 読者になる 読者になる

はらへり日記

腹に弾丸

ISUCON6予選に出た

結果

正確なスコアはメモし忘れたんですが、最高点が15000点ぐらいでした。

後半はずっと14000点を前後してた

何をしたか

自分用に覚えてる範囲で軽くメモ。

  • まずalp, pt-query-digestを仕込んでベンチを叩く。スコア200くらい
  • DB周りの@aboyとミドルウェア、OSの@ktarow、アプリの自分で各々予め決めてたことをやる
  • アプリを最初に触ってみる。はてな感すごい
  • DBのデータ量が少ないこと、データ数もテーブルも少ないことに戸惑う
  • 2つWebサーバが立ってることにとまどう
  • とりあえずインデックスを貼ったりnginx周りをチューニングしてもらったりDBにメモリ振ったり
  • 2つのWebサーバ間でお互いを叩いていて無駄だったので消す

ここまででちゃんとアプリケーションコードを読み切れていなかったり、作戦会議の詰めが甘くてFAIL地獄にハマる。

  • 昼頃にFAIL地獄を抜けて11000点くらいになる
  • この時点で去年のスコア(一概に比べられないけど)の10倍以上だったのでハイタッチする
  • ここからインフラのやることがあまりなくなってくる

メモリを食わせてもスループットがあがらなかったり、はちゃめちゃに遅いクエリが無くてここらへんでやっときちんとアプリコードを精査する。おそすぎた。

  • entry本文を表示するために毎回7000語で正規表現をかけていることに気づく
  • ハッシュへの置換とハッシュからリンクへの置換を一挙にやろうとしたがやってみて失敗したことに気づく

例えば1ってkeywordがあると、<a href="/keyword/%10"></a>みたいなリンクがあった時にリンクの内容を置換してしまう。

よく考えればわかることだった…

  • ここらへんからこまめにRedisにデータを突っ込んでいく
  • 突っ込んだ後、それを利用できるものは利用するよう書き換えていく
  • なんやかんやでちょっとずつスコアがあがり15000点になってから2時間ぐらいエラーと戦う

という感じでした。超雑。

なんか知らないけど平尾山のページでめっちゃエラー指摘されました。もうしばらく平尾山は見たくない

所感

木曜から休暇取ってたのでずっとISUCON5の予選で練習してたから頭がDB脳だったのがあまりよくなかった。

始まってみるとDBで改善できるところが少なすぎて結構戸惑った。

去年の反省生かして最初の30分くらいは何もせずにアプリコード読んでたけど、1時間半くらいかけてもよかったかも。

きちんと読み切った上でガッツリ作戦立てたほうがよかった。全部Redisにのっけるとか。

あと、終わって冷静になってから気づいたけど

  • htmlifyの内容を全てキャッシュ
  • POST /keywordが来たらDBからそのキーワードを含むものだけ探してキャッシュを作り直す(Twitterでやったって人見た)
  • ただ、リクエストの中でキャッシュ作り直すとレスポンス遅すぎて減点が痛いのであらかじめPHPでデーモン立ててそこに食わせるようにすればよかった

って思った。ただ、デーモン立てるっていってもそのスクリプト用意してなかったし今度から用意しようと思った。

ループ見たときはPHP並列できない…つらい…ってなってた。

トラブル

東新宿コワーキングスペースでやったんだけど、途中で充電器抜いたらスパークして死ぬかと思った。

f:id:sota1235:20160919013246j:plain

すごい音なったしISUCON中に死ぬとこだった。まじで。

反省会

盛大に反省した。

f:id:sota1235:20160919013356j:plain

悔しいポイントは本当に多くて、予選突破まで行かなくても人権が得られる得点には届きたい人生だった。

ただ、去年は本当に無知で何もできなかったけど今年は終始頭を使えてたので成長を感じた。

何よりスコアが15倍ですからね!!!!!!!!!!!

来年もきっとあると信じて引き続き精進したい。

まとめ

エンジニアになるために人権勝ち取っていこうな。