SYZOJ 实现分布式评测

这篇博客的起因是学校的OJ因为高考被切断了, 但是我的公网OJ是个实现很不清真的UOJ而且上面只有1core和1GB内存. 费了一些周折部署好syzoj之后大家喜闻乐见地被卡常/卡内存了...于是需要分布式评测来将评测任务分流给新租的性能优秀一些的服务器.

然而由于现在开发组被鸽子占据所以分布式评测的wiki咕咕咕了...

自己xjb搞了搞现在实现了分布式评测(网站端和评测姬不在同一台服务器)

于是在这里记录一下方便自己以后复现, 以及希望能在一定程度上帮到想部署syzoj的大家.

SYZOJ 的 GitHub仓库 以及 Wiki

SYZOJ的消息机制

这部分是问了Menci才知道的...

目前SYZOJ的结构是长这样的: web端分配评测任务给评测姬的judge-daemon, judge-daemon再把运行任务分配到各个judge-runner.

整个系统的通信是: web端内部使用本机的Redis通讯, web端到judge-daemon使用SocketIO通过HTTP(?)实现, judge-daemon和judge-runner之间的通讯是用Redis+RabbitMQ实现的.

但是web端到judge-daemon之间的通讯并不会传递测试数据. 也就是说测试数据必须在web端server和judge-daemon所在的server上同时存在且同步.

实际实现

通讯部分

根据上面的机制描述, 我们可以发现实际上只要解决web端到judge-daemon之间的通讯就可以实现分布式评测. 也就是更改 config/daemon.json 中的 ServerUrl 项为web端的URL即可. 如果有nginx反向代理的话可能需要填写域名而非IP.

所以按照Wiki安装好judger基本就完事了.

以为redis也需要和web server共享的我折腾了一段时间的外部访问redis...最后在amqp的时候自闭询问了一下Menci发现消息机制并不需要共享

测试数据的同步

因为SocketIO并不管测试数据, 我们需要自行同步 data/testdata 下的所有文件. 个人使用的策略是使用 inotify+rsync 做到实时差量同步. (用NFS没准也可以?)

inotify 是一个内核接口, 内核会在指定文件被进行指定操作后对程序发出信号.

然后剩下的工作网上有同步教程(

大致流程是在judger那头开个 rsync --daemon, 然后在web这头写个脚本同步.

注意各种各样的token问题就好了

[技术]SYZOJ 实现网站与评测端分离的更多相关文章

  1. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

  2. springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)

    项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  ...

  3. 10天学会phpWeChat——第七天:创建一个自适应PC网站+H5移动端的模块

    本教程基于phpWeChat核心框架1.1.0+版本.下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 通过前面六讲的系 ...

  4. 通过JS语句判断WEB网站的访问端是电脑还是手机

    通过JS语句判断WEB网站的访问端是电脑还是手机,以显示不同的页面! 目录腾讯网的适配代码如何判断访问网站的机器类型-如何判断ipadJS 判断浏览器客户端类型(ipad,iphone,android ...

  5. 让PC版网站在移动端原样式显示

    一般PC网站在移动端显示效果往往和PC版原样式不同,为了在移动端下还原原PC站样式,可以采用以下方式解决: 1) 去掉页头的: <meta name="viewport" c ...

  6. 融云技术分享:融云安卓端IM产品的网络链路保活技术实践

    本文来自融云技术团队原创分享,原文发布于“ 融云全球互联网通信云”公众号,原题<IM 即时通讯之链路保活>,即时通讯网收录时有部分改动. 1.引言 众所周知,IM 即时通讯是一项对即时性要 ...

  7. (转)我如何利用前端技术得到 XXOO 网站的 VIP

    网页如图,这里只是说明整个网站的一些技术点,所以不该看的地方我都打上马赛克了,让我们揭开这些网站的整个前端工作原理首先刚进去的时候显示一堆乱七八糟的东西,点进去其中一个页面,下面各种虚假评论,然后每隔 ...

  8. Java SSM三端分离开发在线教育平台实战视频教程

    目录: 1-01——在线网校实战课程介绍1-02——Eclipse.Maven.JDK介绍1-03——Maven构建Project1-04——新浪SAE介绍2-01——平台业务结构概览2-02——平台 ...

  9. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

随机推荐

  1. plsql查询数据显示为乱码解决方案

    1.首先安装plsql之后连接数据库,发现使用sql查询出来的中文数据是??,即乱码.原因,因为数据库的编码与本地的编码不一致,plsql默认加载的是本机win10的编码. 2.解决办法: 参数如下: ...

  2. ArcGIS10.2配置PostgreSQL9.2标准教程

    ArcGIS 支持Oracle.DB2.PostgreSQL.SQLite关系型数据库升级为企业地理数据,Oracle太庞大,SQLite太小,DB2多在IBM上用,只有PostgreSQL最适合,它 ...

  3. 第04组 Beta冲刺(1/5)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 验收游戏素材 学习Unity 2D Animation系统 接下来的计划 制作游戏需要的人物动画 ...

  4. .NET 时间轴:从出生到巨人

    自1995年互联网战略日以来最雄心勃勃的事业 —— 微软.NET战略, 2000年6月30日. 微软于2000年推出基于Windows操作系统的应用软件开发框架.NET,发展至今形成巨大的技术栈,涉及 ...

  5. MySQL UNSIGNED和ZEROFILL属性

    UNSIGNED 这个属性就是标记数字类型是无符号的,和C/C++语言中的unsigned含义是一样的,int signed的类型范围是-2147483648~2147483648,而int unsi ...

  6. Python 十大装 X 语法(二)

    Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并 ...

  7. 教妹学 Java:难以驾驭的多线程

    00.故事的起源 “二哥,上一篇<集合>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很关心. “这篇文章的浏览量要比第一篇<泛型>好得多.” “这是 ...

  8. 利用zabbix监控ogg进程(Linux平台下)

    前段时间生产的一个数据库的ogg进程挂了快半个月才被发现,已经起不来了,只有重新初始化再同步.因此很有必要监控下ogg的进程,这里给大家介绍如何使用zabbix监控oracle的ogg的进程.思路就是 ...

  9. MongoDB for OPS 04:备份恢复

    写在前面的话 和 MySQL 一样,mongodb 也是需要将数据进行备份的,毕竟天有不测风云,谁也不知道哪天机器就炸了. 备份恢复 mongodb 提供了两种备份恢复手段:mongoexport / ...

  10. Flask笔记:上下文

    线程隔离Thread Local: 如果一个对象具有线程隔离的特性,就可以称之为“Thread Local”,线程隔离是指该对象在不同的线程中都是独立的,在一个线程中对该对象的操作不会影响另一个线程对 ...