如果在 PaaS 上部署 Online Judge

2016-05-01 22:27:44 +08:00
 lksltjw

比如在 Google App Engine 上部署 Online Judge

和普通的 OJ 相比,实现是否会变得更为简单?

安全性是否也会相应提升?

2712 次点击
所在节点    云计算
18 条回复
crystom
2016-05-01 22:37:00 +08:00
前端还可以,判题的没法放在这种平台上吧
SCaffrey
2016-05-01 22:44:18 +08:00
判题服务器性能不够用吧?
SCaffrey
2016-05-01 22:45:36 +08:00
icreeper
2016-05-01 22:56:40 +08:00
记得 hustoj 有个 sae 的版本
virusdefender
2016-05-01 22:57:28 +08:00
感谢 @SCaffrey 的推荐

我们的 oj Web 部分暂时无法在 sae gae 类的 PaaS 上部署,限制太多了。

而沙箱保证安全依靠 PaaS 的话,好像也不太行,虽然 PaaS 也有沙箱,但是是隔离你的代码和底层环境的,你部署的代码已经是受限的了, sae 好像连进程都不能起, socket 也不行。更别谈调用编译器写文件了。

可以尝试一下 daoCloud 类的 docker PaaS ,限制还少一些。

我们是用的 secomp 过滤系统调用。代码在 https://github.com/QingdaoU/Judger
virusdefender
2016-05-01 22:59:51 +08:00
4 楼说的 hustoj 的 sae 版本也仅仅是 Web 部分,判题还是得通过网络通信转发到自己的服务器上。

楼主的帖子应该更侧重判题部分吧。
wph95
2016-05-01 23:01:46 +08:00
1. secomp -> seccomp
2. 讲道理来说 权限越高越好限制, PaaS 不会给你那么高的权限
3. hustoj 的 sae 版本只是一个 界面托管,评测还是要自己找服务器
4. 想简单的搭建 oj ? 土豪请选择 sphere-engine.com , 学校 or 学生团队 可以找 codevs 要免费的评测资源:)
holyghost
2016-05-02 11:34:50 +08:00
@virusdefender
简单看了下 judger ,请教几个问题:

1. 直接使用 seccomp 限制系统调用,和使用 docker 的 secure option 限制本质上是否可以理解为是相同的?
2. 是什么原因当初没有选择 docker 呢?或者换一个问法, docker 在限制内存使用、 cpu 使用和运行时长、限制调用方面有什么缺点吗?

谢谢~
virusdefender
2016-05-02 12:01:11 +08:00
@holyghost

Docker 的 security-opt 、 CPU 时间等选项貌似是限制里面所有的进程的,而实际上我们需要一个父进程来控制子进程(子进程就是用户的代码),来获取运行时间、内存占用等数据。这会不会让父进程也太受限了?

Docker 和使用 seccomp 并没有任何冲突,而且我们现在也是在 Docker 中运行 judger 的,当然最主要是为了方便部署,其次才是使用 Docker 做一层隔离。

在使用 Docker 做判题方面,@wph95 更有经验,可以请教一下他。
virusdefender
2016-05-02 12:01:56 +08:00
@wph95 上面的回复 @貌似没管用,你可以看下 8 楼的问题。
holyghost
2016-05-02 12:13:16 +08:00
azh7138m
2016-05-02 14:42:46 +08:00
@holyghost IO 感人, hustoj 是有过 docker 版的
holyghost
2016-05-02 14:59:16 +08:00
@azh7138m 谢谢。

io 上的劣势我觉得可以用扩容解决,钱暂时不是问题。
wph95
2016-05-02 17:23:36 +08:00
@holyghost
1. IO 问题从没有遇到过。
2. Docker 性能在 Online Judge 场景下很不好。
> docker 在限制内存使用、 cpu 使用和运行时长、限制调用方面有什么缺点吗?
基于 cgroups ,并没有缺点
因为性能原因, CodeVS 已经弃用 docker 方案了。
holyghost
2016-05-02 19:57:44 +08:00
@wph95 谢谢。
>> Docker 性能在 Online Judge 场景下很不好。
>> 因为性能原因, CodeVS 已经弃用 docker 方案了。

按照之前的经验, docker 通常在一台服务器(例如, 8 核 16G )上能达到并发处理多少提交呢?
另外,是否方便简单透露下现在 CodeVS 使用的方案呢?

再次感谢。
wph95
2016-05-03 10:11:43 +08:00
@holyghost
如果是 CodeVS 用台 8 核服务器评测,大概日 20 万评测量没什么问题。足够一场 2000 人的比赛了。
用 docker 少一半吧。
// 我一般都是去 do 上创一片 1 核机器组个集群。
holyghost
2016-05-03 10:19:23 +08:00
@wph95 肥肠感谢!么么哒。
wph95
2016-05-03 10:20:46 +08:00
@holyghost 我 github 留了邮箱,需要帮助可以邮件联系:)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/275713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX