30
ReactPHPは もっと流行って欲しい 1CPUあたり500req/sを超えるHelloWorldを 実装する方法について

第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

Embed Size (px)

Citation preview

Page 1: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

ReactPHPは もっと流行って欲しい

1CPUあたり500req/sを超えるHelloWorldを 実装する方法について

Page 2: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

たなかひさてる @tanakahisateru

Pinoco developerPHPTAL contributorFirebug translation contributorYii framework userPhpStorm user

フルスタックエンジニア(笑)

Page 3: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

ReactPHP• PHPでNode.jsのようなノンブロッキングI/O

• ひとつのプログラムがメモリに常駐

• I/O待ちの間に別のイベントの処理を同一プロセス内で実行

• というわけでプロセス数に対する効率が非常に高い並列処理が可能

Page 4: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

例としてreact-httpで

Page 5: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

普通のPHP

Page 6: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

react-http

Page 7: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

毎回やること

最初だけやること初期化前倒し

PHP react-http

Page 8: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

これまでPHPerが知っていたそれは、他の言語からすれば全然マイクロフレームワークじゃなかった

Page 9: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

Hello World デモ

Page 10: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

Silex nginx php-fpm

Page 11: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

Silex nginx php-fpm

Page 12: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

Silex nginx php-fpm

228.54 trans/sec

Page 13: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

react-http nginx

メンテ状況微妙なespressoをreact-0.4で動くようにして利用 espressoはSilexをベースにしたreact-httpのWAFです

Page 14: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

react-http nginx

Page 15: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

react-http nginx

734.81 trans/sec

Page 16: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

通常の3倍

Page 17: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

ちなみに…

Page 18: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

<?php echo

Page 19: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

<?php echo

1735.65 trans/sec

Page 20: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

<?php echo 最強

Page 21: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

まあネタはこのぐらいにして

Page 22: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

速さではない 本当のメリット

Page 23: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

レスポンス完了

…のあと、裏でやって おけばいいこと

Page 24: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

応用アイデア• サイト上で他の多くのユーザーにプッシュ通知が発生するイベントが起きる

• イベントを起こした人にはレスポンスを返してしまい、その後で通知を分散処理 (react-zmq)

• 他のWeb SocketホストはすべてPub/Subで受ける

• レスポンス後でいいタスクは細切れのジョブにして、それを複数のワーカーが1件づつ取って処理する

Page 25: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

というわけで HelloWorld とかどうでもいいです

Page 26: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

本当は• PHPのWebページはロードバランサーで簡単にスケールアウト可能 → Reactそんなに嬉しくない

• バックエンド側で、ユーザーへのレスポンスより遅れてもいい、高負荷なタスクのための内部REST等に使う

• 裏でボトルネックになるシステム(ジョブキューの受付など)が大量の同時接続を処理したい時に有効

Page 27: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

Webページには ReactPHP不要

• PHPのメリット = レスポンスを返せばすべて終わり

• 次のリクエストはすべて空っぽの状態から始まる、だからPHPは安全で開発しやすい

• レスポンスを返すのが目的の本質なら、普通にPHPのフルスタックフレームワークを使うべき

• でも、PHPの便利さを犠牲にしてでも、初期化の前倒しによる高速化と大量同時接続の受付が必要なとき…

Page 28: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

• Node.js → コールバック地獄かPromise地獄、一瞬でも同期I/Oが許されないきつさ

• Go → ライブラリが…

• Erlang → 文法が…

• Scala Actor → コンパイル…JVM…

• PHP → みんなだいすき♪ サイト用のライブラリが再利用できる サイトと同じツールで開発できる 一瞬で済むなら同期I/Oしてもいいよね、よね

Page 29: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

注意したいこと• ずっとメモリに常駐するので、ヘタすると普通PHPでは起きないようなメモリリークが起きます。たまに再起動する必要があるかも

• リクエストがクラスを専有できないからstatic使うライブラリはダメです(I/O待ちに入ったら別のリクエストにstaticやシングルトンを上書きされちゃう)

• Laravel、Yii、FuelPHP、あとCake3のコードの再利用はたぶんアウト

• で、SymfonyのHttpKernelはいけるので、ここに来てSilexが急浮上することになります → GitHubで php-pm 参照

Page 30: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai

こんなReactPHPのことを喋ってみたい人はぜひ、 PHPカンファレンス関西へ