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

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

Apr 15, 2017

Download

Engineering

Kei Kori
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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 本番運用のうまみとつらみ

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