Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

3 665 vues

Publié le

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

Publié dans : Ingénierie
  • Soyez le premier à commenter

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. ご清聴ありがとうございました

×