工作原理

最近更新时间:2019-08-01 11:53:55

函数运行时的容器模型

边缘函数运行机制仍然利用了容器机制。在设备端 Agent 内,我们内置了 runc 轻量级容器。通过容器,我们仍然可以有效地控制代码程序对设备 CPU、内存的使用,避免函数代码对设备内已有进程或系统的影响。

同时,由于边缘设备的种类多样,硬件、系统环境有众多差异,因此,我们也会将更细粒度的函数运行环境控制逐步暴露出来,便于用户针对硬件差异进行调整。

边缘函数的设备端 Agent 将在事件触发时执行 SCF 函数,根据您的配置信息(如内存等)进行资源分配,并启动和管理容器(即函数的执行环境)。Agent 负责设备上所有函数运行容器的创建、管理和删除操作。

同云上的无服务器云函数相同,容器启动时需要一些时间,这会使得每次调用函数时增加一些延迟。但是,通常仅在首次调用函数、更新函数、或长时间未调用时重新调用时会察觉到此延迟,因为平台为了尽量减少此启动延时,会尝试对后续调用重用容器,在调用函数后容器仍会存留一段时间,预期用于下次调用。在此段时间内的调用会直接重用该存留的容器。

注意:

请勿在函数代码中假定始终重用容器,因为是否重用和单次实际调用相关,无法保证是创建新容器还是重用现有容器。

运行模式

边缘函数支持在与设备绑定时设置为 触发运行持续运行 两种运行方式。

触发运行 与函数在云上的运行模式相同,在被触发时才会拉起运行。

持续运行 是在边缘函数中才有的模式。配置为持续运行的函数,在更新到设备上之后,就会拉起并开始运行。持续运行的函数,会以单例的方式运行,也就是仅会启动一个容器。持续运行的函数,如果由于代码退出或异常而终止,将会被重新启动运行。因此,用户可以通过在代码内置死循环的方式防止退出,或单次执行完后正常退出,由系统再次拉起执行。