By烟花易冷

多评测机在线评测系统(Online Judge)构建与设计简述
2017-11-14

由于数据结构课设的缘故,我与队友们组队制作了一套多评测机在线评测系统(Online Judge)。我在其中负责了构架的工作,以及对中心系统的设计,现在我来简述一下我设计的思路,以便队友们用于实验报告(雾)

由于我们学校自己制作的OJ系统有一个令我们不满意的地方,那就是在考试等多人同时提交题目的时候,由于服务运作在一台服务器的缘故,评测速度特别慢,而我们自己的课程设计作品为了克服这个问题,采用了分布式评测机的设计,在多人同时提交代码的时候,可以实现无缝平滑添加评测机进入评测的行列之中,从而把等待的时间压制到最低。体制如下:

在我们的设计中,需要一个中心系统,这个中心系统中除了基本的用户管理、题目管理、题库管理以及各种基本的管理机制与排行榜外,仍需要维护两个队列,其中一个为评测队列,在用户每提交一道题的时候,将会往队列中添加一个题目的实例对象,而评测机在获取到队列中队头的题目(对象)之后,该元素将会被删除;而另一个为只增不减的任务列表,用户每提交一道题目之后,所提交的代码等信息将会进入到该队列中,用于接收评测机的评测结果以及作为“提交记录”被查看。
而在这个体制中,评测机需要通过轮询的方式,主动去获取工作队列中的对头并对其进行评测,待评测结束之后将评测结果(AC、WA..)、时间等返回至任务队列,此时评测结束。
因此,克服评测等待的问题,只需要在评测队列元素过多的情况下,直接添加新的评测机即可。由于采用了评测机轮询队列的方式主动获取题目,并且主动将结果往中心系统推送,因而在添加评测机的同时,无需对中心系统进行任何的修改,实现了平滑添加,并且可以根据评测队列中的元素个数进行评测机数量的调度。


本文只是一个简述,浅谈实现的思路,并且在设计中尚未达到去中心化的构建。最近心情不好,应该是一场解脱吧。谢谢47天的美好。