このブログはURLが変更になりました

新しいブログはこちら→ https://matsuu.hatenablog.com/

第4回ISUCON本戦でやったこと考えたこと

いい感じにパフォーマンスチューニングするコンテスト第4回ISUCONの本戦に「ご注文はPHPですか?」として参加しました。最終スコアは26位の6598です。途中の最高スコア(remote)は8000強ぐらい。

↑ピンクの線です。

メンバー
アイコン https://pbs.twimg.com/profile_images/1536770974/square1024_2_normal.jpg https://pbs.twimg.com/profile_images/497897656308350976/wKvhLHq8_normal.jpeg https://pbs.twimg.com/profile_images/2704710656/b3e622404badbefd22b2e516bed625d2_normal.png
Twitter @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による高速データ管理 (アスキー書籍)

Redis入門 インメモリKVSによる高速データ管理 (アスキー書籍)

いやぁこの本、入門どころじゃないですね。すごい。Redisも凄いがこの本も凄い。Redisの可能性を感じました。
この本をざっと読んだあとにISUCON3本戦の問題をRedisで再実装してました。
ISUCON4本戦がRedis実装だったのでキタッ!って思ってたんですが、Redisライブラリとしてredigoで練習していたものの、ISUCON4本戦ではgo-redisが使われてて「お、おう」ってなった件。

GoでRedisを扱うならやっぱりgo-redisなんでしょうか。

やったこと&考えたこと

ざっと列挙するとこんな感じ

プロファイラで動画のレスポンスに時間がかかっていることを確認

Redisから取り出すコストを減らすためにnginxでキャッシュして返そう→実装した。

レポート生成に必要なログがファイルに吐かれている

スケールアウトするためにnginxのアクセスログで同じ内容を出力してsyslogでかき集めればいいんじゃね?
よく調べたらアクセスログだけでは生成が難しい。ログはRedisに流し込もう→実装した

動画はRedisに突っ込みつつ、ファイルを生成するようにするか

突っ込まれたものを非同期にファイル生成を考えたが、自分たちで時間内に実装できる自信がなかった→未実装
素直にファイル出力するようにすればよかったね。

Chunkedで返すような実装があった(が使われてないように見える)

無理矢理にでもChunkedで返せばスコアがあがるのでは?→未実装

MD5でレスポンスが正しいか確認している模様

MD5コリジョンなもっと短いレスポンスを返せばいいんじゃね?→未実装

まとめ

最後のMD5コリジョンを狙うのは我ながら名案だと思ったので、あとで復習しようと思います。