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 で通知
- 一日に数回から数十回のデプロイ
- アプリケーションクラスタの話
- データストアキャッシュ戦略
- API for Pixiv
- Ruby によるプロダクトが増え始める
- 提携起業向けに 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 でハイブリット言語開発