这个项目构思于大概三年前。我希望能够设计一种安全、高效、可扩展、基于xNIX的在线评测系统。但一直无法构思出一种合适的框架。最近幸运地遇到了 Eureka moment,便着手设计。项目继承了当年取的名字 OIOJ,代表 OIOJ Instructional Online Judge (受 lipeiqian 神牛思想影响)
基本结构功能
系统分Web服务器和评测服务器两部分。评测服务器用 C++ 撰写,运行在 Linux 上,但应该可以比较容易地移植到 BSD;Web 服务器使用 php,可以运行在 Windows 上,但显然毫无必要。
两类服务器之间使用 Socket 通信,每次评测传送程序和题目 ID 号码,数据预先存放在每台评测服务器上。
支持屏幕或文件输出(屏幕输出时把stdin和stdout重定向到文件)
支持交互式问题(每个题可指定依赖文件)
支持 special judge(Cena 格式)
支持提交答案类问题(传送 zip 压缩包)
支持多CPU(选手程序只允许使用1个CPU),可设置同时评测多个程序(每个程序一个CPU,或每个CPU多个程序也可以,但可能影响公正性)
每个评测服务器可设置时间限制乘数以平衡高性能和低性能服务器的差异
通过限制程序的系统调用、设置专门帐号调用程序、程序在 chroot 环境里运行的方式最大程度保障安全。
在 Web 服务器上添加题目,题目自动传送到每台评测服务器:题目基本信息由专有格式通过 socket 传送,数据使用 FTP 协议传送(为了防止阻塞评测服务器)。添加评测服务器相对简单,只要把已有服务器上的数据传送到新服务器上就行了。
服务器之间通讯安全由防火墙和 Token 来保护。
未来设想
考虑增加 Amazon EC2 支持,由 EC2 云计算平台提供评测服务。
完成时间
争取在九十月内部署到学校,为今年的联赛培训服务。在学校进行测试后部署到互联网。





Recent Comments