Affamative Way

前向きにグダグダいいながらコード書く

カカクコム&クックパッド共催 勉強会に参加してきました

Rails+OpenIDということで、顔見知りもいないほぼアウウェーな環境に参加してきました。
勉強会後は軽食も出ていたれりつくせりでした。cookpadさん、カカクコムさんありがとうございました。


以下、ざっくりと発表のメモ

発表内容

クックパッドのRailsリリューアル


発表した人:cookpad CTO 橋本さん

  • クックパッドとは
    • 「毎日の料理の楽しみにすることで心からの笑顔を増やす」ことのみを追求する
    • CookPad 11年目
    • できること
      • レシピをのせる
      • 42万品のレシピから探す
    • 規模
    • 483万PV/day
    • 2.8億PV/month
    • UU 450万人
      • railsで世界8位のアクセス数
  • Rails採用の経緯
    • 2005年に挑戦して失敗
    • 2007年に食べログからフィードバックをもらいながらRailsで作った
      • 2008/7/12にRailsリリューアルリリース
  • なぜRails?
    • より「高い価値を提供」「し続ける」為
    • アジャイルな開発
      • 機能より価値
    • コードの寿命
      • 2006年リニューアル前のコードは混沌状態
      • MVC,DRY,テスト完備が決めて
  • Rails開発ノウハウ
    • 開発の原則
    • プログラマ
    • DBのレプリケーション
    • レシピ検索
    • キャッシュ
      • 初回アクセスだけページキャッシュ
      • ページキャッシュを使用とした場合の問題、以下の部分をAjaxの1リクエストで処理
        • ログイン情報による動的な変化
        • アクセスログ
        • 広告配信
      • ぶらん座のキャッシュ以外は利用していないとのこと
    • ユーザー専用URL
      • routes.rb
        • すべてのコントローラ名を検索
        • 一致しない場合に専用コントローラに渡す
    • プレビュー機能
      • 特定期間だけ表示するのはテストが行いづらい
        • Time.nowを上書きして、任意の期間表示を全ページで可能にしている
    • アクセスログ
      • MySQL(InnoDB)で複数DBサーバに書込して分析しやすくしている
  • Railsで何が変わったのか?
    • エンジニア5人で6~7ヶ月でリニューアル達成
      • PC
      • mobile
      • 社内
      • 広告
      • データスキーマ変更とデータ移植
      • インフラ
    • 保守性向上
    • 可読性向上
    • 楽しい
      • Ruby自体が使う人のことを考えたものづくり
2008/10/22 追記

発表資料が公開されていました。
カカクコム&クックパッド共催・勉強会を開催しました | クックパッド開発者ブログ



Inside Tabelog’s Backend


発表した人 カカクコム 京和さん

発表内容はRuby会議08 とほぼ一緒らしいです。

  • 食べログとは?
    • CGM型グルメサイト
      • 登録件数 60万件 グルメレビューサイトで 1位になった
  • スペック
    • PV 8000万
    • UU 650万
    • サーバ16 台
    • ソース 30000 行
    • 180 テーブル
  • 環境
  • mongrel採用の理由
    • twitterで使われている
    • Rails推奨
    • メモリの使用量大食い
    • 1台 15プロセス だけど 4-5日で8G食いつぶす
    • 再起動シェルをcronしてる
    • 安定性
      • 「基本的に」安定してる
      • 過負荷時に不安定になる
        • プロセスがいきなり消える
        • ログにも何も残らない
  • パフォーマンス
    • 秒間50アクセス
    • 実際 平均0.2/リクエスト
  • スケールアウト
    • セッションの共有
      • RailsだとDBに簡単にいれられる
    • DBの分散アクセス対応
      • ActsAsReadonlyable
    • 課題
      • フェイルオーバー
        • DB障害時に自動で切り離ししてくれない
      • 同時アクセス数
        • すべてのスレーブを実行
      • 同時アクセス数 = プロセス数
  • パフォーマンス
    • routes
      • routesをつかってない
      • mod_rewrite + create_url(自作)
        • IIS時代の資産を継承
        • マルチドメイン対応
        • routesのパフォーマンス問題(とにかく遅いらしい)
    • create_url(自作)
      • url_forと引数互換
      • contoroller + actionのメソッドでハッシュ → 変換マップ
      • 欠点
      • テストが書きづらい
      • メンテナンスコストが高い(routesと比較ベンチ取って検証してみたい)
  • cache(memchached)
    • アプリケーションサーバ
    • キャッシュ対象
      • DBへのクエリ
      • テンプレートはキャッシュしてない
    • 統計
      • アクセス数 100リクエスト/秒
    • 課題
      • memchachedのメモリサイズが足りない
      • ActiveRecordの富豪っぷり(無駄なカラムを取得してくる)
        • cacheオブジェクトのgzip圧縮を考えてる(phpperlは標準ライブラリできるよ)
  • session
    • DBに格納(Rails標準)
    • 1日に100万レコード増える
    • 5.1だとMyIsamでテーブルロックで致命的
    • セッションはマスタのみを参照
  • まとめ
    • 日本で2番目だけど、そんなに特別なことはしていない
      • でもRailsで全然運用出来てます。
    • Rubyのおかげ
    • やっぱり重いのはDB
      • あと地味に広告が重い
    • 食べログくらいのサイト規模でも普通に運用できる時代が来ているのかも
      • サービス開発に注力できるように!


Okyuu.com × Rails × OpenID


発表した人 カカクコム 藤原さん

  • okyuu.com の紹介
    • ITのノウハウやニュースでの議論を楽しむCGM
    • 構成
  • OpenID実装の苦労
    • 11のIDで利用できる
    • OpenIDAunthentication等のプラグインを使わずに独自実装
      • kakaku.com IDとのからみ
  • OpenID運用の苦労
    • 認証プロバイダが不調
      • サイトの可用性の低下
    • ちょっとした工夫
      • フォーム欄に全部入力するがめんどくさい
        • 1. プロバイダを選択
        • 2.モーダルウィンドにてIDだけ入力
      • というフローで簡単にログインできるようにした
  • お知らせ
    • 近日中に参照系APIをリリースします!!
    • 今後は投稿APIも出してく予定
2008/10/22 追記

発表資料が公開されていました。


cookpadの裏側とこれから


発表した人 クックパッド 高田さん(id:satoship

  • Award on Rails 2007 でクックパッド賞 もらったのでクックパッド入った
  • 技術部の紹介
    • エンジニア 5名
      • サービス開発 2名
      • 広告商品開発 1名
      • インフラ 2名
  • インフラチームの仕事
    • 料理が楽しくなるシステム作り
    • サーバーの設定からシステム運用まで
  • cookpadの裏側
    • railsリリューアルの流れ
    • 2007/12/XX 開発開始
    • 2008/7/12 リリューアルオープン
    • 特有のトラフィック
      • 日ごとのピークタイムは3回
        • 昼飯前/夕飯前/食後の時間
      • 年でみると
        • バレンタイン前で増えて春に向けてゆるやかに減っていく
    • mod_proxy_balancer
  • システム構成
    • ハード
      • ブレード 32台
      • ストレージ iSCSI による SAN
    • 仮想サーバ
      • VMWare ESXi Server
      • app × 2 + db(slave) × 1 を1セット
    • Cent
    • Apache 2.2.3
    • Rail 2.0
    • mongrel
    • mysql 5.0.45
  • ソフトウェア
    • capistrano(デプロイ)
      • Subversionのリビジョン確認
      • CPU数・メモリ数の確認
      • ソフトウェアのインストール
      • スクリプトをアプリケーションと一緒にコミットできるので便利
    • god (mongrelの再起動
      • CPU使用率/ メモリ使用量を閾値い指定して再起動
      • 落ちてるmongrelを再起動
        • ただし完全に対処はできない
    • nagios
    • munin(モニタ
    • FiveRuns manaEge(モニタ Rails内部のモニタ
    • Railsの内容のモニタ
      • 遅い controller/action のランキング
      • よく使われている controller/action のランキング
      • など・・
    • FiveRuns TuneUp もあるよ
  • これから
    • 賢いバランシング
      • mongrelへのバランシング
      • DBへのバランシング
    • バランサを検討中
    • パフォーマンスの向上
      • キャッシュ(現状何もやってない
      • クエリチューニング
        • FiveRunsみながら
    • 構成の見直し
2008/10/22 追記

発表資料が公開されていました。
カカクコム&クックパッド共催・勉強会を開催しました | クックパッド開発者ブログ


Rails2.2 がやってくる & 食べログiPhone


発表した人: カカクコム 大石さん

  • Rails2.2
    • スレッドセーフ
    • コネクションプール
    • l18n
  • 食べログiPhoneアプリ
    • 開発期間 2週間とちょっと
    • 9月 約58000 (海外からのアクセスも多いらしい)
    • 現在 約300/日
  • 良く落ちる
    • 重い
    • 位置情報 がうまくとれない
      • 近日改良予定
  • 続きはWebで

感想やら

Rails使ってる人が80人も集まってるのかと思いきや、懇親会で話してみた人の7割PHPerでしたw
それでも、Railsで業務してる人も増えて来てるんだなーって実感しました。


しかし、受託でRails使ってる人っているのかな?自社サービスでは多いみたいだけども。


やっぱりこういう大規模開発のノウハウが聞ける機会って少ないので、多言語でも単純に面白いです。言語が違うと苦労するポイントもやっぱり変わってきますね。


最近はPHPなイベントばかりにいっていたので、けっこー新鮮な発見がちなほらありました。


いい刺激をもらったのでより頑張ろうと想った一日でした。

最後に宣伝

もくもく会ディノは毎週火曜日に開催してますのでお気軽に参加ください〜。一緒にもくもくしましょう。

*1:しかもpro