Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

HHVM on CentOS6 本番運用のうまみとつらみ

3,601 views

Published on

HHVM/Hack言語勉強会#1 https://atnd.org/events/72169

Published in: Engineering
  • Be the first to comment

HHVM on CentOS6 本番運用のうまみとつらみ

  1. 1. HHVM on CentOS6 本番運用の うまみとつらみ
  2. 2. HHVM処理系の構築・運用に関する話です Hack言語は出てきません...
  3. 3. 自己紹介 • 桑折 慧(KORI Kei) • @2k0ri • 株式会社オークファン 新卒2年目 • インフラ・運用、DevOps(1年半) • 分析基盤開発に異動(4ヶ月目)
  4. 4. HHVM導入の経緯 • 先輩マネージャー「HHVMにしたら超早くなった」 • Ubuntu+HHVMにレガシーシステムを引っ越しただけで チューニングが完了した • リビルドプロジェクトが立ち上がる • Ubuntu換装はハードルが高いが HHVMへの換装はワンチャンあるのでは...?
  5. 5. 導入サービス aucfan.com
  6. 6. 1. スマートフォン版 2. PC版の一部ページ(落札相場検索、商品詳細) • CentOS 6.7, nginx, HHVM 3.5.0 • FuelPHP 1.7.2 3. オウンドメディア(オクトピ) • Wordpress それぞれが単独のアプリケーションとして稼働 最上流のnginxでURL/UAを元にリバースプロキシ
  7. 7. インストールまで • FB社の公式パッケージ提供はdpkg形式のみ • CentOS6向けのrpmは下記の野良リポジトリがある • hop5(HHVM 3.0.1) • gleez(HHVM 3.5.0)
  8. 8. インストールまで • gleezのお粗末なところをchefで吸収 • mysql周辺の2バージョンにまたがる依存に追随 • remiから消失している依存パッケージを別途調達 • initスクリプトを修正 chefコード片/.iniのgist: https://git.io/vzWOO
  9. 9. 開発機への工夫 • 言語はPHPのまま、処理系のみをHHVMに移行する計画 • 開発機(Vagrant)にはPHP5.6(php-fpm)とHHVMを両方構築 • バーチャルホストで別のfastcgiソケットに着信 • 処理系固有のバグを踏んでもすぐに戻れるように http://php.dev.vagrant.aucfan.com/... http://hhvm.dev.vagrant.aucfan.com/...
  10. 10. pros うまみ
  11. 11. 早い 2021ms -> 907ms 611ms -> 354ms 230ms -> 100ms
  12. 12. PHPコードに手を加える必要がない 開発リソースを使わず、インフラのみで高速化できる いざとなれば一手戻れる(Hackに移行しない限り)
  13. 13. ピーク時LAが2/3ほどに →1台での同時リクエスト数がアップ →コスト減
  14. 14. cons つらみ
  15. 15. Xdebug対応が不十分 • xdebug.オプションはある • が、3.5.0とPHPStormでは動作せず すごいレアケースでパーサの挙動が違った <?php//echo "sample" ;?> • ↑ PHP works, HHVM returns syntax error • PHPのやわらかさに改めて驚かされる
  16. 16. ログが滅多に出てこない • PHPより頻繁に画面が真っ白なまま • hhvm.log.level=Verboseでもエラーログが無言のケースが 多々ある • 今でも極稀に原因不明のスタックが起きる
  17. 17. memcachedを使うとhphp_invoke(500) • 原因不明のセグメンテーション違反 • HHVMアップデートの道は閉ざされているので FuelのCacheドライバを変更 • memcached → Redis • OS/バージョン固有のバグであって欲しい • FB社はmemcachedヘビーユーザだし...
  18. 18. 12回目のアクセスから500になる • FuelPHP × php-pdo × HHVMで発生 • FuelのDBドライバがJITにかけられた途端動かなくなった • fuel/core/classes/database/connection.php L60付近 + // https://github.com/facebook/hhvm/issues/2011#issuecomment-58767200 + settype($name, 'string'); if ( ! $writable and ($readonly = Config::get('db.'.$name.'.readonly', false))) { ! isset(static::$_readonly[$name]) and static::$_readonly[$name] = Arr::get($readonly, array_rand($readonly));
  19. 19. 惜しいところ hhvm.repo.authoritative • PHPファイル全部を事前(AOT)コンパイル、高速化するオプシ ョン • FBのチューニングマニュアルにはコレで20%改善とある • FuelPHP1.7.2でやろうとするとセグメンテーション違反に • 惜しい
  20. 20. 今後の方針
  21. 21. 結局... • HHVMのメリットを最大限享受するにはCentOS6はやっぱり もったいない • 最新バージョンを使えないのは脆弱性対策としても不安 • 後述の理由もある • →Ubuntu移設進行中
  22. 22. いざとなれば一手戻れる(Hackに移行してなければ) HHVM -> PHP5.6の可能性 • 運用ノウハウがネットに少ないのがやはり一番の不安材料 • どうしようもないバグにぶつかった時に nginx1行で振り戻せる状態にしておく
  23. 23. hhvm.php7.all • HHVMのphp7シンタックス対応オプション(3.11.0~) • コード・処理系両面でphp7化を視野に →HHVM <-> PHP7ワンチャンあるのでは...?
  24. 24. まとめ • PHP on HHVMは結構お得でした • いざとなれば戻れる(PHP7以降も?) • 情報は少ない、地雷は踏み抜かれる • FuelPHPでなければもう少し楽かもしれません
  25. 25. ご清聴ありがとうございました

×