9 ポイント 投稿者 xguru 2024-05-27 | 2件のコメント | WhatsAppで共有
  • PHPは現在、インターネット上のWebサイトの約75%を占めている
  • PHPはプログラミング言語の中で「セクシーボーイ」ではないかもしれないが、インターネット誕生以来重要な役割を果たしてきた
  • これでPHPをWasmerとWasmer Edge上で完全に実行できるようになった(オープンベータ)

WebAssemblyでPHPを実行する重要性

  • WebAssemblyの特性により、プログラムがアクセスできるリソースを安全に制限できる
  • OSやハードウェア仮想化のオーバーヘッドなしにPHPを安全に実行できる
  • Wasmerチームは、PHPがWebAssembly上で完全かつ可能な限り高速に動作するよう、非常に多くの時間を投じてきた
  • WebAssembly内でopcodeキャッシュを有効化し、最大3倍高速化した

PHPアプリにserverless-likeな拡張性を提供

  • すべてのPHPアプリにserverless-likeな拡張性を提供できれば、非常に大きな価値が生まれる
  • PHPアプリをEdgeで実行し、クラウドプロバイダーが課す料金の一部だけを支払えばよい
  • WasmerならあらゆるPHPアプリケーションを実行でき、アプリがサンドボックスを破って不適切な有害行為をする心配もない

最も人気のあるPHPフレームワークがWasmerとWasmer Edgeで実行可能

  • WordPress
  • Symfony
  • Laravel
  • すべてのPHPテンプレート: https://wasmer.io/templates?language=php
  • 参考: カスタムファイルシステムボリュームに対するWasmer Edgeのサポートは進行中。SQLiteを使用するデプロイ済みアプリ(WordPressやSymfonyなど)は、現在データベースの変更をメモリにのみ保存し、まだ永続化はされない

WebAssemblyとPHPを最大限に活用

  • opcodeキャッシュを有効化することで、WordPressを修正なしで3倍高速に実行できる(600msから200msに短縮)

自分で試してみる

  • 通常 php -S localhost:8000 . を実行するなら、今後はWasmerを通じて完全にサンドボックス化して実行できる:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • WordPressもローカルで簡単に実行可能。WordPressリポジトリをクローンした後、ルートで wasmer run . --net を実行(Wasmer 4.3.1が必要)
  • 完全にサンドボックス化された状態でサーバー上で動作する、フル機能のPHP CLIが提供される
  • アプリが /etc/passwd のようなものにアクセスすることを、もう心配する必要はない

技術的偉業

  • WasmerでPHPをWebAssembly上で完全に動作させるのは簡単なことではなかった
  • プロセスを追いながら多くの問題を解決した:
    • PHP内でtry/catch文を使うために必要なlongjmp/setjmp実装で、stackが上書きされ正しく復元されない不可解なバグを発見
    • 外向きHTTP呼び出しを10倍遅くしていたバグを発見し修正
    • PHP opcacheをデフォルトで有効化し、PHPの実行時間を最大3倍高速化
    • ファイルシステム仮想化レイヤーやネットワーキング(IPv6)に関する多数の小さな修正
  • 以前のWordPressをWasmerで動かすブログ記事をたどったことがあるなら、WordPress側の挙動を変えたりブロッキングするエッジケースを回避したりするために、膨大なコード修正(いわゆるハック)が必要だったことを知っているはず
  • 最新のWasmerリリースでは、WordPress、Laravel、Symfonyがコード修正なしでWasmer上で動作する

速度

  • 単にPHPを基本的な速度で動かすだけでは不十分で、WebAssembly上で可能な限り高速に動かしたかった
  • PHPには、実行速度を大幅に向上させるZend Opcacheモジュールがある
  • Opcodeキャッシュモジュールは、PHPソースが変換されるバイトコードを最適化・キャッシュし、すでに処理済みファイルのAST構文解析にかかる時間を節約する
  • Opcodeキャッシュはアプリが処理できるリクエスト数を最大3倍まで増やせるため、WebAssemblyで有効化するのは明らかに有効だった
  • しかしopcodeキャッシュ(およびZendモジュールのロード)は、デフォルトでは無効化されていた(Wasmでは使えないdlopen、dlsymなどが必要なため)
  • そこで独自の探求に乗り出した: PHPでopcodeキャッシュを有効化する
    • 調査の末、新しい静的リンク方法を見つけ、その過程で数多くの修正が必要だったが、最終的に動作に成功した
  • WasmでOpcacheなしのWordPress実行時間: 約620ms
  • WasmでOpcacheを有効にしたWordPress実行時間: 約205ms
  • Opcacheを有効にするだけで3倍の高速化になる!
  • PHPをネイティブ速度に近づけるための改善点がまだ多くあることも分かった(今後に期待)

さらに多くの機会が開かれる

  • WordPress playgroundのように、現在Emscriptenに依存してブラウザでPHPを動かしているプロジェクトにも、さらに多くの可能性を開く
    • こうしたプロジェクトは、ブラウザとEdgeの両方で動作するパッケージとして作成できるようになる
  • cold-startに対するまったく革新的なアプローチを準備中(Cloudflare & Fly.io、こちらは見ています!)
  • Edge市場にはエキサイティングな時期が近づいている

2件のコメント

 
tsboard 2024-05-28

個人的には、PHPが今でもなお盛んに使われているのは、なんだかすごいですし不思議でもあります。ははっ 悪名高かった時代を経て、今はかなり変わったと言われていますし、PHPをもう一度使ってみようかなという気にもなります。

 
xguru 2024-05-29

Hacker NewsでもGeekNewsでも、PHPだと嫌がる人は多いですが(笑)
「Web」という技術がまったく別のものに置き換わらない限り、これからも使われ続けるのではないかと思います。
「言語」というものに焦点を当てるのではなく、「Web」に合う技術の一つとして見るべきなのではないかと思います。