托管应用程序的传统方法通常涉及使用专用服务器或虚拟机来运行代码并为客户提供服务。向无服务器计算的过渡迫使我们分解应用程序并更改其架构。随着这些变化,尽早考虑无服务器计算的具体情况非常重要。
任何无服务器计算的主要组件都是 lambda 函数。lambda 函数的运行时生命周期包含三个阶段:
初始化阶段,创建执行环境并下载源代码并准备执行。
调用 lambda 函数的执行阶段
关闭阶段,执行环境被破坏
在初始化期间,当没有可用 赌博数据库 的 lambda 来处理下一个请求时,将为 lambda 创建一个新环境,该环境将能够处理此请求。这称为冷启动。初始化时间(或冷启动)可能需要很长时间,这可能会导致请求延迟长达几秒钟。这个问题对于响应时间很重要且传入请求数量频繁跳跃的应用程序尤其重要。
有几种方法可以最大限度地减少此问题对 Amazon AWS 上的应用程序的影响。
利用解释型编程语言编写 lambda 函数
缓解冷启动的第一种方法是使用 Python 或 NodeJS 等解释型编程语言编写 lambda 函数。解释型语言避免了初始化期间的编译时间,而使用 Java 或 C# 等语言编写的 lambda 函数则需要编译时间。在 lambda 函数中使用解释型语言可以在发生冷启动时更快地开始执行。
冷启动 1
利用临时缩放
缓解时间过长的冷启动的第二种方法是使用一种特殊的 lambda 函数扩展类型 - 预配置扩展。通过这种方式,我们可以对抗这种冷启动发生的频率,而不会影响冷启动时间本身。预配置扩展允许您设置 lambda 函数生成的实例数,这些实例将始终启动并等待来自客户端的请求。它们已经“预热”,请求将由已实例化的函数处理。
优化 lambda
第三种方法是一组优化 lambda 函数本身的方法。例如,初始化阶段的一部分是下载 lambda 代码。我们可以优化通过网络下载的代码量。例如,对于 Java,有一些框架和库允许您使应用程序工件的大小更小。这种框架的一个例子是Quarkus。我们还可以分解我们的应用程序,以便只有必要的代码及其依赖项在 lambda 函数中。经典的 java 方法,使用包含几百兆字节的 fat jar,在这里是一种不好的做法。
此外,为了加快速度,我们可以增加 lambda 函数可用的 RAM 量。计算性能会随着这一变化而变化。可用的 vCPU 数量更多,核心频率也会增加。例如,具有 128 MB 内存的 lambda 实例的 vCPU 比具有 256 MB RAM 的 lambda 实例的 vCPU 弱 2 倍。
结论
我们考虑了冷启动问题、它出现的原因以及它对客户的影响。有许多解决方案可以解决这个问题,有些是基于从数字上减少这个值(控制工件和代码库的大小,选择合适的编程语言),而另一些则有助于最大限度地减少与冷启动相关的情况(使用高级云提供商扩展规则)。