日本最大級Railsサイトの裏側見せますvol.2〜クックパッド&食べログ
行ってきました、ただのメモです
聞き違え等間違っているところは多々あると思います
クックパッドインフラ
キャパシティプランニング
ユーザが快適に使えるために
- 分析
- キャパシティを知る
- ユーザが快適に使えなくなる限界値を知る
- 限界値を知る
- 予測
- ユーザが快適に使えなくなる限界値を知る
- 予測日を知る
- ユーザが快適に使えなくなる限界値を知る
サーバ増設のスピードアップ
- OSインストールスピードアップ
- ミドルウェアインストールのスピードアップ
- database.yml,my.cnf
- 以前はcapistranoで
- puppetを導入
- サーバの状態管理ツール
- Manifestで管理する
- 学習コストが高い
- 手間はほぼ0だが
質問
- 仮想化は?
- 以前はVMWare
- Manifestファイルのサイズ
- 200行
- 日々の平均の2倍耐えられる位
食べログで動いている大石さん作のライブラリ
自作ライブラリの必要性
- 必要な機能を持つライブラリがない
- 無いなら作る
- 食べログのニーズに合わない
- 仕様にぴったり
- 開発が止まっている
- メンテナンス早い
ActsAsReadonlyable改
TabelogAsync
- 非同期処理ライブラリ
- backgroundrbをつかていた
- 時々暴走
- backgroundrbをつかていた
- 特徴
- mongrelを通さない
- 堅牢性
TabelogAsync::Thrower.send( :class => :async_log,:args => "good" )
- 設計思想
- 軽くてすぐに終わって同期が不要な大量の処理を
- 思い処理も回すようになった
- シングルスレッドなので遅延が。。。
- 重い処理利用サーバと軽い処理用サーバで分けている
Hadoopの効果
- 7000時間->30時間
質問
- Amazon EC250台とあるが、一ヶ月にどれくらいのインスタンスを起動どれくらい費用がかかるのか
- ずっとつけっぱなしではない必要な時だけ
- 会社全体で使っている10万から40万
PCI-Express型SSDとMySQL
SSDについて
クックパッドサーバー、クライアントのボトルネック調査と高速化
- lambda {|diary| lambda { diary.succ! } }.call(hatena)
- ピーク時のレスポンスタイムを200msec以下にする
問題
- ページキャッシュ、アクションキャッシュ導入済み
- フラグメントキャッシュは可読性の問題で導入していない
App
- production.logをモニタリング
DB
- MySQL Tritton
- appサーバのproduction.log
- スロークエリ
- FiveRuns
Web<->Appをからてをつける
- passengerをつかう
- Ruby Enterprice Edition
- メモリはかなり減った
- 起動時にすべてのFileを読み込む
- Memcacheのコネクションが共有されてしまう問題
- マニュアルに解決策あり
- mod_deflate
- 以前レイアウト崩れが発生
- HTMLのみ
- IE6,Firefoxのみ
- レイアウト崩れ対策
- screenshot.jpでチェック
- 一部導入から全体へ
- 150-200msecに下がった
- screenshot.jpでチェック
- クライアントサイド
- 表示完了まで1sec以上掛かっている
- asset id がAppサーバごとに異なる
- appサーバ毎にタイムスタンプがバラバラ
- GitのログからRAILS_ASSET_IDを設定
- Ajax高速化
- 本番環境で計測
- 測定は重要だ
質問
Rails遅い/MySQLが速
- どこが遅い
- production.logに吐かれるのを拡張
- RailsLogger#benchmark
- production.logを取り込んで解析するツールを自作
- 犯人は
- 広告!!!
- タイムアウト
- 広告を一部外して対応
- 営業サイドと交渉
- ログを見せて納得
質問
- ログ運用の対策
- ファイルサイズに気を付ける
- debug logとか出さない