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

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

Embed Size (px)

Citation preview

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

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

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

HHVM処理系の構築・運用に関する話ですHack言語は出てきません...

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

自己紹介

• 桑折 慧(KORI Kei)

• @2k0ri

• 株式会社オークファン 新卒2年目• インフラ・運用、DevOps(1年半)

• 分析基盤開発に異動(4ヶ月目)

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

HHVM導入の経緯

• 先輩マネージャー「HHVMにしたら超早くなった」• Ubuntu+HHVMにレガシーシステムを引っ越しただけでチューニングが完了した

• リビルドプロジェクトが立ち上がる• Ubuntu換装はハードルが高いがHHVMへの換装はワンチャンあるのでは...?

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

導入サービス

aucfan.com

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

1. スマートフォン版2. PC版の一部ページ(落札相場検索、商品詳細)

• CentOS 6.7, nginx, HHVM 3.5.0

• FuelPHP 1.7.2

3. オウンドメディア(オクトピ)

• Wordpress

それぞれが単独のアプリケーションとして稼働

最上流のnginxでURL/UAを元にリバースプロキシ

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

インストールまで

• FB社の公式パッケージ提供はdpkg形式のみ• CentOS6向けのrpmは下記の野良リポジトリがある

• hop5(HHVM 3.0.1)

• gleez(HHVM 3.5.0)

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

インストールまで

• gleezのお粗末なところをchefで吸収• mysql周辺の2バージョンにまたがる依存に追随• remiから消失している依存パッケージを別途調達• initスクリプトを修正

chefコード片/.iniのgist: https://git.io/vzWOO

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

開発機への工夫

• 言語はPHPのまま、処理系のみをHHVMに移行する計画

• 開発機(Vagrant)にはPHP5.6(php-fpm)とHHVMを両方構築

• バーチャルホストで別のfastcgiソケットに着信• 処理系固有のバグを踏んでもすぐに戻れるように

http://php.dev.vagrant.aucfan.com/...http://hhvm.dev.vagrant.aucfan.com/...

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

pros

うまみ

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

早い2021ms -> 907ms611ms -> 354ms230ms -> 100ms

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

PHPコードに手を加える必要がない開発リソースを使わず、インフラのみで高速化できるいざとなれば一手戻れる(Hackに移行しない限り)

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

ピーク時LAが2/3ほどに→1台での同時リクエスト数がアップ

→コスト減

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

cons

つらみ

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

Xdebug対応が不十分• xdebug.オプションはある• が、3.5.0とPHPStormでは動作せず

すごいレアケースでパーサの挙動が違った<?php//echo "sample" ;?>

• ↑ PHP works, HHVM returns syntax error

• PHPのやわらかさに改めて驚かされる

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

ログが滅多に出てこない• PHPより頻繁に画面が真っ白なまま

• hhvm.log.level=Verboseでもエラーログが無言のケースが多々ある

• 今でも極稀に原因不明のスタックが起きる

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

memcachedを使うとhphp_invoke(500)

• 原因不明のセグメンテーション違反• HHVMアップデートの道は閉ざされているので

FuelのCacheドライバを変更

• memcached → Redis

• OS/バージョン固有のバグであって欲しい• FB社はmemcachedヘビーユーザだし...

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

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));

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

惜しいところhhvm.repo.authoritative

• PHPファイル全部を事前(AOT)コンパイル、高速化するオプション

• FBのチューニングマニュアルにはコレで20%改善とある• FuelPHP1.7.2でやろうとするとセグメンテーション違反に

• 惜しい

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

今後の方針

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

結局...• HHVMのメリットを最大限享受するにはCentOS6はやっぱりもったいない• 最新バージョンを使えないのは脆弱性対策としても不安• 後述の理由もある• →Ubuntu移設進行中

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

いざとなれば一手戻れる(Hackに移行してなければ)

HHVM -> PHP5.6の可能性• 運用ノウハウがネットに少ないのがやはり一番の不安材料

• どうしようもないバグにぶつかった時にnginx1行で振り戻せる状態にしておく

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

hhvm.php7.all

• HHVMのphp7シンタックス対応オプション(3.11.0~)• コード・処理系両面でphp7化を視野に

→HHVM <-> PHP7ワンチャンあるのでは...?

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

まとめ• PHP on HHVMは結構お得でした

• いざとなれば戻れる(PHP7以降も?)

• 情報は少ない、地雷は踏み抜かれる• FuelPHPでなければもう少し楽かもしれません

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

ご清聴ありがとうございました