10月8日PHP Conference 2017に行ってきた!つづきをメモ
(最後に「PHPカンファレンス2017」のスライドまとめ)
■DockerでPHPアプリケーションを本番リリースするまで
・おしらせ
speaker deckにアップするよ
・アンケート
開発でDocker使ってる人
本番で運用している人:1人→この状態2年くらい
・じゃ、これからコンテナ本番リリース
・Dockerを本番運用してわかったこと
福岡でやった
・今回は趣向を変えて
あなたのハートに火をつけたい
さあはじめましょう
・Dockerコンテナを本番で使うのに必要なこと
1.深く考えない
2.コピペ
3.クレジットカード
・とはいえ、最低限の知識
1.ローカルでコンテナを作成
2.レジストリにPUSH
3.本番にリリース
・代表的マネージドサービス
GKE
Docker Cloud
・クバルネティス K8S クーバネーティス 操縦者の意味
・Docker Swarm すうぉーむ
・本番環境ごとに説明
・GKE
事前準備:
GCPアカウント
gcloudコマンド
手順
ローカルでのコンテナ作成(動作確認)
レジストリにPHSH
本番コントロール K8Sをつかってる(コントロール)
あとはkubecontrollに習熟すればOK
・Swarm mode
AWS,Azureに入れる。方法は一緒
手順はいっしょ
ローカルでのコンテナ作成(動作確認)
レジストリにPHSH
本番:ここがswarmにかわるだけ→cloudformationを使う
→ただ、10分くらい上がってこない
・Heroku:
アカウント作ってください
APP作成、PUSH→イメージもherokuが作る
・まとめ
マネージドな環境を使うことで、かなり簡単
■Kuduを使用したKPI分析システム
・自己紹介
・会社紹介
・この資料はPHP 2%あるかないかくらい
・ゲーム開発におけるKPI基盤
ないときKPIシステムをゲームごとに集計
DAU/ARPU
→KPI基盤を開発して共通化!
・KPI基盤
BIツール作成、KPI集計
・CDH5.4.11で
HDFSでログ
バッチはHive
そのあとRDBMS
ログをFluentd経由
・しばらくは問題なし
人間の欲は深い
いろいろな要求が出てくる
→実現困難
速度面:Hive
バッチの量産は困難
バッチ前提:リアルタイム分析は困難
→Hiveとは別のシステム
高速に集計するしくみ
分析者にも集計してもらう
リアルタイムにアクセスできる仕組み
・解決策は
これらを満たすには→Impala+Kudu
(別のapacheプロジェクト)
・なぜImparaとkudu
3つのメリット
高速処理
全員分析者になれる
リアルタイム処理
バッチ処理後のデータはkuduに格納
バッチ以外のアクセスはImpalaで
・高速処理
ImpalaはHiveと捕獲すると、かなり高速
インメモリでの集計
Impala-Demon
Hive4分30秒→Impala+kudo0.22秒
爆速
・全員分析者になれる
以前 HDFS→Hive集計→MySQL→PHP
イレギュラーケースは対応できない
標準的なSQLでの分析は便利
Impalaと組み合わせることでSQL可能
(KuduはSQLインターフェースない)
・リアルタイム処理
ストリーミングでデータが流れていた
ログさえ到達すればアクセス可能
Impara
・標準的なSQLインターフェース
高速処理
Kudu
更新削除
全データに触れること可能
・導入時に行ったこと
CDHのバージョンアップ(5.10以上→5.11へ)
インストール:Cloudera Manager
データ移行:Apache sqoopによるデータ転送(MySQLからHive)
HiveからKuduはImparaでできる(SQL)
・注意点
導入 CDH 5.10
kuduのカラムの型にtimestampが使用できない Unixtime→BIGINT
タイムスタンプ系の関数はUTCとして扱われる
Impalaの起動オプション
・最後に
いつでもだれでも多様な分析を行えるように!
Kudu簡単に検証できるQuick VMがある
エンジニアも非エンジニアも幸せに
■片手間MySQLチューニング戦略
・自己紹介
・スローログ出しましょう
一定時間以上かかったSQLを出力する
→オンラインでも有効にできる。小数点で時間指定できる。テーブルにもできる
ジェネラルログ:全部吐き出す→実行前に吐き出す
スローログ→実行後に吐き出す
ポイント
Timeが短時間に集中している
時間分布を把握するためのツール あねもめーたー
row_examined,row_sentが十分小さい→indexつけるか?
そもそもrow_sentが大きくない?
WHEREが特定の物に偏っていないか→インデックスの使い分け
・バッファプールの気持ちになる
物理メモリーの75%
ヒープ領域
あくまでバッファプールからよむ:テーブルスペースから
テーブルスペースとバッファプールは非同期
ダーティーページがあるとき
→Selectしただけで、書き込みが走る
Insert、Deleteも同じ
→ここが小さいとボトルネック
・インデックス
特定のキーを狙い撃ちするのがうまくいく
→これ以外は・・・
JOINはきらわれる
ORやNOT→AND、=に落とし込めないか?
カラムに対して演算してはいけない
ネクストキーロック:indexに対するロック
・劇薬に手を出さない
MyISAM
まとめ
・MySQL Casual
国内最大のPHPイベント「PHPカンファレンス2017」のスライドまとめ
https://techplay.jp/column/158
(最後に「PHPカンファレンス2017」のスライドまとめ)
■DockerでPHPアプリケーションを本番リリースするまで
・おしらせ
speaker deckにアップするよ
・アンケート
開発でDocker使ってる人
本番で運用している人:1人→この状態2年くらい
・じゃ、これからコンテナ本番リリース
・Dockerを本番運用してわかったこと
福岡でやった
・今回は趣向を変えて
あなたのハートに火をつけたい
さあはじめましょう
・Dockerコンテナを本番で使うのに必要なこと
1.深く考えない
2.コピペ
3.クレジットカード
・とはいえ、最低限の知識
1.ローカルでコンテナを作成
2.レジストリにPUSH
3.本番にリリース
・代表的マネージドサービス
GKE
Docker Cloud
・クバルネティス K8S クーバネーティス 操縦者の意味
・Docker Swarm すうぉーむ
・本番環境ごとに説明
・GKE
事前準備:
GCPアカウント
gcloudコマンド
手順
ローカルでのコンテナ作成(動作確認)
レジストリにPHSH
本番コントロール K8Sをつかってる(コントロール)
あとはkubecontrollに習熟すればOK
・Swarm mode
AWS,Azureに入れる。方法は一緒
手順はいっしょ
ローカルでのコンテナ作成(動作確認)
レジストリにPHSH
本番:ここがswarmにかわるだけ→cloudformationを使う
→ただ、10分くらい上がってこない
・Heroku:
アカウント作ってください
APP作成、PUSH→イメージもherokuが作る
・まとめ
マネージドな環境を使うことで、かなり簡単
■Kuduを使用したKPI分析システム
・自己紹介
・会社紹介
・この資料はPHP 2%あるかないかくらい
・ゲーム開発におけるKPI基盤
ないときKPIシステムをゲームごとに集計
DAU/ARPU
→KPI基盤を開発して共通化!
・KPI基盤
BIツール作成、KPI集計
・CDH5.4.11で
HDFSでログ
バッチはHive
そのあとRDBMS
ログをFluentd経由
・しばらくは問題なし
人間の欲は深い
いろいろな要求が出てくる
→実現困難
速度面:Hive
バッチの量産は困難
バッチ前提:リアルタイム分析は困難
→Hiveとは別のシステム
高速に集計するしくみ
分析者にも集計してもらう
リアルタイムにアクセスできる仕組み
・解決策は
これらを満たすには→Impala+Kudu
(別のapacheプロジェクト)
・なぜImparaとkudu
3つのメリット
高速処理
全員分析者になれる
リアルタイム処理
バッチ処理後のデータはkuduに格納
バッチ以外のアクセスはImpalaで
・高速処理
ImpalaはHiveと捕獲すると、かなり高速
インメモリでの集計
Impala-Demon
Hive4分30秒→Impala+kudo0.22秒
爆速
・全員分析者になれる
以前 HDFS→Hive集計→MySQL→PHP
イレギュラーケースは対応できない
標準的なSQLでの分析は便利
Impalaと組み合わせることでSQL可能
(KuduはSQLインターフェースない)
・リアルタイム処理
ストリーミングでデータが流れていた
ログさえ到達すればアクセス可能
Impara
・標準的なSQLインターフェース
高速処理
Kudu
更新削除
全データに触れること可能
・導入時に行ったこと
CDHのバージョンアップ(5.10以上→5.11へ)
インストール:Cloudera Manager
データ移行:Apache sqoopによるデータ転送(MySQLからHive)
HiveからKuduはImparaでできる(SQL)
・注意点
導入 CDH 5.10
kuduのカラムの型にtimestampが使用できない Unixtime→BIGINT
タイムスタンプ系の関数はUTCとして扱われる
Impalaの起動オプション
・最後に
いつでもだれでも多様な分析を行えるように!
Kudu簡単に検証できるQuick VMがある
エンジニアも非エンジニアも幸せに
■片手間MySQLチューニング戦略
・自己紹介
・スローログ出しましょう
一定時間以上かかったSQLを出力する
→オンラインでも有効にできる。小数点で時間指定できる。テーブルにもできる
ジェネラルログ:全部吐き出す→実行前に吐き出す
スローログ→実行後に吐き出す
ポイント
Timeが短時間に集中している
時間分布を把握するためのツール あねもめーたー
row_examined,row_sentが十分小さい→indexつけるか?
そもそもrow_sentが大きくない?
WHEREが特定の物に偏っていないか→インデックスの使い分け
・バッファプールの気持ちになる
物理メモリーの75%
ヒープ領域
あくまでバッファプールからよむ:テーブルスペースから
テーブルスペースとバッファプールは非同期
ダーティーページがあるとき
→Selectしただけで、書き込みが走る
Insert、Deleteも同じ
→ここが小さいとボトルネック
・インデックス
特定のキーを狙い撃ちするのがうまくいく
→これ以外は・・・
JOINはきらわれる
ORやNOT→AND、=に落とし込めないか?
カラムに対して演算してはいけない
ネクストキーロック:indexに対するロック
・劇薬に手を出さない
MyISAM
まとめ
・MySQL Casual
国内最大のPHPイベント「PHPカンファレンス2017」のスライドまとめ
https://techplay.jp/column/158