分布式ACM Online Judge 架构设计
服务器职责:
Web Server:提供用户界面,获取用户提交的代码,通知Judge Server评测编号,为Judge Client提供获取评测数据和提交评测结果的接口;
Judge Server:维护评测队列,维护Judge Client的状态,维持与Judge Client的连接,监听Web Server的通知,将评测任务分派给Judge Client;
Judge Client:接收Judge Server传来的评测编号,通过Web Server获取评测数据和提交评测结果。
流程说明:
1、 用户提交代码给Web Server;
2、 Web Server将代码存入DB Server,通知Judge Server此次评测的编号(数据库中的ID);
3、 Judge Server将编号加入评测队列,检查有无空闲的Judge Client,有则将此评测编号通知此Judge Client,无则等待Judge Client;
4、 Judge Client接到来自Judge Server的通知后请求Web Server提供的评测数据接口获取评测数据(代码、测试数据)(每个Judge Client应有一对密钥进行身份验证);
5、 Judge Client进行编译、运行、评测;
6、 Judge Client请求Web Server提供的提交评测结果接口,提交评测结果(每个Judge Client应有一对密钥进行身份验证);
7、 Judge Client通知Judge Server自己已经评测结束,将自己的状态改为空闲。
架构优点:
1、 根据情况可以轻松的增加减少Judge Client:
比如比赛时可以多增加几个Judge Client增加评测速度,平时空闲时可保持一台Judge Client正常工作即可;
2、 Judge Client可以处在内网环境中,无需具有公网IP:
将Web Server与Judge Server至于公网环境即可;
3、 安全性与稳定性好:Judge Client无需直接与数据库进行交互,保证了安全性。
http://www.cnblogs.com/CrazyProgram/archive/2013/04/12/ACM_Online_Judge.html
初步设计,欢迎大牛拍砖。。。