Web上でプログラムコードを動かすサービスが近年増加していますが、その技術的な実現方法はいくつかのタイプに分けられます。
実行コンテナの占有・共有による分類
ユーザーから送られたプログラムコードがサーバーに送られ、コンパイル・実行される際、各ユーザーに専用の仮想サーバー(コンテナ)が割り当てられ実行される占有型と、各ユーザーが1つの共有サーバー内で混在して実行される共有型があります。
共有型の方がコストメリットは大きいものの、同居する別ユーザーが悪意あるソースコードを送信していた場合に悪影響を受ける可能性があるなどのセキュリティリスクが増します。
dokojavaは、実行のたびに全ユーザーに1つのサーバーを割り当てる「占有型」ですので、各ユーザーの実行は分離されており、セキュリティ面で安心して利用いただけます。
サーバーで稼働するプロセスとブラウザ間の対話方式による分類
サーバー上で実行を開始するプログラムに対して、ユーザーのキーボード入力内容を事前にまとめて引き渡す同期実行方式と、稼働中のプログラムに逐次リアルタイムに入力を引き渡す非同期実行方式があります。
同期実行方式の方がシステム実装が大幅に単純化できるほか、プロセス実行時間が極めて短くなるため、サーバーリソースの消費を大きく抑えられるというメリットがあります。一方の非同期方式では、サーバー上のプロセスとブラウザ画面との間で標準入出力をリアルタイムで伝送し、入力と出力を逐次行い、実際のCUIアプリケーションに近い利用を実現できます。
dokojavaは「非同期実行方式」で動作していますので、プログラムを起動するとサーバー上で長時間プロセスが動作を継続し、各ユーザーはリアルタイムにキー入力を送信することができます。
リソース消費について
このように、dokojavaは、いずれもシステムリソースの消費が大きな「占有型」「非同期実行型」を採用しているため、アクセス集中によりサーバー資源がより枯渇しやすいという特性があります。
これに備えるため、dokojavaでは複数台サーバーによる負荷分散やスケールアウト機構を組み入れているほか、アクセス頻度制限やプランによる実行優先制御などを組み入れています。