第4回ISUCON本戦でやったこと考えたこと
いい感じにパフォーマンスチューニングするコンテスト第4回ISUCONの本戦に「ご注文はPHPですか?」として参加しました。最終スコアは26位の6598です。途中の最高スコア(remote)は8000強ぐらい。
↑ピンクの線です。
メンバー
アイコン | |||
---|---|---|---|
@do_aki | @matsuu | @netmarkjp | |
職業 | インフラエンジニア | インフラエンジニア | インフラエンジニア |
得意言語 | PHP | Perl | Python |
当日の役割 | 右腕 | 左腕 | ファシリテータ |
予選のblog | こちら | こちら | こちら |
本戦のblog | こちら | こちら | こちら |
予選はGo言語で実装しましたが、本戦もGo言語で臨みました。
事前準備(プロファイラ編)
アクセスログを解析するプログラムをnetmarkjpせんせいがPythonで実装したものをGo言語で再実装しました。名前はあとづけですがkataribe(語り部)です。中二病っぽい!
また、ISUCON4予選で辛かったGo環境のプロファイラ周りですが、wall timeベースのお手製プロファイラをnetmarkjpせんせいに作成していただきました。こちらも名前はあとづけですがkagenui(影縫い)です。中二病っぽい!
事前準備(Redis編)
予選から本戦までの間で、ニコニコカドカワ祭りの期間中に購入したRedis入門を片手にRedisのお勉強。
Redis入門 インメモリKVSによる高速データ管理 (アスキー書籍)
- 作者: Josiah L. Carlson,長尾高弘
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/01/16
- メディア: Kindle版
- この商品を含むブログを見る
この本をざっと読んだあとにISUCON3本戦の問題をRedisで再実装してました。
ISUCON4本戦がRedis実装だったのでキタッ!って思ってたんですが、Redisライブラリとしてredigoで練習していたものの、ISUCON4本戦ではgo-redisが使われてて「お、おう」ってなった件。
GoでRedisを扱うならやっぱりgo-redisなんでしょうか。
やったこと&考えたこと
ざっと列挙するとこんな感じ
プロファイラで動画のレスポンスに時間がかかっていることを確認
Redisから取り出すコストを減らすためにnginxでキャッシュして返そう→実装した。
レポート生成に必要なログがファイルに吐かれている
スケールアウトするためにnginxのアクセスログで同じ内容を出力してsyslogでかき集めればいいんじゃね?
よく調べたらアクセスログだけでは生成が難しい。ログはRedisに流し込もう→実装した
動画はRedisに突っ込みつつ、ファイルを生成するようにするか
突っ込まれたものを非同期にファイル生成を考えたが、自分たちで時間内に実装できる自信がなかった→未実装
素直にファイル出力するようにすればよかったね。
Chunkedで返すような実装があった(が使われてないように見える)
無理矢理にでもChunkedで返せばスコアがあがるのでは?→未実装