LoginSignup
0
0

More than 5 years have passed since last update.

ISUCON 5予選に初参加してきた チーム名「Kossyとなかまたち」

Last updated at Posted at 2015-09-27

ISUCON5予選に初参加してきましたのでふりかえります。
最終スコア4000弱で惨敗でした。

事前準備

顔合わせから(武さんとは初対面)、チームで集まってISUCON4予選を解いて、各々準備を進めて本番に望みました。当初予定していた担当と方針はこんな感じ。

  • @haman29 <- 僕
    • アプリケーション(Ruby), Redis
  • @Kshi_Kshi
    • MySQL(my.cnf、インデックス両方), OSとか
  • 武さん
    • Nginx

みんなアプリケーションエンジニアで普段使っている言語が Ruby, node.js, Java とバラバラだったこともあり、僕がRuby書きたい(あわよくばRedisも)というわがままを聞いてもらった。

  • 最初の2時間でプロファイリング(kataribe, mysql slow log, top..)をして、ボトルネックを見つけ、TODOと優先度を決める
  • 最後の1時間は再起動テスト

当日

-11:00

Rubyで行くことを選択していたのは運が良かった。

11:00-13:00

初期ベンチを回してスコア100くらいだったか。
プロファイリング取ろうと用意していたnginx.confを投入したらベンチ0点になったりとかで、結構ワタワタしていた。

僕はRubyコードを読んで仕様は把握に努めてた。
この時点で relationsfootprints はRedisに乗せれるな〜と妄想してた。まだ手を動かしてない。

13:00-14:00

方針決め。とにかく get '/' が重いことが kataribe でわかり mysql slow log から relations, entries_of_friends, comments_of_friends のクエリチューニングしましょうという話になった。

15:08

one = ? or another = ? してたところを別々に取りunion
select * も select one か select another にした
この辺りで確かスコア500くらい

16:12

entries_of_friends のクエリ改善。

クエリ結果をループで回しさらにクエリを呼ぶお決まりの形になっていたので
friends の id リストを作って where in するようにした。

この辺りでスコア1500ぐらい

-18:00

続いて comments_of_friends のクエリもチューニングするぞ!と意気込んでたが、2時間ぐらい使って成果が上げられなかった、、

18:00

def is_friends? がたくさん呼ばれてて全体の20%ぐらい使われているとのことだったので、ここでRedis使ってis_friends?の書き換え実装を始めた。設計は局所的に使うので簡単に。

isu5:friends:<user_id>: user_id の Set

19:00

実装終わったけど、ベンチ回せず...orz
不完全燃焼に終わった。

チームメンバがミドルウェアのチューニングを頑張ってくれて最終スコアは4000弱で落ち着きました。

KPT

  • Keep
    • setup.shという名の再起動スクリプトまとめを用意していたので、常に同じ条件でベンチが回せた
  • Program
    • ピヨってしまった 場数が足りてない
    • 2時間も同じ問題に悩んでいた
    • アプリ1人はきつかった
  • Try
    • 諦めること
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0