比较流行的sns营销网站,最新军事新闻,网站建设黄页免费在线观看,自助建站网站系统项目介绍
在线评测编程题目代码的系统#xff0c;出题人预先设置题目的输入样例和输出样例#xff0c;根据用户提交代码#xff0c;进行编译代码#xff0c;运行代码#xff0c;判断代码执行结果是否正确。
后端服务
网关服务
接收前端请求#xff0c;转发到对应的服…项目介绍
在线评测编程题目代码的系统出题人预先设置题目的输入样例和输出样例根据用户提交代码进行编译代码运行代码判断代码执行结果是否正确。
后端服务
网关服务
接收前端请求转发到对应的服务
用户服务
用户注册、用户登录、用户退出
题目服务
题目浏览在线做题题目提交、提交记录
判题服务
判题服务获取调用题目服务获取题目信息测试用例调用代码沙箱编译运行代码并对比结果
代码沙箱
编译运行代码返回执行结果、运行时间、运行内存
公共模块
数据模型、统一异常处理、全局响应封装、工具类
judgeCase:判题用例包括输入用例和输出用例
judgeInfo:判题信息包括程序执行信息运行时间运行内存
judgeContext:判题上下文包括题目信息编程语言输出用例输出结果判题信息
微服务架构优点
微服务架构是一种软件架构风格把大而全的单体应用拆分为多个职责单一的模块每个服务单元独立部署运行和维护。服务单元之间通过网络通信进行交互从而实现完整系统的功能。微服务架构可以提高系统的灵活性可维护性可扩展性容错性。
本项目中使用微服务架构将较重的服务判题服务和代码沙箱和核心服务用户服务和题目服务进行分离解耦即使判题服务因为代码沙箱压力过大而阻塞也不会影响核心业务运行。
用户服务
普通用户
注册、登录、获取登录用户、注销、修改个人信息
管理员
增删改 根据id获取用户(包装类) 分页获取用户包装类
题目服务
管理员
增删改、根据id获取题目、分页获取题目
普通用户
分页获取题目(包装类)、根据id获取题目(包装类)、分页获取题目提交列表、根据id获取提交题目详情
提交题目限流器
题目提交流程
向题目提交表记录题目id,用户id,编程语言和用户代码设置判题状态为待判题。通过消息队列将questionSubmit对象传递给判题服务
限流器
// 1、 声明一个限流器
RRateLimiter rateLimiter redissonClient.getRateLimiter(key);// 2、 设置速率5秒中产生3个令牌
rateLimiter.trySetRate(RateType.OVERALL, 3, 5, RateIntervalUnit.SECONDS);// 3、试图获取一个令牌获取到返回true
rateLimiter.tryAcquire(1)RateType.OVERALL所有实例共享令牌
RateType.PER_CLIENT单实例令牌数
redission分布式限流采用令牌桶思想和固定时间窗口trySetRate方法设置桶的大小利用redis key过期机制达到时间窗口目的控制固定时间窗口内允许通过的请求量。
判题服务
判题模块作用
查询题目提交和题目信息调用代码沙箱把代码和输入用例交给代码沙箱去执行收集输出结果并执行判题逻辑
判题流程
通过消息队列获得questionSubmit对象获取题目信息判断题目是否存在。存在提交数加1。获取用户代码编程语言输入用例输出用例。更新判题状态为判题中调用代码沙箱获取程序运行结果设置判题上下文对象采用策略模式调用不同判题方法进行判题主要是比较不同语言的时间和内存是否超出限制以及输出用例和代码沙箱程序执行结果是否一致设置判题状态判题成功/判题失败和通过数
多种代码沙箱
定义通用代码沙箱调用接口提供多种代码沙箱的实现类
实例代码沙箱跑通业务流程
远程代码沙箱自主实现的代码编译、执行的沙箱接口
三方代码沙箱开源的代码沙箱服务 judge0的代码沙箱
远程和三方代码沙箱通过http调用
沙箱类型配置化application.yml中动态配置沙箱类型
沙箱实例工厂化读取配置适用工厂模式创建对应的代码沙箱实现类
沙箱调用代理化使用代理模式在调用代码沙箱前后进行统一的日志操作
代码沙箱
实现方式
Java原生代码沙箱和Docker代码沙箱
实现思路
用户代码保存为文件
编译代码得到class文件
String compileCmd javac -encoding utf-8 Main.java;
Process compileProcess Runtime.getRuntime().exec(comoileCmd);
int exitCode compileProcess.waitFor()
if(exitCode0){逐行读取输出;
}else{逐行读取正常输出;逐行读取异常输出;
}执行java代码
String runCmd java Main.javainputArgs;
Process runProcess Runtime.getRuntime().exec(runCmd);收集整理输出结果
执行结果、执行时间、执行内存
文件清理释放空间
错误处理提升程序健壮性
异常情况
执行超时
占用内存
读文件
写文件
运行其他程序
执行高危操作
安全控制
超时控制
创建守护线程超时自动中断Process
限制资源分配
java -Xmx256M限制最大占用堆空间256M
限制代码–黑白名单
public static final ListString balckList Arrays.asList(Files,exec);限制权限
Java安全管理器
public class DefaultSecurityManager extends SecurityManager{public void checkPermission(Permission perm) {throw new RuntimeException(权限异常perm.toString());}public void checkRead(String file) {throw new RuntimeException(Read权限异常file);}public void checkWrite(String file) {throw new RuntimeException(Write权限异常file);}public void checkExec(String file) {throw new RuntimeException(Exec权限异常file);}public void checkConnect(String host,int port) {throw new RuntimeException(Connect权限异常host:port);}}执行Java代码时
java -Dfile.encodingUTF-8 -Djava.security.managerDefaultSecurityManager -cp . Main运行环境隔离
Java原生代码沙箱
通过Process.exec执行命令行操作来执行代码并通过Process对象的流来获取输出结果不够安全
Docker代码沙箱
创建隔离的Java容器并且通过exec命令在容器内执行Java代码和获取输出更加安全。
用户代码保存为文件
编译为.class文件
拉取镜像、创建容器、运行容器执行代码得到输出结果
创建一个交互容器创建容器时指定文件路径把本地文件同步到容器中
创建容器时进行内存限制网络限制读写限制
设计模式
工厂模式
代理模式
策略模式
模版方法模式 文章转载自: http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.zcrjq.cn.gov.cn.zcrjq.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.hysqx.cn.gov.cn.hysqx.cn http://www.morning.qrnbs.cn.gov.cn.qrnbs.cn http://www.morning.mhlsx.cn.gov.cn.mhlsx.cn http://www.morning.phjny.cn.gov.cn.phjny.cn http://www.morning.jgncd.cn.gov.cn.jgncd.cn http://www.morning.rwyd.cn.gov.cn.rwyd.cn http://www.morning.bqpgq.cn.gov.cn.bqpgq.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.jcxgr.cn.gov.cn.jcxgr.cn http://www.morning.wqmpd.cn.gov.cn.wqmpd.cn http://www.morning.bdqpl.cn.gov.cn.bdqpl.cn http://www.morning.jqsyp.cn.gov.cn.jqsyp.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.qzfjl.cn.gov.cn.qzfjl.cn http://www.morning.zlkps.cn.gov.cn.zlkps.cn http://www.morning.zwznz.cn.gov.cn.zwznz.cn http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn http://www.morning.rdxnt.cn.gov.cn.rdxnt.cn http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn http://www.morning.rkkh.cn.gov.cn.rkkh.cn http://www.morning.wspjn.cn.gov.cn.wspjn.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.qljxm.cn.gov.cn.qljxm.cn http://www.morning.qrndh.cn.gov.cn.qrndh.cn http://www.morning.yckrm.cn.gov.cn.yckrm.cn http://www.morning.blqmn.cn.gov.cn.blqmn.cn http://www.morning.yszrk.cn.gov.cn.yszrk.cn http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.wqmyh.cn.gov.cn.wqmyh.cn http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.wmpw.cn.gov.cn.wmpw.cn http://www.morning.zympx.cn.gov.cn.zympx.cn http://www.morning.pqfbk.cn.gov.cn.pqfbk.cn http://www.morning.rgxn.cn.gov.cn.rgxn.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.nrzkg.cn.gov.cn.nrzkg.cn http://www.morning.bnlsd.cn.gov.cn.bnlsd.cn http://www.morning.haolipu.com.gov.cn.haolipu.com http://www.morning.yydzk.cn.gov.cn.yydzk.cn http://www.morning.nytqy.cn.gov.cn.nytqy.cn http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn http://www.morning.qpsft.cn.gov.cn.qpsft.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.ylpwc.cn.gov.cn.ylpwc.cn http://www.morning.lcdtb.cn.gov.cn.lcdtb.cn http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn http://www.morning.dyght.cn.gov.cn.dyght.cn http://www.morning.gpsrk.cn.gov.cn.gpsrk.cn http://www.morning.cwwts.cn.gov.cn.cwwts.cn http://www.morning.ycwym.cn.gov.cn.ycwym.cn http://www.morning.mnygn.cn.gov.cn.mnygn.cn http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn http://www.morning.c7623.cn.gov.cn.c7623.cn http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn http://www.morning.deanzhu.com.gov.cn.deanzhu.com http://www.morning.fkyqt.cn.gov.cn.fkyqt.cn http://www.morning.htpjl.cn.gov.cn.htpjl.cn http://www.morning.lgtzd.cn.gov.cn.lgtzd.cn http://www.morning.frllr.cn.gov.cn.frllr.cn http://www.morning.lwygd.cn.gov.cn.lwygd.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.lkkgq.cn.gov.cn.lkkgq.cn http://www.morning.rythy.cn.gov.cn.rythy.cn http://www.morning.nwrzf.cn.gov.cn.nwrzf.cn http://www.morning.gthc.cn.gov.cn.gthc.cn http://www.morning.rkrcd.cn.gov.cn.rkrcd.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.thwhn.cn.gov.cn.thwhn.cn http://www.morning.rqkzh.cn.gov.cn.rqkzh.cn http://www.morning.ygbq.cn.gov.cn.ygbq.cn http://www.morning.dsncg.cn.gov.cn.dsncg.cn http://www.morning.pbgnx.cn.gov.cn.pbgnx.cn http://www.morning.fpqsd.cn.gov.cn.fpqsd.cn