はじめに
みなさん、こんにちは!めもりー(@m3m0r7) です。
PHPerKaigi 2021 に「swoole と laravel-swoole を用いたハイパフォーマンスアプリケーションの構築 」というタイトルで登壇しました。
また、冊子に寄稿という形で別途「PHP で JVM を実装してみる 」を執筆しました。
登壇にあたって
オンライン登壇は PHP カンファレンス 2020 を含めると 2 回目になります。
オフラインの時の登壇は現地にいって、壇上に上がって喋るわけですが、オンラインは主催者によって十人十色であって PHP カンファレンスは当日にトークするのに対して、今回登壇した PHPerKaigi は予め収録しておく方法でした。
それぞれメリデメはあるかなとは思いますが、予め録音するのはやり直しが効きやすいというのが凄い良かったなって感じました。やり直さなかったけど。
今回の反省と Fiber について
資料内で「28 秒が 1.5 秒になったため 15 倍速になった」と書いていますが、「28÷1.5」を改めて計算し直したところ「約 19 倍速」でした。28÷1.5 は 18.666... です… 算数できなくてすいません。
さらに、収録が終わり、収録可能日が過ぎた時に気づいたことがあって「資料に Swoole ってそもそも何か?」という点に触れていませんでした。
また「Fiber と比べてどうなのか?」という質問を Ask The Speaker で頂いたのですが、予見される質問の事前調査を怠っていたのは本当に申し訳なかったです。
ただ RFC を見る限り、 uzulla さんや、 koyhoge さんが仰っていたとおり、Swoole のように I/O に注力しているわけではなく (もちろん Swoole は I/O 以外にも色々とあります)、ミニマムな構成であるように見受けられます。
非同期処理にあたっては、とくに一般的に PHP を触る層としてはあまり検討する事項ではない、メモリ安全な値を使ったりアトミックな処理を保証したり、ガベージコレクション、ロック、サブプロセス、割り込み処理…などなどの処理を考えるには些かウェブアプリケーションをメインとする言語にしてはドメインが広すぎるかなという所感があります。 ※ PHP で NES エミュレータ作ってる人は居ますが例外です
実際に Fiber を使ったわけではないので、エアプなんですが少なくても Swoole でここまでプロダクション環境に昇華するために苦労をしてきた中で Fiber だともっと地獄が待ってるかもしれないと考えてしまいます。
私達が本当に求めているのは脳死で安全にそして楽に非同期処理、マルチスレッド、マルチプロセスができることなのではないのかなと思っています。
それでいうと Go の非同期処理周りはすごいよくできていて、ものすごく扱いやすいと感じています。
よりハイパフォーマンスなアプリケーションをプロダクションにしたい時、所属企業に湯水の如く金が湧き出るほど潤沢なキャッシュと時間があるのであれば Go や Rust 一択な気はしています。
参加してみて
登壇日に Ask The Speaker としてしか参加できませんでしたが、オンラインであるとどうしても匿名性が高まってしまって、何気ない一言で傷つけてしまう・傷つけられてしまうみたいなのを懸念していたのですが、オフライン同様にみなさん、すごく優しくコメントとかしてくれていたので本当に参加してよかったなと感じました。
登壇に際してトラーナの取り組み
弊社ではよりコミュニティへ貢献したい、アウトプットをしていってほしいという気持ちから制度の一環として「OSS コミッティング・登壇手当制度」というのが爆誕しました。
より当人の成長を促すとともに、私達が普段お世話になっているコミュニティを応援していきたいという思いから出来上がった、制度です。
弊社のエンジニアに対する取り組みは以下の資料をご覧ください。