我正在开发一个在线裁判系统,大约有100个不受信任的可执行文件同时运行并评估相同的输入数据。
我希望每个可执行文件都能限制CPU、内存、磁盘空间等预定义资源池的相等份额。例如,如果将资源池设置为机器CPU的3/4、3GB内存、300GB磁盘,并且正在运行2个可执行文件,则每个可执行文件将获得3/8的CPU、1.5GB内存和150GB磁盘。如果加入了另一个可执行文件,则资源将被重新调整为三个相等的部分。这是为了防止恶意或有缺陷的可执行文件从其他文件中窃取资源,同时也为每个人提供平等的资源。
理想情况下,我还希望可执行文件不受单一语言的限制(例如,让用户使用他们熟悉的语言,如C、C++、Java、Python等)。
使用整个虚拟机(VM)或类似OpenVZ的东西似乎过于复杂。是否有更轻量级的替代方案,可以为每个可执行文件使用单独的进程,同时限制其资源,禁用诸如网络访问、进程生成等功能?我寻找轻量级解决方案的原因之一是因为有大量的输入数据,我宁愿不将其复制到每个可执行文件中,而是让它们从共享内存中读取。
我希望每个可执行文件都能限制CPU、内存、磁盘空间等预定义资源池的相等份额。例如,如果将资源池设置为机器CPU的3/4、3GB内存、300GB磁盘,并且正在运行2个可执行文件,则每个可执行文件将获得3/8的CPU、1.5GB内存和150GB磁盘。如果加入了另一个可执行文件,则资源将被重新调整为三个相等的部分。这是为了防止恶意或有缺陷的可执行文件从其他文件中窃取资源,同时也为每个人提供平等的资源。
理想情况下,我还希望可执行文件不受单一语言的限制(例如,让用户使用他们熟悉的语言,如C、C++、Java、Python等)。
使用整个虚拟机(VM)或类似OpenVZ的东西似乎过于复杂。是否有更轻量级的替代方案,可以为每个可执行文件使用单独的进程,同时限制其资源,禁用诸如网络访问、进程生成等功能?我寻找轻量级解决方案的原因之一是因为有大量的输入数据,我宁愿不将其复制到每个可执行文件中,而是让它们从共享内存中读取。