A.3 检测流程
经过前面两节的介绍,大家对整个平台已经有一个直观整体的认识,那么这个平台是如何运行的呢?它的运行流程是什么?本节将详细介绍云计算在线检测平台检测用户代码的流程。
总体来说,平台对用户代码的检测流程主要包括代码保存、代码预处理、代码运行和结果分析返回、结果显示五个阶段,下面将分别介绍这五个阶段:
代码保存阶段:用户在网页上粘贴自己的代码,点击submit提交之后,网站会把用户的代码保存在服务器上一个唯一的文件中,并在后台数据库中保存这一次提交的信息和代码路径。
代码预处理阶段:用户在提交代码之后,网站在进行代码保存的同时还会调用Shell文档来进行代码的预处理。Shell文档被调用运行之后就会开始用户代码的预处理。首先Shell文档会按照调用的路径参数从本地找到用户代码,然后检测用户代码,比如程序是否是可运行的Java代码、是否符合MapReduce框架要求等。如果预处理成功就会将代码提交给Hadoop分布式环境运行,如果预处理失败就会直接返回并将错误原因呈现到网页界面上。
代码运行阶段:代码预处理成功之后会被提交到Hadoop分布式环境上,Hadoop调用事先已经保存在HDFS(Hadoop分布式文件系统)上的输入数据来运行代码。在平台的处理过程中,代码在Hadoop上的运行和在线下自己提交代码到Hadoop上的运行相同。代码运行结束之后,Shell文档会将结果信息重定向到代码文件中同样唯一的结果信息文件中,以交给下一步处理。
结果分析返回阶段:结果分析返回阶段主要是分析Hadoop运行的结果信息,对结果分类,生成结果文件,然后将相关的信息写入数据库,供平台显示代码运行结果时调用。Shell在分析结果时,首先查看有没有输出结果,如果有输出结果就和标准输出进行对比,正确就返回结果Accepted,错误就返回结果Wrong Answer。如果没有结果,再将输出信息同一些结果关键词进行匹配,然后返回匹配成功的那一类错误信息。
结果显示:用户在My Submission界面点击result一栏的结果链接之后,页面会调用数据库接口,搜索此次提交记录在数据库中对应的记录。找到之后,页面直接获取结果信息文件的路径,然后将其内容显示在页面上,如果代码有误,用户就可以知道代码的错误所在,用户进行调整之后重新提交。
结合上面的介绍,网站处理的流程图如图A-3所示。
图 A-3 网站处理流程图