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