ゲームサーバにおいてPHPからJavaライブラリを利用する際に処理効率と安定性、運用のしやすさを実現する実装方法と、この実装を導入する際の事例をウマ娘プリティーダービーおよびワールドフリッパーでの実例を踏まえてご紹介します。
近年ゲームサーバでは1つのブログラム言語だけが稼働していることは少なく、多少なりともスクリプト言語・コンパイル言語ともに使われているケースが多いです。通常ではPHPにライブラリを移植するといった手法がとられますが処理速度の面で問題がでるうえ、移植である以上元のJavaライブラリと処理の同一性を担保することもかなりの労力が必要となってしまいます。この点は高処理効率と運用のしやすさの両立を目指す必要があるゲームサーバとしては問題となります。
これを解決するためにCによるExtensionを作成しPHPからJavaライブラリを直接実行できるFFI(Foreign Function Interface)を実装しました。特に今回のケースでは処理時間はPHPで等価なコードを移植した場合に比べ、100msから1msと約100倍の差が出ました。この事例をもとに実装に至った経緯や、具体的な設計構成についてご紹介します。
講演者プロフィール
伊藤 英知
サイバーエージェントグループのソーシャルゲーム会社を経て、2012年より株式会社Cygamesに参画。
フィーチャーフォン/スマートフォンのブラウザおよび、スマートフォンのネイティブゲーム、コンシューマゲームの開発・運用に携わる。
負荷対策やミドルウェアの検証や社内で使用しているサーバフレームワークのメンテナンスなど社内のプロジェクトを横断的に支援、より安定して快適に遊べるよう日々開発を行っている。
《講演者からのメッセージ》
PHP ExtensionやJNIは一つ一つは昔からある枯れた仕組みですが、
適用する場所を見極めて組み合わせるとPHPからJavaのライブラリを直接呼び出すことができるようになります。
これによりメンテナンス性とパフォーマンスの両方の問題を同時に解決できたという事例を紹介します。
あわせて、新しいソリューションを安全に投入する際の留意点について解説します。
PHP Extensionや他の言語との連携にご興味のある方はぜひ御覧ください。