はじめに

シェル芸オンラインジャッジというウェブサイトを開発しています。 今回は実行結果が返ってくるまでに10秒程度かかっている問題に対応しました。

元々はシェル芸を受け付けてからDockerコンテナを起動していたのですが、 コンテナ起動に時間がかかっているようだったので、 シェル芸実行用コンテナを常に待機させておくことで応答速度の向上を目指しました。

シェル芸オンラインジャッジ

修正方法について

シェル芸オンラインジャッジのソースコードを丸ごとGeminiに渡して、 具体的に修正方法を教えてもらっています。

コンテナ管理スクリプトを作成

GeminiにDockerコンテナを管理するスクリプトを書いてもらいました。 少し修正していますが、基本的にはGeminiの出力そのままです。 行数がそこそこあるのでリンクだけ貼ります。

backend/scripts/container_manager.py

このスクリプトでは常にN個(現状N=3)のDockerコンテナを待機させる処理が書いてあります。 シェル芸実行用コンテナは使い捨てなので、 一度シェル芸を実行したコンテナは破棄して、 その分を補充します。

シェル芸実行スクリプトの修正

元々はシェル芸実行スクリプトでコンテナを作成していましたが、 container_manager.pyから起動中のコンテナを受け取って、 そのコンテナでユーザのシェル芸を実行するように修正しました。

backend/scripts/run_shellgei.py

応答速度が向上した

ちゃんと計測はしていませんが、 元々はシェル芸の実行結果が返ってくるまで10秒程度かかっていました。 シェル芸実行用コンテナを常に待機させておくことで、 すぐに結果が返ってくるようになりました。 やはりコンテナの起動に時間がかかっていたようです。

おわりに

今回はシェル芸オンラインジャッジのパフォーマンス向上を目指して、 シェル芸実行用コンテナを常に待機させておくように変更しました。 すぐに実行結果が返ってくるようになってよかったです。 それでは、また。