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