分布式ACM Online Judge 架构设计

分布式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

初步设计,欢迎大牛拍砖。。。

 
 
分类: 架构设计
原文地址:https://www.cnblogs.com/Leo_wl/p/3017955.html