基于信号处理的在线云评测+社区系统( 1)
2017年5月-6月,本小组做山东大学软件工程专业项目实训。我们做的项目是“基于信号处理的在线云评测+社区系统”,我和另一位组员zhan010g负责数据库后台方面。
首先我根据项目报告做了E-R图。
实训项目背景(明确的应用领域和实际背景)
业务背景:
OJ(Online Judge)是一个在线的程序评测系统,学生通过该系统可以充分锻炼自身的编程水平。以往的评测系统往往存在资源分配不均等多种问题,我们团队希望在过去的基础上,在服务器底层进行优化,通过对服务器处理资源的合理使用,以及使用轮询队列对大量并发请求的处理,再通过系统信号同步进行精确的判断,创建一个更为优质的在线云评测系统。
技术背景:
技术上,使用Django、Bootstrap、AJAX框架。使用Python、HTML和JavaScript语言进行系统的编写,形成一个B/S架构的在线程序评测系统。
· 二、实训目标
通过小组团队合作完成本次“基于信号处理的在线云评测系统“实训,熟练掌握Python、HTML和JavaScript语言,了解并会使用当前流行的架构搭建Web应用,最终实现一个B/S架构的在线程序评测系统。通过不断的迭代优化,创建一个效率表现优异的在线云评测平台,能够处理大规模的程序处理请求并准确返回结果,并具备一定的安全性。
· 三、系统功能
系统主要划分为以下四个功能,具体业务需求描述如下:
1.评判内核
处理客户端传送来的程序运行请求,基于服务器使用的Linux系统,通过信号同步来获取每一个线程的运行结果,调用Linux内核的API来操作,监视每一个线程直到其运行结束,对于返回状态进行逻辑判断,获得该线程的真实终止信号。对于用户提交的程序返回合适的结果,并对程序正确性进行判断。
2.保证系统安全性
安全性是OJ最大的问题,因为需要用户在我们的系统上编译程序并运行,这时要防范恶意代码对系统造成影响。我们将会对用户提交的代码进行安全性检测,要用低权限运行程序、有可能的话使用沙箱限制更多的权限;保证网站安全,防sql注入等;防范编译器修改:去掉不安全的.h和obj;进行源代码分析,定义一些危险关键字,实现关键词过滤。
3.建立队列保证系统在大流量下正常使用
为应对未来系统投入使用之后,用户量增大,或者一桶作为做大型比赛的载体,需要在服务器要做队列,并实现多服务器评判。
4.前端建设
建立一个美观简洁的前端界面,保证系统有一定美感的同时,清晰的向用户提供我们的题目列表,以及提供给用户直观方便的做题界面。
· 四、技术方案
该项目可以分为两个部分来实现:
第一部分是针对服务器设计的内核程序,也是整个项目的核心,该程序负责处理客户端传送来的程序运行请求,初步设计是使用轮询队列存储所有的待处理请求,内核程序逐一从中取出,平均分配给服务器的每一个运算核心,运行结束后放回返回队列并继续下一个处理。
基于服务器使用的Linux系统,我们可以通过信号同步来获取每一个线程的运行结果,具体的实现就是调用Linux内核的API来操作,监视每一个线程直到其运行结束,对于返回状态进行逻辑判断,获得该线程的真实终止信号