据我所知,Erlang 为错误处理和进程隔离提供了高级功能。
我正在构建一个系统,允许用户提交他们的代码以在共享服务器环境中执行并且需要使其安全。
要求是:
- 分别限制每个用户进程的 CPU 和内存使用量。
- 禁止用户进程与其他进程通信(一些专门为此目的设计的进程除外)。
- 禁止访问所有系统资源(shell、文件系统……)。
- 在错误或高资源消耗的情况下终止用户进程。
是否有可能使用 Erlang 完成所有这些并保持其性能高效?
一般来说,Erlang 不提供用户可以注入的沙箱代码的方法。您可以尝试编写自己的保护代码,但这相当困难。
更好的选择可能是像“safe haskell”这样的语言:
http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/safe-haskell.html
这是专门为做这种事情而设计的。
Erlang 提供的隔离并不是为了防止恶意模块被注入。事实上,分布式情况下也没有这样的保护。两台机器连接后,您可以对另一台机器执行的操作没有限制。
过去已经在 Safe Erlang 上进行了一些工作,您可以找到几篇关于它的论文。ErlHive 项目以一种有趣的方式解决了这个问题。