hhvm on centos6 本番運用のうまみとつらみ

Post on 15-Apr-2017

2.725 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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でなければもう少し楽かもしれません

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

top related