Hydro OJ

Hydro oj首页 


引言

随着计算机科学与技术的迅猛发展,程序设计竞赛、算法训练以及编程能力评估等活动越来越受到关注。在这些活动中,一个高效、稳定的在线评测系统是必不可少的。Hydro OJ 就是为满足这一需求而设计的一个出色的在线评测系统。


1.Hydro OJ 是什么?

 HydroOJ 是一个新兴的在线评测系统,目前尚处于发展阶段,正在维护 BZOJ 题库CCF 真题题库及英文翻译。建站一年来已获得七千注册量、二十万评测量,域功能为数所大学与培训机构提供服务。下面列举其部分特点:

  1. 为开源项目 Hydro 的官方站,由 Hydro 开发组为 HydroOJ 提供技术支持。开源项目 Hydro(又名 vj5)继承了 Vijos(vj4) 的所有功能并进行了大幅度优化、扩展及加强。它支持域,训练计划,多语言页面,多网站主题,在线 IDE 等其他大部分 OJ 所不具备的功能。评测机 HydroJudge 支持子任务依赖,文件IO,子任务单独设置时空限制,多写法 Special Judge,交互,自定义评测脚本等功能。
  2. RemoteJudge(远端评测)已支持:LuoguCodeforcesSPOJPOJUOJ。并仍在不断增加对更多 OJ 平台的支持。
  3. 通过域功能,用户可基于 HydroOJ 免费搭建一个功能同自建 OJ 几乎无差别的平台。其采用独立数据库,独立判题,完整管理权限,强大的权限组系统,同时可以自由引用官方的公开题目(包括 RemoteJudge 题库)创建比赛,作业和训练计划。
  4. 由一台高性能实体服务器与三台分布在多国的反向代理服务器提供网站服务,使用腾讯云服务加速国内访问速度,使用 Cloudflare 代理抵抗网络攻击,为用户提供高速安全的网站访问体验。
  5. 日常评测算力达 16 CPU核心,评测高峰期时启动伸缩组可达最高上百 CPU核心,配合评测优先级系统为用户提供高效稳定的评测服务与在线 IDE 自测服务。
  6. 现有资金足以支持 HydroOJ 继续运行至少两年。

 

2.Hydro OJ的历史 

在此,我将向大家介绍 Hydro 的前世今生。该项目前前后后耗时两年多,推翻两版设计,最终在逻辑上参考了 vj4 的优秀架构。

为解决 jd4 仅支持常规题目(无spj,无交互)的严重问题,最早从评测模块入手,创造了 jd5,并一直应用于 http://vijos.org。因站长无精力对新版代码进行完整review,vijos当前采用了 jd4+jd5 的混合评测方案,之后 jd5 改名为 HydroJudge。

评测模块完工后,咕了一个月,便开工后端主项目 Hydro。由于 Hydro 特色为插件扩展性,且无先例可以参考,因此在插件 API 设计上花费了很多功夫,也走了很多弯路。最终选定基于统一 EventBus 的 hook 方案。在主项目完工后,这时github存储库拥有了约20 star,项目也于 oj.undefined.moe 正式部署。此时的站点仅作为 demo 站,不打算对外开放使用(没钱)。

之后结识了 @Macesuted ,完善了使用文档,并搭建了现在的主站。不得不说主站的搭建是非常耗钱的事情,目测估计每月需400左右(反向代理,主服务器,评测机,数据存储)。因此欢迎有财力的人捐助 Macesuted

2020/4/21,Hydro主站疑似遭到攻击,出现了大量恶意提交与刷讨论区的行为。Macesuted 怒开50台评测机与用户提交竞速。之后增加了相关限流逻辑(你交的越快我测的越慢,你交了一串我先测别人的,看你能不能卡死我 笑死),并关闭了多余评测机,添加了基于登录ip,uid等判断相关性自动删除恶意讨论,封禁用户的功能,从网上爬了一份临时邮箱域名表全部拉进黑名单(当时有人建议启用域名白名单功能,仅允许http://qq.com/outlook.com等域名的注册,但既然我自己都是custom domain,当然得拒绝这个req)当然现在在使用中可能还会有一些小bug。


3.Hydro OJ 的特点

 模块化设计,插件系统,功能热插拔

Hydro 设计了一套模块化的插件系统,可以方便地扩展系统功能。
使用插件系统,可以在修改功能后,仍然保证系统的可升级性。
Hydro 的所有历史版本均可平滑升级到最新版本。

插件使用和开发指南,请前往文档 插件 和 开发 章节。

跨平台兼容,数据一键备份/导入

Hydro 支持所有主流的 Linux 发行版,兼容 x86_64 和 arm64 架构设备,且均可一键安装。
Hydro 可在 树莓派 / Apple M1 上正常运行。

使用 hydrooj backup 即可备份系统全部数据,使用 hydrooj restore 文件名 即可导入备份数据。 整个过程无需手工干预。

单系统多空间,不同班级/院校,分开管理

Hydro 提供了单系统多空间支持,可以方便地为不同的班级/年级/院校等创建独立的空间。
不同空间内除用户外数据默认隔离,且可分配独立管理员,互不干扰。
题目可跨域复制,在系统内仅占用一份空间。

粒度精细的权限系统,灵活调节

Hydro 的权限可以按比赛/作业分配给对应的用户,也可以将用户分组(班级),按组分配权限。 有关权限节点,可以查看 介绍 下方截图。

规模化支持,上千用户无压力,伸缩组秒级自动扩展

Hydro 系统本身是无状态的,这意味着你可以随意增删服务节点,而不会影响系统的正常运行。 评测队列会自动在当前在线的所有评测机间均衡分配。接入弹性伸缩组后,可根据服务器负载情况自动增删评测机。 不像其他系统,Hydro 会管理不同服务器间的测试数据缓存,按需拉取,做到评测机上线即用,无需手动同步数据。

全题型支持,跟随时代潮流

Hydro 支持所有题型。无论是传统题型,Special Judge,还是文件输入输出,提交答案题,IO 交互,函数交互,乃至选择填空题等, Hydro 都有相应的支持。安装相关运行环境后,Hydro 甚至可以做到:

  • 调用小海龟画图,与标准图片比对;
  • 调用 GPU 进行机器学习模型的评测;

更多的样例可前往 样例区 查看并下载。

丰富的题库

Hydro 支持导入常见格式的题库文件,包括 Hydro 通用的 zip 格式,HUSTOJ 导出的 FPS (xml) 格式题目,QDUOJ 导出的压缩包。
可以在 Hydro 题库 下载免费题库使用。
Hydro 同时支持 VJudge,这意味着你可以直接在系统内导入其他平台的题目,修改题面后编入自己的作业或比赛,快速搭建自己的题库体系。
当前支持的平台有:

  • 一本通编程启蒙:官方提供一本通编程启蒙题库,免费使用,参照压缩包内导入说明。
  • Codeforces:国外大型竞赛平台,大量高质量题目;
  • UOJ:国内知名 OJ,国家集训队常用;
  • SPOJ:国内连接很不稳定,不推荐;
  • 洛谷:使用此功能需要向洛谷购买授权;
  • CSGOJ
  • POJ:较为古董,服务器稳定性差;
  • HUSTOJ:理论上支持所有 HUSTOJ 驱动的系统,但由于各个系统中 UI 有差异,通常需要手动适配。

多赛制支持

Hydro 支持多种赛制,包括 ACM/ICPC 赛制(支持封榜),OI 赛制,IOI 赛制,乐多赛制,以及作业功能。
在 IOI 和 OI 赛制下,支持订正题目功能,学生在赛后可以在题库中提交对应题目,其分数会在榜单旁边显示。
在 IOI 和 OI 赛制下,支持灵活时间功能,学生可以在设定的时间范围内,自选 X 小时参赛。

轻松添加其他编程语言

Hydro 的语言设置并非硬编码于系统中,而是使用了配置文件。 只要能写出对应语言的编译命令和运行命令,Hydro 都可以进行判题。


3.用户的话

第一个人

HydroOJ 是一个新兴的在线评测系统。基于 Hydro 开源项目,虽然界面和 Vijos4 比较像,但是其后端的代码与 Vijos4 无关。HydroOJ 的功能很强大,有完备的权限管理系统,评测优先级系统,兼容云协议(比如 S3 存储服务)。还有域功能,相当于一个独立于主站的 OJ,与主站之间仅共用账户信息。使得像我这样没钱租云服务器的人也可以拥有一个自己的 OJ 的机会(划掉)。在自己建立的域中也可以创建自己的题目、比赛等,功能与主站几乎完全一致,非常强大。另外 HydroOJ 官方站目前正在做一个 HydroOJ - BZOJ 的项目,(我也是项目成员之一),相信在完成建设之后会极大地方便广大 OIer 们的刷题和学习。同时,Hydro 是一个优秀的开源项目,目前我在本地也部署了 3 个,其特点是可扩展性极强(有很多插件,甚至可以自行编写,达到自己想要的功能,虽然我不会写 [doge]),开发组活跃(几乎每天都会有更新,遇到的大多数 Bug 都能在一个小时内解决)。最后,站主 Macesuted 和开发者 undefined 以及 OJ 中的其他管理员们都很友好。另:站主 Macesuted 可爱!开发者 undefined 可爱!Updated on 2022/02/25:HydroOJ 的域名从 hydro.org.cn 迁到 hydro.ac 了(其实早就迁了,但是忘了更新)编辑于 2022-02-25 12:36​赞同 10​​添加评论​分享​收藏​喜欢LifeZJ OIer/已退役​ 关注11 人赞同了该回答BZOJ重建计划好评!评测机飞快 站长Macesuted群内直播开50台测评机大战卡评测xxs(Macesuted:我赌你提交没有我评测快)站长和管理员都很亲民还有就是Macesuted可爱!

第二个人

 应该对于很多OIer来讲都会希望拥有自己的OJ吧,用来存储自己造的题目/训练计划、作为出题团/出题组挂题目的地方或者作为学校校内OJ。但是对于没有相关方面知识基础的OIer如果要完成这项工作应该要面临大量踩坑,花费大量时间,足以让人望而却步。而且想要维护还需要一定的精力。目前看来HydroOJ的域功能完全能够胜任这项工作。只需要进行简单的设置即可达到“拥有一个自己的OJ”的效果。包括基础的OJ功能和讨论区等功能。通过权限管理能够很好地保证理想的私密性。而相应的是几乎为0的维护工作量和极低的学习成本。感觉可以吹一手“在Hydro OJ,使用自己的OJ”。


4.结论

Hydro OJ 是一个功能强大且易于使用的在线评测系统,为程序设计竞赛、算法训练以及编程能力评估提供了强有力的支持。通过使用 Hydro OJ,用户可以在实践中不断提高自己的编程技能,与其他编程爱好者共同成长。如果您对程序设计竞赛或算法训练感兴趣,不妨亲自尝试一下 Hydro OJ,相信它会为您带来很多乐趣和收获。

下一次,我们将介绍:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	scanf("如何使用Hydro OJ?");
}