关于HOJ以及Online Judge系统的一些胡诌
今天上体系结构溜号的时候突然想到了HOJ的问题。虽然喊HOJ需要修,喊了也有挺长时间,不过似乎真的没有认真考虑一下HOJ要修成或者重写成什么样。
如果只是修内核的bug,再把UI作得漂亮一些,真的不如不修,直接下一个北大开发的Open Judge搭上就行了。DaLord曾经强调搞OJ要有自主的东西,所以我们再开发一个Open Judge,搞微学习,除了恶趣味就没有别的趣味了。
想到HUST的Virtual Judge,现在这么火,大大小小的学校、大大小小的比赛在上面搞得不亦乐乎。实际上,VJudge做的工作只是将提交到上面的代码再提交到别的Judge上,根据别人的返回结果返回。技术上是没有什么创新之处,即使没有Web开发经验的人如我也大概能猜到用什么样的手段、什么样的函数实现。不过他确实在国内ACM/ICPC圈子中很火。
最近在一直在做Language Grid的调研,满脑袋都是一坨一坨的Java代码,在今天溜号时,突然对于VJudge的事好像有点明白了。
包括HOJ在内的Online Judge系统,都可以归纳为三个层次,users、service、resources。这里的service可以理解成运行在OJ服务器上的服务器程序,而resources是保存在服务器上的标准输入数据和标准输出数据。users提交题目的行为实际上是通过service,调用resources。而现在国内众多Online Judge系统,普遍的模式是:service与resources放在同一个服务器上。如图
而VJudge做的则是在users和service中再加入了一个service,这种做法在只有一个server的时候是很荒唐的。但是,在server的数量非常多的时候,就变得非常牛了。
通过一个VJudge,就可以实现一场在线比赛中,即有国内OJ的题目,又有国外OJ的题目。
现在OJ系统中面临的一些问题:一个是,资源的重复,一道题目,HOJ有、HDOJ有、POJ也有、ZOJ也有、NKUOJ、HUSTOJ、FOJ都有。另一个是,不同的OJ系统速度不同。一份在HOJ要跑1000ms的代码,可能在HDOJ只用500ms。所以,我在想,既然VJudge把users和server分开了,能不能将resources和service分开,将service分成若干层次,如图。
这样,powerful server的用作完成传统意义上的Judge service,保证了统一,提供题目的接口,而题库、比赛系统以及用户系统可以保存在各学校的node上,node通过server的接口获得传统意义上的在线评测。
丫丫到这里,发现以及严重跑题,最关键的还是不能解决HOJ要修成什么样这个问题。哎,算了,回去读代码吧。