# 摘要
无务器算革性地改变了应用程序的部署,消除了传统基础设施管理,并根据需求动态分配资源。一重要的使用案例是 I/O 密集型应用程序,如数据分析,这些应用程序广泛采用关键的 “洗牌” 操作。不式运行,因此仍然引入了无法预见的性能瓶颈,并绕过了未开发的优化机会。在本文中,我们开发 Mk 幸的是,洗牌操作由于大量针对远程存储的 PUT/GET 请求,特别是在高并行场景中,带来了严重的战,导致性能严重下降和存储成本增加。现有设计从多个方面优化数据传递性能,但它们以孤立的式运行,因此仍然引入了无法预见的性能瓶颈,并绕过了未开发的优化机会。在本文中,我们开发 MinFlow,这是一种针对 I/O 密集型无服务器分析任务的整体数据传递框架。MinFlow 首先快速生成大量可行的多级数据传递拓扑,同时减少 PUT/GET 操作。然后,它利用交错分区策略将拓扑有向无环图(DAG)划分为小规模的二部子图,以优化功能调度,进一步减少传输到远程存储的数据量超过一半。此外,MinFlow 还开发了一个精确模型,以确定最佳配置,从而在实际功能部署中最小化数据传递时间。我们实现了 MinFlow 的原型,大规模实验表明,MinFlow 在作业完成时间和存储成本上显著优于最先进的系统 FaaSFlow 和 Lambada。
# 现有方法
- (a) 通过私有存储进行洗牌。 作为一个被众多用户和应用共享的公共云存储服务,S3 天生对每个单个用户分配有限的请求速率,以确保公平并避免租户之间的干扰。消除这一限制的简单方法是用自维护的私有存储替代 S3,例如 ElastiCache 集群。这使得用户拥有存储服务的独占权,从而大大提高了洗牌速度。然而,失去了 S3 的共享经济和精细化计费模式往往导致成本显著增加。
- (b) 通过工作节点内部内存进行洗牌。 绕过 S3 限流的另一种方法是回收并利用工人中过度配置的内存来加速洗牌 。更具体地说,位于同一工人中的函数之间传递的数据是通过其本地内存进行的。以图 2 (b) 中工人 W1 中的函数 F2 和 F3 为例。假设要从 Fi 传递到 Fj 的数据记为 <Fi, Fj>。为了将数据传递给 F3,F2 首先将 <F2, F3> 放入 W1 的本地内存中,然后 F3 紧接着获取 <F2, F3> 并完成传输。这种方法在性能和成本上表现良好,因为回收的过度配置本地内存不仅提供了更高的性能。带宽和较低的延迟,但也不会产生额外的开销。缺点是其适用性的限制,因为只有共置的功能可以采用这种方法 。
- (c)多级洗牌。 借鉴高性能计算(HPC)的思想,通过 k 维网状网络实现处理器之间的全连接 ,Starling 和 Lambada 项目将涉及洗牌的函数投影到一个边长为 k√N 的 k 维网格上,其中 N 表示函数的数量,并将全对全的集体原语应用于函数的子集,每个维度进行一次,以实现函数之间的全对全洗牌。与直接数据传递相比,这种多级间接方式(ML-Shuffle)大大减少了请求的数量,因为每个请求加载的数据量更大,并且每个链接只需要一个 PUT 加一个 GET。更确切地说,k 级洗牌(kL-Shuffle)将请求数量从 2N² 减少到 2kN k√N。例如,在图 2 (c) 中,我们通过将 k 设置为 2 展示了 2L-Shuffle。如图所示,仅需 60 个请求,而直接连接函数时需 72 个请求(见图 2 (a))。由于在洗牌过程中需要通过远程 S3 传输的请求较少,因此由于 S3 的限制带来的性能下降得以缓解,同时收费也降低了。
# MinFlow Design
# Topology Optimizer
# Progressively Converging ML-Shuffle
方框代表函数,上下元组分别表示函数的标识和接收数据的范围。
kL-Shuffle 网络由 k + 1 个功能层(记作 flevel)和 k 个通信层(记作 clevel)组成,图 5 (a) 显示了一个涉及四个 flevel 和三个 clevel 的 3L-Shuffle 网络。逐渐收敛的方式首先将第一个 flevel 中的功能分为相同大小(最初为 1)的组,并逐渐让它们在下一个 flevel 中汇聚成更大的组,同时保留每个组与其上游映射器之间的完全连接,直到最后一个 flevel 中的所有功能位于同一组中,从而最终实现全局的全到全连接。
函数个数:N
第 i 个 FL 有组数:
则 满足
Fi,j 的接收函数设置为 R
公式看着很绕我也没看懂,其实就是下一层组里的函数均分上一层的接受数据吧
很明显总边数只和 d 和 L 有关,为
# Candidates for Optimal Topology
仅基于拓扑结构之间的比较选择一小部分候选者,然后将最终的最佳决策委托给后续模块。特别是,尽管直接找到拓扑结构的全序是困难的,但它们之间的比较可以总结为以下几种情况:
- 在相同的 L 下,边数最少的拓扑具有最短的完成时间和数据传输成本,因为它通过最少的 PUTs/GETs 来传输数据,这些数据能更快地被远程存储服务处理。
- 在不同的 L 下,比较可能会产生歧义,因为一方面,较大的 L 会减少边数,从而减少 PUTs/GETs 的数量;另一方面,它会传输中间数据 L 次,可能会受到函数网络带宽的限制。
case1: 假设 N 可以分解为 p 个质因子,这意味着可行的 L 位于 [1, p] 之间,候选选择可以转化为一系列优化问题,如下所示:
动态规划可解:
# Function Scheduler
pre 做完了不想写了,反正也没人看,作者视频讲的很清楚
https://www.youtube.com/watch?v=1lk9ihW1LUk
b 站也有搬运:
https://www.bilibili.com/video/BV1km41167Tr/?vd_source=60be106da45a5ce3eb9dd43f3e41769c#reply245510138881