茨城県つくばみらい市から来ました

プログラマーになるために生きています

inside pixiv's infrastracture

  • 久保竜彦さん
  • @cubicdaiya
    • mruby_nginx_module
    • ngx_small_light
    • neogent
  • 月間PV38億
  • 10Gbps
  • インフラ構成は2系統
    • Appliction Cluster
    • Contents Delivery Cluster
  • エンジニア30人
  • インフラチームは5人
  • いわゆる Web アプリは PHP
    • レガシーなものからモダンなものまで
    • 最近は Ruby が増えてる
  • ミドルウェアは C, C++, Python, Lua
    • PHPで書かれたデーモンもある
  • ソースコードは Git で管理
    • 去年 SVN から完全に移行した
    • GHE 使ってる
    • サービス全体で30万行くらいのコードが動いている
  • Redmine でタスク管理
  • PHPUnit
  • IRC で通知
  • 一日に数回から数十回のデプロイ
  • アプリケーションクラスタの話
  • データストアキャッシュ戦略
    • MySQL
      • 永続データストアとして利用
      • ユーザー情報、イラスト
    • KyotoTycoon
      • 半永続データストレージ
        • 消えても作り直せるもののみ
        • 負荷の大きい箇所とか
      • オンメモリキャッシュ
        • MySQLから取得して構築したデータをキャッシュしている
    • APC
      • ローカルデータキャッシュ
    • MongoDB
      • Capped Collection Only
      • 一定期間のみ
    • KVSClient(内製ライブラリ)
      • 以下の順で多段キャッシュをしている
      • 多段キャッシュラッパがあって、APC、KyotoTycoon、MySQL の順にアクセスするように作ってある
  • API for Pixiv
    • Ruby によるプロダクトが増え始める
      • 既存 PHP コードとの連携が問題に
      • Rails で再実装とかむり(規模的に)
    • 提携起業向けに API を提供する機会がある
    • api.pixiv.private
      • Pixiv のデータを透過的に扱うためのRESTFulAPI
      • 活用事例
        • www.pixiv.com
      • 全部PHPで書かれてる
      • 周辺ツールRuby で書かれていたりする(テストツールとか
      • 高速な独自フレームワーク上に構築
        • 当初は Silex だった
        • ログインするのに 100ms かかってた
        • 80ms が 8ms くらいになった
      • プロファイラでボトルネックを調査しました
        • xprof
      • Silex の初期化が遅い
        • 9割くらいがフレームワークの初期化コスト
        • 初期化の何が遅いのか
          • ルーティングが遅い
          • ルーティングしたコントローラが増えるとどんどん遅くなる
      • Silex 以外にもボトルネックはたくさんあった
        • 当時パフォーマンスは重視されていなかった
      • RESTful のための薄いフレームワーク
      • Web アプリケーション向けフレームワークである必要はない
      • tateseta
        • 縦セーターから(ry
      • Silexで12msくらいかかっていた初期化が 2ms 弱になった
      • HTTPリクエストを抽象化しているので HTTP プロトコルを使わずにAPIにアクセスできる
      • requre は最小限に
      • file_exists とかの IO を極力控える
      • 正規表現にたよらない
      • api.pixiv.public もあるよ
  • Pixivはいろんな言語でできてる
  • システムの巨大化、複雑化には抽象化で対応
    • インターフェースだけキメて抽象化する
  • 近年はRubyのプロダクトも増えてきてる
  • RESTflu API でハイブリット言語開発