Provuse: Platform-Side Function Fusion for Performance and Efficiency in FaaS Environments

本文提出了 Provuse,一种在 FaaS 平台侧自动执行运行时函数融合以消除冗余实例的透明优化方案,无需开发者修改代码即可显著降低应用延迟和内存消耗。

Niklas Kowallik, Natalie Carl, Leon Pöllinger, Wei Wang, Sharan Santhahanam, David Bermbach

发布于 Mon, 09 Ma
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文介绍了一个名为 Provuse 的新技术,它旨在解决“无服务器计算”(FaaS)中一个既烧钱又费时的痛点。

为了让你轻松理解,我们可以把整个系统想象成一个繁忙的快递分拣中心

1. 现在的痛点:为什么要“跑两趟”?

想象一下,你有一个快递任务(比如“处理传感器数据”),这个任务被拆成了几个小步骤:

  1. 步骤 A:检查温度。
  2. 步骤 B:检查空气质量。
  3. 步骤 C:把结果存起来。

在传统的无服务器平台(FaaS)上,这些步骤是独立的。

  • 当你需要执行步骤 A 时,平台会叫来快递员 A,给他一辆专属小车,让他去干活。
  • 干完活后,快递员 A 把结果交给快递员 B。
  • 但是,快递员 A 必须把车开回车库(关闭实例),然后平台再叫来快递员 B,给他一辆新的小车,让他去干活。

这就带来了两个大问题:

  1. 双重收费(Double Billing):你为快递员 A 的车费付了钱,又为快递员 B 的车费付了钱。明明是一件事,却付了两遍钱。
  2. 效率低下(高延迟):快递员 A 和 B 之间还要交接、等车、启动新车,这中间浪费了大量时间。就像你点外卖,厨师做完菜,得先打包,再等另一个骑手来取,再等另一个骑手送到你家门口,中间全是等待。

2. Provuse 的解决方案:把“快递员”合并成“全能特工”

Provuse 就像是一个超级聪明的调度员。它的核心思想是:“既然你们经常一起干活,不如直接合并成一个人吧!”

  • 透明化(Transparent):你(开发者)完全不需要改代码,也不需要告诉平台“我要合并”。你只管写你的步骤 A、B、C。
  • 自动合并(Function Fusion)
    • 调度员(Provuse)在后台观察,发现“检查温度”和“检查空气”这两个步骤总是紧挨着发生,而且必须等前一个做完才能做后一个(同步调用)。
    • 于是,调度员悄悄地把这两个步骤的代码打包进同一个集装箱里。
    • 现在,只需要一辆车(一个运行实例),一个全能快递员,就能一次性把温度检查和空气检查都做完,直接存结果。

这就像什么?
以前是:你叫了出租车去超市,到了超市下车,再叫另一辆出租车去银行。
现在 Provuse 的做法是:它直接派了一辆加长林肯,司机既懂开车又懂去超市和银行,你坐一次车,两个地方都到了,中间不用下车换乘。

3. 它是如何工作的?(技术原理的通俗版)

Provuse 在平台内部有两个主要角色:

  1. 功能处理器(Function Handler)—— “哨兵”

    • 它站在每个函数的门口。当它发现某个函数正在“打电话”给另一个函数,而且是在死等对方回复(同步阻塞)时,它就会立刻向合并器发信号:“嘿,这两个人关系太铁了,经常一起干活,快把他们合并吧!”
  2. 合并器(Merger)—— “魔术师”

    • 收到信号后,它会把两个函数的“工具箱”(代码文件、运行环境)拿出来。
    • 它把这两个工具箱融合成一个新的、更大的工具箱。
    • 然后,它用这个新工具箱重新造一辆新车(新的容器实例)。
    • 最后,它把旧的两辆车撤掉,把新的“全能车”派上去。从此以后,这两个步骤就在同一辆车上完成了。

4. 效果如何?(实测数据)

作者在不同的系统(tinyFaaS 和 Kubernetes)上做了测试,效果非常惊人:

  • 速度更快(延迟降低):平均来说,任务完成的时间缩短了 26%
    • 比喻:以前送快递要 10 分钟,现在只要 7 分半。
  • 更省钱(资源减少):内存(RAM)的使用量平均减少了 53%
    • 比喻:以前需要两辆车、两个司机,现在只需要一辆车、一个司机,省了一半的油费和人力成本。

5. 有什么限制吗?

虽然 Provuse 很厉害,但它也有几个前提:

  • 信任问题:它只合并那些属于同一个信任域的代码(比如都是你写的,或者都是同一家公司的)。它不会把陌生人的代码强行塞进你的车里,因为那样不安全。
  • 适用场景:它最适合那些步骤紧密相连的任务。如果你的任务本来就是各自独立、互不等待的(异步),那合并的效果就不明显。
  • 语言限制:目前的原型主要支持 Python 代码,不过原理上可以扩展到其他语言。

总结

Provuse 就像是给无服务器计算平台装上了一个智能的“自动拼车”系统

它不需要你(开发者)去操心怎么优化代码,平台自己会在后台发现那些“总是手拉手一起干活”的功能,把它们合并成一个超级功能。这样做既省了钱(少付一次车费),又省了时间(不用换乘),让云上的应用跑得更快、更便宜。

这就是平台侧优化的魅力:让基础设施变得更聪明,让开发者可以更专注于业务本身。