PHP at Yahoo!を読む

イタリアで開催されたPHPDay 2007にてYahoo! EuropeのFederico Feroldi氏が行なった「PHP at Yahoo!」のプレゼン資料が、氏のブログで公開されました。

Yahoo!が社内でどのようにPHPを使用しているのかということはこれまでにもRasmus Lerdorf氏のプレゼンなどで明らかにされてきましたので、「PHPのビルド時にはモジュールはほとんど組み込まない」とか「ビジネスロジックをエクステンションとして実装する」といったことは皆さんご存知だと思います。今回も前半はそんな感じの内容ですが、途中で実装よりの具体的な話題になってきたと思ったら、Yahoo!が利用しているテンプレートエンジン r3がオープンソース化したと書かれていてビックリ。しかもsymfonyのビュー層にも組み込んで使っているとか。

他にもDrupalの評価を始めていることや、del.icio.usでsymfonyを使っていることなどいくつか目新しい話題があったので、内容を簡単に訳出してみました。

Yahoo!にまつわる数字

  • 20の国と言語
  • 500万人/月のユニークビジター
  • 238万人のアクティブな登録ユーザー
  • 平均3.5Billion/日のページビュー

Yahoo!とPHPの歴史

  • 1994年に独自のC/C++ソフトウェアでスタート
  • OSSムーブメントと共にOSSを採用し始める
  • 1996年頃、David Filoが開発したFilo Web ServerがApacheに置き換えられた
  • 1999年頃、独自のバイナリデータファイルをMySQLデータベースに置き換えた
  • 2001年頃、独自のスクリプト言語ではメンテナンス性に問題がありサードパーティー製品との連携も難しくなったため、Web用に設計されたモダンな言語に置き換える必要がでてきた
  • 必要としていたもの
    • 高いパフォーマンス
    • 堅牢で安全な環境
    • モダンな言語機能
    • C/C++による拡張
    • FreeBSD上での動作
    • 国際化のサポート
    • 低いトレーニングコスト
  • PHPを選んだ理由
    • Webスクリプティング向けの設計
    • 高いパフォーマンス
    • 巨大なオープンソースコミュニティ
    • HTMLの枠組み内にコードが書ける
    • インテグレーション、ライブラリ、拡張性
    • IDE、デバッガ、プロファイラといったツール

Yahoo!における現在のPHP

  • 開発の仕方
    • サーバアーキテクチャ
      • OSはFreeBSD 4.x/6.xもしくはLinux 2.6.x
      • 独自のApacheエクステンション
      • PHP(APC、PEAR、PECL、エクステンション)
      • ロードバランサー
    • アプリケーションレイアウト
      • HTMLテンプレート(/usr/local/share/htdocs/*.php) - 大部分がHTMLで一部がPHP
      • テンプレートヘルパー(/usr/local/share/htdocs/*.inc) - HTMLとPHPが半々
      • ビジネスロジック(/usr/local/share/pear/*.inc) - 大部分がPHPで一部にHTML
      • データアクセス、通信、暗号化などはC/C++
    • 依存性の管理
      • Light basic PHP package
        • PHPはXMLパーサのみを含む最小限の構成をインストール
        • デフォルトですべてのエクステンションを無効にしておく: ./configure –disable-all
        • 不要な依存性を無くす
        • Apacheのメモリ使用量をできるだけ少なく
      • Self contained extension packages
        • エクステンションはパッケージ管理ツールによって個別にインストールが可能
        • エクステンション間の依存性はインストール中に解決される
    • セキュリティ
      • php.iniの設定
        • 常にopen_basedirを設定し、/etc/passwd攻撃を予防
        • allow_url_fopen = Offを設定し、オープンプロキシ攻撃を無効化 - 代わりにlibcurlを利用する
        • display_errors = Offを設定する - ただし、log_errors = Onは設定する
      • 入力値のフィルタリング
        • XSSおよびSQLインジェクション - ブラウザから来るデータは決して信頼しない
        • input_filterフックを使う - リクエスト毎にすべてのユーザー入力値をサニタイズする
        • PECLフィルタパッケージを使う - Yahoo!のフィルタリングライブラリがベース(訳注:PHP 5.2.0以降はデフォルトでフィルタ関数として組み込まれます)
    • パフォーマンス
      • オペコードキャッシュ
        • 容易なパフォーマンス向上
        • パース済みのPHPスクリプトを共有メモリにキャッシュ
        • いくつもの実装がある
        • APC(Yahoo!はこれを使用)
        • Zend Performance Suite
        • Turck MMCache
      • カスタムPHPエクステンション
        • Yahoo!では自前でエクステンションを開発している
        • メリット
          • 速く、最適化された実行速度
          • カスタムのクライアントライブラリへのアクセス
        • デメリット
          • 開発手順が複雑(編集、コンパイル、リンク、デバッグ)
          • 手動でのメモリ管理(およびそれに付随する問題)
      • アプリケーションアーキテクチャ
        • PHPのセッション機能は遅いので使わない
        • 頻繁に必要となるユーザーデータ(ユーザーIDやプロフィールのタイムスタンプなど)の格納にはクッキーを使い、暗号化およびsigned formatにする
      • グローバル化
        • Unicode
        • Yahoo!はPHPのUnicodeエクステンションに貢献している
        • I18Nサポート
        • Generate per intl PHP template (r3 TMT) - 社内開発したTemplate Management Tool (r3 TMT)をオープンソースで公開
        • r3は、UIを異なる言語に変換・カスタマイズすることができる
      • ランタイムテンプレートライブラリ
        • Smarty
        • Yahoo!ではあまり使われていない
        • キャッシュによって実行時のオーバーヘッドは抑えられるが、皆無にはならない
        • Yahoo!くらいのトラフィックだとこのオーバーヘッドがばかにならない
    • オープンソースフレームワーク
      • Symfony
        • 最近Symfonyを使い始めた
        • 開発とテストがうまく統合されている
        • 共通パターンを抽出している
        • 良い設計を後押しする
        • そのまま使っている部分
          • コアMVCアーキテクチャ
          • コンフィギュレーションシステム
          • ビュー層
          • ユーザーセキュリティ
        • 置き換えた部分
          • モデル層およびORマッピング - Yahoo!のニーズにはスケールしなかったため
          • コンフィギュレーションシステム(の拡張) - よりフレキシブルにし、国際化をサポート
          • 国際化 - r3 TMTと統合
        • 採用しているサービス
      • Drupal
        • 利用方法の調査を継続中
        • 素晴らしいアプリケーションフレームワーク
        • まだYahoo!の実サービスではテストしていない
    • Yahoo! Developer Network
      • PHP Developer Center
        • Yahoo!のWebサービスをPHPで使う
        • HOWTO記事やサンプルコード
        • 活発なコミュニティ

Do You PHP はてな, May 26th, 2007 at 17:03 [Trackback]

[PHP]PHP at Yahoo!…

via.おぎろぐはてな - PHPDay 2007 での ”PHP at Yahoo!” のプレゼン 先日の勉強会ではどうもでした :-) PHPDay 2007のプレゼン資料に関する情報です。Apacheには独自パッチがかなり当てられている…

PHP-5.2.3, June 1st, 2007 at 09:44 [Pingback]

[...] 出ました。HTTP_RAW_POST_DATAが消える不具合は解消されたようです。 [...]


使用可能なタグ <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>