Turf
在 Noslate 架构下,调度单元从之前的容器下沉到了进程,因此资源隔离是很重要的一点。我们基于 Linux 系统提供的能力, 实现对执行单元的最小化授权以及资源使用限制,同时用户接口设计遵从 OCI 规范,提供 Worker 实例管理能力。作为基础组件, 负责管理各 Worker 实例执行单元的生命周期以及资源使用情况。
可以认为 turf 是一个资源配置器。它通过 fork()
系统调用创建一个新的进程,然后配置这个进程的资源、隔离及权限,
最后将程序执行移交到应用代码上,之后应用就运行在了一个约束的执行环境中。
有很多名称代表着类似的意思,如沙盒 (sandbox)、牢笼 (jail)、容器 (container)。现代的运行隔离技术都基于相似 的硬件和内核所提供的隔离特性或功能上开发的,但是所应用的环境的不同造成他们之间存在一些差异。沙盒一般强调的是隔 离性,牢笼一般强调其的限制,而容器强调它的整体交付。所以 docker 以集装箱式的交付简化运维提高效率,但未必最适合 Noslate 的场景。
turf 的主要设计目标是提供给 Noslate Workers 去承载 JavaScript 函数,所以它有一些新的特点:
- JavaScript 代码运行在 VM 里,它并不直接调用系统调用;
- JavaScript 依赖库可能很多很大,基本都会依赖于外部服务;
- JavaScript 广泛运用于 Web Server、Server Side Rendering 等服务上;
- 需要能够提供即时响应请求的启动速度;
所以,turf 目标提供一定程度的隔离性和共享文件系统与系统服务。