http://phpcon.php.gr.jp/w/2013/
【主な収穫】
- PHP ComposerのパッケージはPackagistで。
https://packagist.org/ - 電話APIがすごい。Webサービスに付加価値を。
http://twilio.kddi-web.com/ - ログの運用にFluentdが良く使われてる。
http://codezine.jp/article/detail/6958 - Vargrant入門ガイドが電子書籍で出てる。
http://www.amazon.co.jp/dp/B00F418SQ8/ - PHP Quick profiler が便利そう。
http://www.particletree.com/features/php-quick-profiler/
http://sssslide.com/www.slideshare.net/MiuraKatsu/ss-26186401
━━━ 以下、雑なログ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
≪ミッションクリティカルなシステムの勘所≫ 広告配信システム ・リアルタイムレポート ・膨大な配信ボリューム ・無停止メンテナンス ・柔軟な改修 ・インフラ ほぼAWS 富豪構成:Multi Load Balancer、Multi-Datacenter、Multi-Server 多数のインフラを手動構築では危険 Stack Deploymentパターン CloudFormation テンプレート+CLIの利用で柔軟に 点プレから変更が少ないネットワーク部分を構築 次にCLIでネットワーク上に置く変更の激しいものを設置 ・アプリケーション 広告配信はScala:Servlet 計測部分はPHP+Gouche 管理画面はPHP+Symfony2 ‐テストコード ‐Pull Request運用 ‐CI ‐ワンクリックデプロイ ‐本番同等検証環境完備 サービス停止がまずい 配信できない 計測できない ぼっちで動く:連携システムが落ちても単体で動く。多少情報が古くても動かす。 レスポンスを速攻で返すために: レスポンスだけ先に返す ⇒ 取り込みは裏バッチで。Fluentd か所によってはPHPをやめる ⇒ PHP→Scalaで3倍速く。 富豪的に解決 ⇒ スケールアウト+スケールアップ 自動リトライ機能で運用を楽に。 ・モニタリング fluentdでログ収集 GrouthForecast:グラフ事前定義不要 Xymon 手軽に計測、手軽に関し、足らんなら作って公開 PHPはどのような部分に? どこでも。あなたがそれが良い選択だと評価できるならば。 自分たちで検討して、動かして、計測して、評価する。 ≪Composer≫ ライブラリはPackagistで探す。https://packagist.org/ VersionUP,Downも自在に。 PEARもインストールできる。 autoload.phpだけをrequireすれば二度とrequire_onceを呼ぶ必要がない。 使う必要が出てきたタイミングで必要なものをLoadしてくれる。 ライブラリごとのファイル名規則など把握する必要なし。 PSRを守っていれば自作クラスでもautoloadされる。 ≪パフォーマンスが悪い実装≫ ・DB接続のキャッシュ __construct()でオープン __destruct()でクローズ とか。 Apache child process (MINITとか)を理解して改善する。 ・大量のdefine コストが大きく、リクエストごとに実行される。 phpのextensionに記載すると改善できる。 extensionが使えないか環境なら、hidefを活用するのが良い。 ・ホスト名取得(exec) execによるプロセスの生成コストは非常に大きい Preforkの設計努力が無駄に。 PHP5.3移行でサポートされたgethostname()を使いましょう。 ・PFテストは継続的に ツールでサポートして促しましょう。 Jenkinsでパフォーマンステストを自動実行して可視化するとか。 ≪PHPからTwilioで電話を掛ける≫ ・アメリカのサービスをKDDIが展開 http://twilio.kddi-web.com/ ・電話API 電話発信、受信API(050番号取得) ダイヤル操作、録音などなど ・SMS ・VoIP連携 ・初期費用が低く、スモールスタートでも使える。 ・手順 電話番号を買う。 電話がかかってきたときにPOSTされるURLが発行される。 ・既存サービスに付加価値をつけるのがフィットしている 匿名通話 電話番号を交換せずに。 他者間通話 海外からの電話に通訳をクラウドソーシングで入れる。 電話受付 かかってきた番号を記録して、後からかけなおしますと案内 2要素認証 ID/PASSと、自分の電話にSMSでコード送信 ・利点 Webサーバ連携が簡単 1つの電話番号で同時着信可能 電話番号でユーザ識別可能 ・セキュリティ ほんとにTwillioサーバからのリクエストかを判別必要がある。 サイトのドキュメントにその説明がある。 署名の付加など。SSL証明書が必要。自己証明書ではできない。 SMSにURLなど含めるとフィルタされる可能性あり。(au) SMSで迷惑メール設定などで届かない可能性あり ≪MySQL admin≫ ・4.0から5.6への移行について Slaveから。 mysql_upgradeで。 mysqldumpで。 ・スケールアップ INSERT/DELETEが重いときはパーティショニングが有効。 パーティショニングキーを指定しないとSELECTは早くならない。 SELECT、UPDATEが重いときはインデックスやパラメータが原因 ・SQLレビュー 今よりレコード件数が増えても想定のインデックスが使われることを考える。 DEPENDENT SUBQUERY, type ALL, Using temporary table, using file sort 辺りは 件数が増えると重くなる。 テストデータの件数と分布も大事。 ・外部キー制約 嫌いな人が多い。パフォーマンスには影響ないので使いましょう。 ・遅いクエリ 相関サブクエリを使っている。 CPU使用率が跳ね上がったらこのパターンを疑う。 インデックスが足りない 重いクエリーには複合インデックス ANDの条件を順番に並べる。それにORDERBYで使われているカラムを足す。 不等号とかORを使うと、ORDERBYまで波及しない。 LIMIT使ってるならWHEREよりもORDERBYを狙ったインデックスのほうが改善できるケースもある。 パラメータ中忍具 innodb_buffer_pool_sizeはデータ格納寮歌搭載メモリーの75%くらい突っ込む。 MyISAMと同居するとメモリを取り合うので別にする。 SSDなどの場合はパラメータチューニング クエリチューニング スロークエリに乗らないクエリもいろいろすると拾える。 EXPLAINは基本。 KEYが使われてるか、key lengthが想定している長さで使われているか。 (int, datetime, varchar(32))なのにkey lengthが4とかだと、intのキーしか聞いていない。 Using file sortは意外と重い。ORDER BYをIndexを狙う。 ≪Vagrant≫ Vagrant入門ガイドが電子書籍で出た。Kindle。Gihyo Digital Pulishing. 関西PHP祭りで使った入門セッションのスライドがスライドシェアーに。 ・用語 Boxファイル ⇒ マシンイメージファイル Vagrantfile ⇒ 仮想マシン構築設定 vagrantコマンド ⇒ 全ての操作 ・PHP開発環境を構築 流れ: $ git clone repos $ vagrant up 完了 Gitで管理 Vagrantfileはプロジェクトごと ソースと一緒にGitで管理 .vagrantは.gitignoreへ vagrant up 仮想マシン構築、起動、OS起動 構築 Boxファイル名 IPアドレス(ホストPCないだけのもの) ポートフォワード プロバイダ VirtualBoxの設定 ミドルウェアインストール まずはシェルでやりましょう。 php.ini, httpd.confは用意しておいてコピー。 DB構築、データ投入 アプリケーションデプロイ ・クラウド環境を構築 AWSへも同じ環境を作成可能 ・Vagrantが見せる夢 Projectごとに独立した環境 CIサーバにも使える。 いつでも構築できる安心感。 ≪WebAPI≫ ・地図アプリAPI(ゼンリンデータコム) 混雑状況、エリアの指定人数をリアルタイム表示 ・駅データ.jp 例)鉄道アラーム:乗り過ごし防止。 ・Dropbox Dropboxへの送信をAPIで。 ・WebPay クレジットカード決済 ≪Phpstorm≫ ・最初から高機能 ・コード保管 ・静的解析が優秀 ・ライブラリや自作クラスも補完 ・Symfony2、CakeStormなどのプラグイン ・Ctrl+Shift+AでFind Action、Jump to Class/File, Go to Decralation, Recent File ・自動アップロード、branch変更時も自動で, ・Local history ・Bookmark ・リモートデバッグ ・LiveEdit ≪プロファイラ≫ ・New Relic SaaS型パフォーマンス管理ツール お手軽。有償。フリートライアル有。 ・xhprof facebookの人が作成。 処理のフローをグラフ化。 xhprof_enable()をbootstrap前に。 /tmpのボリューム インストールが面倒 詳細な情報がない。 ・PHP Quick profiler ProfilerLog ≪PHPコアから読み解く定石の嘘ホント≫ ・エラー演算子”@”のあるなし 結果⇒エラーが起きるケースで比較すると、ある場合のほうが早い。 error_reporting をクリアする処理が入るが、 エラーログの出力などの処理の分の差が出る。 ・比較演算子 == or === === のほうが倍早い。===は方が違えばその場で処理終了。 == は型変換がある。型が同じ変数の比較なら差が出ない。 ・print / echo ややechoが早い。printは戻り値がある。ので戻り値を返した後に、 変数を開放するプロセスがある。 かつ、内部でechoを使う。 参考) http://d.hatena.ne.jp/koto2/20080518/1211070116