主动式或反应式无服务器系统哪个更好?? - Justin


本文介绍了 serverless 中调度策略的异同。特别是,我将重点关注无服务器系统环境中主动与被动供应的维度。我按目标和效果列出了不同的政策,然后简要描述了每一项。
“无服务器”范式由两个主要方面组成:服务提供商和业务客户。
业务客户本身包括将代码上传到服务提供商的开发人员。商业客户也有终端客户,他们通过应用程序编程接口 (API) 请求使用上传的代码。这些请求可能由与企业网站或企业使用的其他设备的交互触发。
Serverless 的总体目标是为企业提供一种经济的“现收现付”的代码托管选项,其性能与现场服务器相当。
无服务器服务提供商能够通过规模经济建立业务并与多个租户(企业客户)共享其基础设施。例如,购买了几台服务器级机器的企业可能不会 100% 使用它们(最大利用率),这意味着有空间共享此容量,这就是无服务器服务提供商所做的。
在企业客户方面,这使企业能够按需使用计算基础架构,因此只需为其使用的内容付费,而不是支付构建/设置服务器和必要的网络基础架构的前期资本成本。

无服务器的主要问题是“冷启动”——为了共享基础设施,业务客户的代码需要进出混洗,这导致发生多个请求而没有运行代码的实例。
为了解决这个问题,无服务器服务提供商依靠调度技术来管理冷启动惩罚和服务器利用率之间的权衡。
当前的无服务器商业产品采用的调度策略有几个示例:

  • AWS Lambda:装箱——AWS Lambda 似乎旨在让运行的实例数量尽可能少,以服务大量请求。AWS Lambda 使用开发人员声明的函数所需的内存量来确定是否需要实例化新的 VM 以满足需求。
  • Google Cloud Functions (GCF):基于利用率— Google 在其开发人员指定的扩展策略中实现了最大的可配置性。然而,这可以说是与无服务器范式相矛盾的,在无服务器范式中,服务提供商的角色应该是扩展和扩展实例。GCF 允许开发人员使用 CPU 利用率、HTTP 服务率和云指标作为信号来扩展和扩展。GCF 还允许开发人员设置最小实例数,以降低函数的冷启动频率。
  • Microsoft Azure Functions:基于队列长度——Azure Functions 的规模因触发器而异。例如,使用 Azure 队列存储触发器,使用最旧队列消息的队列长度和年龄来缩放实例数。

其他调度技术包括:

  • 启发式 - 最少连接,循环。在负载均衡中经常会提到这些调度策略。请注意,这些并不能确定分配给某段代码的服务器资源量,因此不是供应策略。
  • 更多 Bin-Packing 调度— 相反,一些调度策略(如 bin-packing)会影响系统的供应策略。例如,流行的开源 OpenWhisk 无服务器平台依靠保持活动超时来减少不使用实例时的实例数量。它使用散列调度程序尝试根据散列函数定义的顺序主要在“第一个”可用工作人员上调度请求,从而允许较旧的实例变得陈旧和解除分配。
  • 更多基于利用率的扩展——装箱调度的挑战之一是运行时性能下降,这是由于在 TK1 中讨论的多个容器之间共享 VM 资源。为了解决这个问题,TK2 旨在通过设置 CPU / 内存利用率的目标范围,并在此基础上扩展实例来平衡运行时性能和资源效率。
  • 基于预测 -理想情况下,如果可以预测传入请求的数量,则可以随着速率或请求的增加预先配置实例。包括 ( Zhang et al, 2013 ) 和 ( Zhang et al, 2019 ) 在内的几项工作分别使用自回归综合移动平均 (ARIMA) 和 LSTM ML 模型来预测未来的请求率并相应地缩小/缩小。此外,管道(函数链)中的函数可以更容易地预测(Daw 等人,2020 年),(Banaei 和 Sharifi,2021 年)。这些方法的主要限制取决于工作负载的可预测性和历史信息量。由于使用 ML 模型来执行以每秒 1000 次请求发生的调度动作的推理,这些工作也会产生大量计算开销。
  • 基于物流的——另一类调度技术是基于物流和排队理论的研究。例如,(Suresh 等人,2020 年)使用平方根人员配备政策,根据需求的波动性和目标服务率(冷启动频率)预先提供额外资源。


供应策略确定代码实例何时“预热”。
现在,让我们按主动和被动供应策略来划分这些方法。

主动配置
这些方法通常旨在提高性能(通过降低冷启动频率),同时牺牲服务器利用率。这是通过主动运行代码实例来完成的,这些代码实例可能仍未使用,但已准备好接收新请求。
使用此策略的无服务器服务提供商倾向于继续按实际请求的数量和持续时间收费,从而吸收空闲资源成本,而不是将运行空闲服务器的成本转嫁给业务客户。
主动供应政策包括:

  • 基于预测的策略
  • 基于利用率的策略
  • 基于物流的政策

反应式Reactive供应
相反,这些方法旨在通过在当前分配的服务器不能满足不断增加的即将到来的请求负载时延迟实例化请求代码的新实例来最小化资源成本。
通过这样做,无服务器服务提供商不会产生额外的空闲服务器成本,但会通过增加冷启动频率来牺牲性能。这对于具有严格延迟要求的商业客户可能没有吸引力。
反应性供应政策包括:

  • 装箱政策

如何解决这些问题?
有不同的研究方向来解决资源效率和性能之间的这种权衡,包括:

  • 降低冷启动成本。通过降低冷启动的成本,反应式供应可以变得更具吸引力。这是因为空闲资源可以用于实际计算,而不是等待未来可能不会到达的请求。由于 GPU 的昂贵性质,随着无服务器中 GPU 等加速器的采用越来越多,具有低冷启动成本的反应式配置尤其具有吸引力。
  • 准确预测未来的工作量。如前所述,工作负载的准确预测可以理想地实现最大的资源利用率,同时最大限度地减少冷启动损失。工作负载预测适用于单个功能以及功能链。
  • 降低闲置资源的成本。在主动配置以最小化冷启动频率的范式下,一种替代方法是降低空闲资源的成本。这可以通过使用更便宜/低端的机器来托管主动配置的实例来完成。

结论
本文比较并对比了主动式和被动式供应策略。主动供应策略比被动供应策略更多样化。本文首先确定无服务器范式中参与者的动机,主要是服务提供商和业务客户,然后确定商业调度策略并将它们与供应策略相关联。最后,提供了无服务器研究的未来方向。