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

7,068 views

Published on

第21回関西PHP勉強会 発表スライド + ベンチマークデモ入れ込み

Published in: Technology
0 Comments
35 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,068
On SlideShare
0
From Embeds
0
Number of Embeds
786
Actions
Shares
0
Downloads
11
Comments
0
Likes
35
Embeds 0
No embeds

No notes for slide

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

  1. 1. ReactPHPは もっと流行って欲しい 1CPUあたり500req/sを超えるHelloWorldを 実装する方法について
  2. 2. たなかひさてる @tanakahisateru Pinoco developer PHPTAL contributor Firebug translation contributor Yii framework user PhpStorm user フルスタックエンジニア(笑)
  3. 3. ReactPHP • PHPでNode.jsのようなノンブロッキングI/O • ひとつのプログラムがメモリに常駐 • I/O待ちの間に別のイベントの処理を同一プロセス 内で実行 • というわけでプロセス数に対する効率が非常に高い 並列処理が可能
  4. 4. 例としてreact-httpで
  5. 5. 普通のPHP
  6. 6. react-http
  7. 7. 毎回やること 最初だけやること 初期化前倒し PHP react-http
  8. 8. これまでPHPerが知っていたそれ は、他の言語からすれば全然マイ クロフレームワークじゃなかった
  9. 9. Hello World デモ
  10. 10. Silex nginx php-fpm
  11. 11. Silex nginx php-fpm
  12. 12. Silex nginx php-fpm 228.54 trans/sec
  13. 13. react-http nginx メンテ状況微妙なespressoをreact-0.4で動くようにして利用 espressoはSilexをベースにしたreact-httpのWAFです
  14. 14. react-http nginx
  15. 15. react-http nginx 734.81 trans/sec
  16. 16. 通常の3倍
  17. 17. ちなみに…
  18. 18. <?php echo
  19. 19. <?php echo 1735.65 trans/sec
  20. 20. <?php echo 最強
  21. 21. まあネタはこのぐらい にして
  22. 22. 速さではない 本当のメリット
  23. 23. レスポンス完了 …のあと、裏でやって おけばいいこと
  24. 24. 応用アイデア • サイト上で他の多くのユーザーにプッシュ通知が発 生するイベントが起きる • イベントを起こした人にはレスポンスを返してしま い、その後で通知を分散処理 (react-zmq) • 他のWeb SocketホストはすべてPub/Subで受ける • レスポンス後でいいタスクは細切れのジョブにして、 それを複数のワーカーが1件づつ取って処理する
  25. 25. というわけで HelloWorld とかどうでもいいです
  26. 26. 本当は • PHPのWebページはロードバランサーで簡単にス ケールアウト可能 → Reactそんなに嬉しくない • バックエンド側で、ユーザーへのレスポンスより遅 れてもいい、高負荷なタスクのための内部REST等 に使う • 裏でボトルネックになるシステム(ジョブキューの 受付など)が大量の同時接続を処理したい時に有効
  27. 27. Webページには ReactPHP不要 • PHPのメリット = レスポンスを返せばすべて終わり • 次のリクエストはすべて空っぽの状態から始まる、だ からPHPは安全で開発しやすい • レスポンスを返すのが目的の本質なら、普通にPHPの フルスタックフレームワークを使うべき • でも、PHPの便利さを犠牲にしてでも、初期化の前倒 しによる高速化と大量同時接続の受付が必要なとき…
  28. 28. • Node.js → コールバック地獄かPromise地獄、一瞬でも同 期I/Oが許されないきつさ • Go → ライブラリが… • Erlang → 文法が… • Scala Actor → コンパイル…JVM… • PHP → みんなだいすき♪
 サイト用のライブラリが再利用できる
 サイトと同じツールで開発できる
 一瞬で済むなら同期I/Oしてもいいよね、よね
  29. 29. 注意したいこと • ずっとメモリに常駐するので、ヘタすると普通PHPでは起きないよ うなメモリリークが起きます。たまに再起動する必要があるかも • リクエストがクラスを専有できないからstatic使うライブラリはダ メです(I/O待ちに入ったら別のリクエストにstaticやシングルトン を上書きされちゃう) • Laravel、Yii、FuelPHP、あとCake3のコードの再利用はたぶんア ウト • で、SymfonyのHttpKernelはいけるので、ここに来てSilexが急浮 上することになります → GitHubで php-pm 参照
  30. 30. こんなReactPHPのことを 喋ってみたい人はぜひ、 PHPカンファレンス関西へ

×