BPStudy#81(HHVM Hack/CoreOS)に参加してきた #bpstudy
ども、大瀧です。
BPStudy、初参加してきました!
株式会社 Abbyのお二人のとんがったお話を聞いてきました。
メモ書き残しておきます。
HHVM Hack @yone098さん
[slideshare id=35299637&doc=hhvm-hack-140530064611-phpapp02]
- 自己紹介
- 社員募集中!
- アジェンダ
- Hackについて、HHVMについて
- ツールの紹介
- Webアプリのハマりどころ
- パフォーマンス
- HHVMのエクステンション 既存C++資産の流用
- PHPからの移行
- HackとはFB開発のPHP互換言語
- FBはPHP→Hackに移行済み
- HHVMとは
- C++で実装されたJITコンパイラによるPHP実行環境
- 3.xが3月にリリースされた
- FCGIでnginx/Apacheと組み合わせ
- 2.xは組み込みのWebサーバーだった。
-
Hackの特徴
- 静的型付け
public int i = 10;
とか書ける - Nullable
NULLの許容/拒否が選択できる - Generics
Map Collectionなんかに使う。C++まんま。 - Type Alias
既存の型に別名をつける。シノニム?
関数の引数を型強制できる。
例 : type user_id = int;
- 可変長引数 ...と明示。
- 静的型付け
- 勉強会的には、Tools紹介を推したい!かしこいツールばかりでお奨め
- デバッガ優秀。デモ…ダメぽ。
- hhvm -m debug <ファイル名>
- breakpoint
- ステップ実行
- 変数参照
- gdbライク
- デバッガはCLI実行だけじゃない!variable(Web application)で$_*も表示できる!
- 実行時エラーは辛い…
- hh_clientで構文チェック!
- アプリのルートでtouch .hhconfigすると配下のPHPがチェック対象に。
- .hhconfigがないとエラーに。
- 例えば、戻り値がintなのにreturn <string>;とかやってるとチェックしてくれる!
- fastcgi
- nginx/apache向けコンフィグ生成を自動でやってくれる!(2個くらい前のバージョンから)install_fastcgi.sh
- デバッガ優秀。デモ…ダメぽ。
- HackでWebApplicationを作ってみた
- HHVMで動作しているかチェック!→ phpinfoの画面には
HipHop
とだけ表示される
- fastcgiとかダメだと503になりやす。
- 2系から3系で設定の書き方がガラリと変わった(以前はJSON、今後はini形式のみに一本化)
- include_pathがどうやっても効かなかった…
- 今はini_setで毎回指定している。
- HTML埋め込みの<?php 〜 ?>は、<?hh 〜 ?>に代替できない。動かない。
- パフォーマンス
- 100万回のループ2回だと、hhvmはphpの10倍!
- 体感で2〜3倍。本家にある20〜30倍は再現できず。
- HHVMで動作しているかチェック!→ phpinfoの画面には
- HHVM Extension
- C++のライブラリをHHVMで動かす!
- 本家サンプルは動かなかった… → プルリクが発行されて、修正中らしい。
- 手順自体はわかればシンプル。
- 速い!
- PHPからのマイグレーション
- Hackへの移行ではなく、PHPのコードはそのまま、HHVMに切り替えるだけでパフォーマンスアップ!
- Hackに移行する場合は、出てきたチェックポイントでリファクタリング
- <?php → <?hh
- 引数・戻り値の型付け
- null許容の戻り値の関数には?をつける
- Collectionを積極採用
- hh_clientでがんばってチェック!
- 規模があると大変そう。
- 事例があると嬉しい。
- Hackは使わなくてもいい。
- HHVMはお奨め。FBで実績があるし、速さというメリットを享受できる。
- 3年後にはPHPが無くなり、HHVMに移るのでは。Apache→nginxへの移り変わりに似ている。
CoreOS入門 @mopemopeさん
[slideshare id=35320632&doc=coreos-140530192222-phpapp02]
- 自己紹介
- 宣伝 Docker本 : 興味あればどうぞ!
- 今日はCoreOS!
- Alex Polvi(元Rackspace Inc)/CoreOS Incが開発
- Googleなどを参考に。
- カーネルコミッターのGreg KHさんも参加!
- オフィスはガレージ!半年くらい前の話(WIREDで話題に。)
- 開発はOSXらしい。
- Core OS
- コンテナ+クラスタ!!あとはQiita見てください!
- バージョンは、日数らしい。324.2.0→324が日付
- デフォルトで、ブートするとコンソールログイン不可、SSHのみ。
- パッケージマネージャなし。root partition書き込み不可なので、ソフトウェア追加も無理。
- /etc、/mediaはOK
- update_engine
- alpha/betaの2チャンネル。あとtest, productionの4つを予定
- アップデートはroot partitionの載せ替え
- /dev/vda9と/dev/vda4で交互に。
- Docker
- アプリはぜーんぶDockerコンテナで。
- ホストOSとの分離、ポータビリティ
- オーケストレーション(コンテナ間通信)にetcd
- 低レイヤーなので、もうちょっと高レイヤーのツールを使うことになる?confdあたりを最近よく聞く。
- etcd
- Raft
- fleet = etcd + systemd + job scheduling
- 障害を検知して、他の健全なホストにコンテナをフェイルオーバー
- ログはjournald。
- 構成要素
- coreos-cloudinit
- etcd
- fleet
- locksmith
- 全部Go。サイズちっさいし、1バイナリに入るのでライブラリ管理フリー。
- CoreOS-CloudInit
- コンフィグはここに突っ込むべし。
- cloud-config.yml
- 独自サービスの追加
- 外部デバイス
- config-drive
- 設定できる項目
- 例を紹介
- private_ipv4 / public_ipv4 の使い分けMulti-AZやMulti Cloud(AWS-GCEとか)
- write_filesには、ネットワーク設定などとか
- コンフィグはここに突っ込むべし。
- Etcd
- CASサポート : Atomicに操作。ロックなしになる方向
- Clusterを簡単に構成する仕組み。Discovery
- Raft : コンセンサスアルゴリズム
- 民主的(Vote)
- リーダーのElection
- 説明サイトがあるので、スライド作るのを止めた。
- ランダムなElection Timeoutが切れると立候補。
- Term : 任期、代
- 「俺リーダー、俺リーダー」
- リーダーお亡くなりに。
- 別の立候補で2代目総長に。
- メンバーが増えると、同時期に複数の立候補が出たりする。
- 基本ノード数は奇数が推奨。偶数だと投票同数で再投票になったりする
- 現状
- 大規模クラスタは向いていない 5 - 9ノード ConsulもRaftで5ノード推奨
- 大規模になる場合はStandby Mode
- Leader heartbeatのTimeoutが短い 50ms
- 大規模クラスタは向いていない 5 - 9ノード ConsulもRaftで5ノード推奨
- Standby Modeとは
- 最大アクティブノード数を規定(デフォルト9)
- 10ノード目以降はStandby Modeに。
- アクセスを全て302でLeaderノードにリダイレクト
- Leaderの設定は5秒ごとに同期
- Activeノードに空きが出れば、Followerに昇格!
- まだBuggy
- Fleet
- コンテナを指定マシン(あるコンテナと同じマシン、metadataにマッチしたマシンなど)にデプロイ
- Engine
- Job Scheduling
- Agent
- 判断してJobを実行
- D-Busで監視
- フロー
- レジストリにJobを登録、EngineがAgentにSubmit。
- レジストリのストアがetcd。
- SystemdのUnitとして定義
- Fleet拡張 SystemdのUnit定義に拡張の記述
- どのマシンに配置するかのルールX-ConditionMachine* / X-Conflicts など
- 例 : Exec*のコマンド名の前に「-」がついているものは返り値を無視する
- Fleet Agent Heartbeat Timeoutときどき起きる。これが出るとFleetは即死。agent_ttlで調整するべし。
- Job Schedulingには優先度がない
- Job登録には認証がない。
- locksmith
- クラスタ上のマシンのRebootを管理する
- 自動更新時に全マシンが止まらないように管理
- セマフォでロック
- よくpanicを起こして死んでいるw
- ここでデモ!
- coreupでGCE上にCoreOSクラスタを立ち上げ!
- クラスタ上のマシンのRebootを管理する
- 今後の課題
- 安定性重視
- クラスタサイズ、Standby Modeで何台まで?
- 高レベルオーケストレーション
- クラスタ設計
- 実際にどれくらいのスペックが求められるのか
- コンテナ何個?
- ログなど管理ノードの配置
- オーケストレーションツールの配布方法
- 運用まわり
- メトリクス
- ログ収集
- アラート
- リードオンリーのOSなので辛い
- Docker前提の設計
- 外部ホスト連携 : confd
- 永続化データの保存先 : 外部ストレージ
- ディスクの制御
- 帯域はblkioとかで
- btrfsクオータなどで制限
ゆるーいトークと最先端の話題のコントラストが心地よい、そんな勉強会でした。主催のビープラウドさん、@yone098さん、@mopemopeさんありがとうございました!