青島大學OnlineJudge的運作原理

青島大學OnlineJudge由四個部分組成,如下。

(1)Onlinejudge(oj-backend)(https://github.com/QingdaoU/OnlineJudge):OnlineJudge的後台

(2)OnlineJudgeFE(https://github.com/QingdaoU/OnlineJudgeFE):OnlineJudge的前台

(3)JudgeServer(judge-server)(https://github.com/QingdaoU/JudgeServer):OnlineJudge的評判伺服器,可以安裝在不同機器上,使用web方式運作(request與response)

(4)Judge(https://github.com/QingdaoU/Judger):OnlineJudge評判伺服器的評判函式庫,使用Python與C語言撰寫,用於編譯與執行程式,產生執行結果。

Onlinejudge與OnlineJudgeFE整合在一起,JudgeServer與Judge整合在一起。

Step1)Onlinejudge(oj-backend)(OnlineJudge後台)匯入OnlineJudgeFE(OnlineJudge前台),當使用者上傳程式進行評判時,程式會放入資料庫,從資料庫讀取程式再透過request功能傳送給judge-server,judge-server相當於網頁伺服器。多台judge-server之間使用rsync同步題目的測資。OnlineJudgeDeploy用於建立OnlineJudge整體功能,啟動這四個部分,並整合redis與postgres。

檔案OnlineJudgeDeploy/docker-compose.yml,內容如下。

Step2) oj-backend的映像檔,可以使用OnlineJudge/Dockerfile進行製作,會下載OnlineJudgeFE作為前台(RUN curl -L $(curl -s https://api.github.com/repos/QingdaoU/OnlineJudgeFE/releases/latest | grep /dist.zip | cut -d '"' -f 4) -o dist.zip),如此整合前台與後台,以下為OnlineJudge/Dockerfile。

Step3)judge-server映像檔可以使用JudgeServer/Dockerfile進行製作,會編譯執行產生套件_judge(git clone -b newnew --depth 1 https://github.com/QingdaoU/Judger && cd Judger && \

mkdir build && cd build && cmake .. && make && make install && cd ../bindings/Python && python3 setup.py install),如此整合JudgeServer與Judge,以下為JudgeServer/Dockerfile

Step4)使用rsyncd同步測資功能在OnlineJudge/deploy/test_case_rsync/Dockerfile下,讓多台judge server可以經由rsyncd同步測資。