Kojs3
競技プログラミング用オンラインジャッジシステム
(C) 2021 - 2022 Tatsuto Yamamoto
レポジトリ(コード置き場)
- スコアサーバー バックエンド (TypeScript)
- スコアサーバー フロントエンド (HTML+TypeScript)
- コンテナマネージャ (Go)
- ジャッジ/コード実行部分 (Go)
- キュー監視スクリプト (TypeScript)
実行のフロー
実装言語
- スコアサーバー
- バックエンド: TypeScript (Express.js)
- フロントエンド: TypeScript (ライブラリなし)
- マネージャ,ジャッジ部分: Golang
実行コンテナ制御
コード実行環境はDocker(コンテナ型仮想環境)を利用
実行コンテナの作成,起動,削除などの操作はGo向けDocker公式ライブラリを利用
キューイング/ 分散化
実行サーバーを冗長化/スケールアウトさせることが可能
コンテナマネージャはGinによる小さなWebAPIとして動作しており,
ステートレスに動作するためスケールが容易
攻撃対策
- Dockerコンテナをネットワークから分離
- メモリ制限はコンテナ側で行っている為MLE(メモリ制限超過)した場合コンテナごと落ちる
- フォーク爆弾(再帰的にプロセスを増やし、コンピュータをフリーズさせるウイルス的プログラムの一種)対策としてpidLimitを512に制限
仕様
対応言語
- C (GCC GNUC11)
- C (Clang C11)
- C++ (g++ GNUC++11)
- C++ (Clang++ C++11)
- Ruby (CRuby 3.x)
- JavaScript (nodejs 14.x)
コード量 (参考データ)
4月5日時点
-------------------------------------------------------------------------------
言語 ファイル数 空行 コメント コード
-------------------------------------------------------------------------------
TypeScript 39 132 116 1115
Go 12 63 20 503
HTML 11 44 32 422
-------------------------------------------------------------------------------
SUM: 62 239 168 2040
-------------------------------------------------------------------------------