2022.10.15 差点忘了这篇文章,早就写好了,但一直是草稿没发。
由于最近一直不能线下,所以我校校赛决定线上进行,将过程记录如下。
准备工作
监考不用说了,xcpc的双机位应该都熟悉。
然后就是搭建评测系统Domjudge,这里参考https://github.com/cn-xcpc-tools/cn-xcpc-docs,我们使用机房电脑,设置了8个判题核心。
之后就是将Domjudge放到公网了,我们只需要搭建内网穿透即可,详情参考我的这篇文章。
如果服务器在境内,需要准备一个备案的域名。然后由于我的服务器只有3M带宽,并且不能提升,所以我引入了cdn做缓存。
首先把域名解析到cdn,然后cdn里面填源站IP(就是穿透到的公网服务器IP),frp里面配置我们准备的域名。
如果用cloudflare这种带有域名解析的cdn直接解析到源站IP即可,记得打开cloudflare的服务。
这里的cdn以又拍云为例:
首先配置对js,css,json,scss,jpg,jpeg,gif,png,tif,tiff,pdf,bmp,svg,psd,ico,zip,ttf,otf,woff,woff2
等常见静态文件的缓存,缓存时间适当设置。不过domjudge题面是使用pdf展示的,所以当赛中修改题面的时候,我们需要刷新对pdf的缓存。不建议对pdf配置不缓存,可能大幅占用服务器带宽。
即使服务器带宽够也建议套上一层cloudflare之类的免费cdn(况且又拍云对个人站长有免费额度),慎重考虑直接暴露服务器IP,可能会出现各种想象不到的情况!!!
赛中
比较大的文件(比如题面)最好在赛前5分钟我们自己在后台主动下载一遍,将文件存入cdn缓存,能很大减少服务器压力。
cdn流量情况,可以显示大部分请求都能命中cdn中的缓存,无需向源站请求:
服务器带宽很少出现占满的情况。
据选手反馈,整场比赛未出现明显卡顿,说明以上方法行之有效。
UPD 2022.11
2022年11月赛流量,不到100人参加了本次比赛,和上次的区别是赛前对大部分资源使用了预热,并且配置了限速,所以带宽占用更少。
这里我配置的是到达3M流量后限速200kb/s。如果题面文件比较大可以适当放宽。