论文部分内容阅读
在线评判系统(简称OJ,Online Judge)指在线用来评判程序的正确性、时间与效率空间效率的评判系统,一般在ACM/ICPC(国际大学生程序设计竞赛)等各种形式的编程比赛、教学或训练中用以评判提交的程序。近年来,各类程序设计竞赛引起了广泛的关注,对于在线评判系统在性能和兼容性上的需求越来越大。当前国内主流的在线评判系统,主要是基于单个服务器的集中式评判方式,这种评判方式能保证程序评判的正确性和公平性,但其串行化的程序评判流程已经不能满足大规模提交和短时间内爆发式提交的评判效率的业务需求。为了解决当前在线评判系统中所存在的并发提交时评判效率低下;对竞赛模式支持度不够;编译执行过程缺乏安全保证;系统抗压能力差;容错能力差等问题,基于SAE (Sina App Engine),本文提出了构建基于分布式的在线评判系统ODOJ(Open Distributed Online Judge)。通过对当前在线评判系统需求的细致分析,针对当前对在线评判系统的主要需求,本文作者将ODOJ设计为一种基于分布式在线评判系统。由于该系统基于分布式平台,能较好地解决了当前主流的评判系统并发评判效率低下的问题。系统在研发过程中,引入了沙箱技术,来解决当前的安全性差这一核心问题。同时,在设计过程中,系统注重多竞赛模式支持的解决方案,支持包括“练习模式”,“比赛模式”,“模拟模式”等模式在内的评判模式。同时,本文详细介绍了系统设计过程中的数据库设计,以及数据库对程序并发性的支持的技术细节。本文重点介绍了ODOJ的系统设计,实现,构建,部署所涉及的技术介绍以及技术细节,重点讨论了分布式部署模块,分布式数据库构建模块,沙箱模块,页面缓存以及分布式评判内核模块等核心模块的实现,展示了一个完整的分布式系统的构建过程。本文所涉及系统的开发技术包括新浪开放分布式平台(SAE)技术,基于HTTP的远程过程调用,Memcached数据缓存技术,冗余备份技术,LAMP等技术,通过对以上技术的应用和实践,ODOJ大大提高了在线评判系统的工作效率,在多并发的情况下,能够在较短时间内完成提交程序的评判,同时保证相关的安全性需求。