前言

事实证明,每一届,每几年,各地高校,都会出现一些 "志士仁人" 出于提升自己或服务母校的目的打算开发一个 OJ。

我们当然也不例外。

所以,望眼当下,0202 年,一个具备怎样特质的 OJ 才能从众多 OJ 中脱颖而出,既能更好地服务母校,又能为开源界的贡献一点新思路。我想,SDUOJ 能给出一个答案。

先给出项目:SDUOJ​sduoj.gitee.iohttps://github.com/SDUOJ/OnlineJudge​github.com

特性

作为 OJ 最直接的使用者/开发者,我们清楚地明白一个好用的 OJ 除了常规功能外必须要具备的一些特质:独特的业务

友好的交互

稳定的架构

方便的运维

业务方面

业务方面,除了 OJ 的常规功能,SDUOJ 提供以下的功能:评测模板。不再局限于编程语言的概念,我对Judge 这个概念向上抽象一层,提出了评测模板的概念 —— 只要是代码,是文件,就会有客观性评测的办法。OJ 应该将这种出题的能力赋予给用户。比如我们支持了在 OJ 上评测汇编实验(8086 汇编)、操作系统实验( @jesHrz 写了 checker 来追踪学生代码中的系统调用)等等,这实际上就为课程实验的创新提供了基建。(各种评测语言当然也可以很方便的新增,SPJ 也可)

虚拟评测(Virtual Judge)。在算法竞赛训练中,使用各大 OJ 的优秀题目进行训练是常有的事。但是在缺乏一个管理者/督促者的情形下,如何将宝贵的数据资产(代码/题集/成绩)沉淀到一方系统,为学院进一步规范/改善算法竞赛集训队的训练计划以及提升学生的程序设计能力提供支撑,这是一个绕不过的坎(尤其是目睹我校 ACM 成绩波动、学生平均程序设计能力后,觉得十分重要)。(还在设计,逃

一题多面。同一道题目,可有多个题面!可支持中/英/俄文等多语言!可支持复杂/精炼/变形等题面多形式!

多种赛制(ACM/OI/IOI)、信息脱敏(可以选择性地配置比赛时要展示给选手的信息)。广泛地适用于学生实验、期末测试、竞赛训练、赛事举办等场景!

多核平台调度,单点评测、多点评测,按需配置!多核平台的评测调度策略

思路很清晰了,业务上从最基本的评测能力开始,到题目设计的能力,之后对比赛举办做支持,为实验创新提供基建,最终是为了做数据沉淀。SDUOJ 能力大图

架构方面

参加过一些算法竞赛和线上代码考试的人,应该见识过参加竞赛时评测机卡爆转为 OI 模式的情形。所以我在想,怎样的架构更适合于去应对各种不同场景的流量和评测压力。

并且,事关一个学校 OJ 的如何传承和迭代,作为代码爱好者我也不希望后人会看 shit 山一样看待我的代码,所以,微服务的拆分使得各个模块独立,更方便迭代。

从 "杭州西厂" 实习后,我偷学到了不少先进的业务理念/架构思想/技术知识。决定采用面向服务(SOA)的分布式微服务架构。

最后的架构如下图所示,后端微服务和评测机都十分方便于动态的扩缩容以应对不同场景的流量和压力。更加的高并发/高可用,相信很难遇到性能瓶颈(已经对部分复杂接口做了缓存),如果有,那我觉得 SDUOJ 那时足够自豪。SDUOJ 架构大图

交付方面

必须得容器级交付,必须得一键部署。作为亲手装过学院的物理服务器以及使用过大厂的公有云的我,才知道部署和运维真的是很需要勇气和耐心。

SDUOJ 作为分布式应用,使用者能有经济基础在公有云上进行搭建和日常生产自然是好的,但是对于在物理机上进行安装也应该有官方支持。

所以,我给出在公有云上(比如阿里云)搭建集群的一键脚本/相关教程,以及在自己学校机房手动搭建和运维的教程经验。

(补一句,分布式是肯定比单体架构吃资源滴)

开发方面

GitHub 上分布式协作和版本控制嘛。不过使用过大厂的 devOps 后,发现 CI/CD 也是十分的必要,正在使用 GitHub Actions 和阿里云容器镜像服务来为开发增效。

... 其他

前端截图

最后贴一下前端截图吧。

更多截图请点击这里 SDUOJ。

致谢

首先感谢大佬们开源的 OJ 为我开阔眼界以及为设计 SDUOJ 提供思路!这里 SDUOJ 也开源勉强算为开源界做些微小的贡献吧!

最最重要的是,感谢有志同道合的伙伴一起开发这个项目。幸运!为了不打扰他们我就不逐一 at 了,谢谢 rr/dd/xb/xr 4 人!感恩!

----------------------- 其他,应该没有其他啦 -----------------------

SDUOJ 已经在我们学院内部使用,陆陆续续会发现/修正一些问题。对开源社区还没有发布第 1 个稳定版本,欢迎尝鲜和做开源贡献,但要用作生产则建议观望一段时间,谢谢!

python在线评测系统_怎样做一个 Online Judge(在线评测系统)?相关推荐

  1. 用python编写一个篮球计分系统_怎样做一个 基于单片机的篮球记分系统?

    利用单片机的定时器,中断可通过按键+或-时间的分.时,比分通过按键扫描函数实现+或-,这些LCD1602显示都够了,报警的话可设置成定时或者按键人工控制警告,用蜂鸣器,例如24s或者8s为例等. 以上 ...

  2. 电商系统_如何打造 一个完美的电商系统

    紧随电商发展趋势,打造符合客户自身的电商路径. 多用户商城系统: 多用户商城系统以B2B2B2C的理念出发,创新模块化设计,自营.招商.批发.供货.分销.城市站点.区域代理.O2O门店,一套系统即可搞 ...

  3. arduino智能浇花系统_解放双手!自己动手做一个简易智能浇花系统

    原标题:解放双手!自己动手做一个简易智能浇花系统 面对疫情,宅在家的我们可以以各种方式为战"疫"一线的医护工作者.紧急研究病毒的科研人员.口罩厂日夜工作的人们......加油打气. ...

  4. 如何做一个基于微信在线教育学习小程序系统毕业设计毕设作品

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):我们微信小程序项目属于CS架构,C客户端是我们要开发的小程序,S端是我们要开发的后台管理系 ...

  5. python文件运行哪一个_如何使一个python文件运行另一个?

    本问题已经有最佳答案,请猛点这里访问. 如何创建一个python文件来运行另一个? 例如,我有两个.py文件.我想运行一个文件,然后让它运行另一个.py文件. docs.python.org / / ...

  6. 用RC522与arduino做一个简单的门禁系统

    用RC522与arduino做一个简单的门禁系统 插本成功要去新学校了,结果发现新学校宿舍没有电梯没有电子门(虽然海景房很香).这对于住惯养老院的我属实难受所所以打算自己也整一个IC卡的门禁系统.然后 ...

  7. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...

  8. python 搭建登陆系统,用Python连接操作MySQL数据库,做一个简单的用户登录注册系统...

    我们可以很容易地用Python实现一个用户登录系统,相信这即使是对编程新手来说也是小菜一碟. 作为Python的小萌新,今天我想记录下来的是如何实现一个连接了MySQL数据库的用户登录注册系统,它的效 ...

  9. 用python做生日礼物_如何做一个网页送给女朋友做生日礼物?

    如何做一个网页送给女朋友做生日礼物 本文里面涉及到python,HTML ,css,JavaScript的知识,是基于python的flask框架做的一个小型网站,里面可以实现跳转功能,怎么配置fla ...

  10. 城市代码表_从零开始做一个SLG游戏(六)游戏系统以及配置表

    本文主要是来梳理下游戏内的基本系统(虽然只是照搬polytopia的,但是还是要总结一下),并预先做一些配置表,并实现读取. 一.经济系统 1.总述 经济系统可以是整个游戏的核心.在本游戏中只有一种资 ...

最新文章

  1. automake使用说明
  2. 【高级Java架构师系统学习】java十六进制字符串转数字
  3. NLP深度学习:PyTorch文本分类
  4. svg里写入html标签,如何将HTML元素放在内联SVG上
  5. c语言的锁和Python锁,Python中全局解释器锁、多线程和多进程
  6. 汇编语言(二十七)之身份证最后一位求和校验
  7. Ubuntu Linux系统环境变量配置文件
  8. 一个黑客和一个电脑白痴的对话
  9. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索...
  10. 计算机自动化考试试题,计算机等级考试,办公自动化考试试题(一).doc
  11. Product UVA - 10106(大数乘法)
  12. Halcon之图像采集II
  13. 跨步电压和接触电压的区别及联系
  14. maven进行install时出现Fatal error compiling错误
  15. Redis的客户端Jedis
  16. 小程序报错invalid code解决办法
  17. jmpi 与ljmp指令分析
  18. 欧洲杯第三周的比赛闲聊
  19. wordpress 自定义字段使用---实现推荐文章
  20. 【金猿人物展】天云数据雷涛:从数据湖到湖仓一体再到数据编织,完成的是燃油车到油电混再到纯电技术的改造...

热门文章

  1. 断电oracle 01033,电脑非法关机 导致ORA-01033:解决方法
  2. 企业资源计划(ERP)原理与实践第二章
  3. Win7/10亲测可用:湘源控规6+CAD200832+64
  4. 工作模板-----MySQL示例
  5. 英伟达官网怎么找老版本的显卡驱动
  6. JS实现div随鼠标移动练习
  7. 小学生计算机课上的小游戏,信息技术教师必备:适合小学生玩的游戏
  8. php网页弹窗广告,弹窗广告最多的网站
  9. Android性能优化之图片优化
  10. MaxScale 2.5