For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了无服务器编程开发技术需要掌握的一些基础知识与用法等内容,而本文我们就继续来学习一下,无服务器编程开发冷启动优化方法。
通过在主事件处理函数之外加载来将共享数据保留在内存中
Serverless函数通常有一个处理程序(Handler)方法/函数作为底层基础设施和代码之间的接口。该函数通常会将一个事件和上下文作为参数传递给我们的函数,然后神奇的事情就发生了。
有趣的是,我们可以在这个方法/函数之外运行代码。假设每次调用我们的函数时,它都需要导入一个相同的三方库,或者可能从外部持久化存储中获取对象。我们可以在调用处理程序方法/函数之前在处理程序外部执行这些操作,而不是在调用处理程序方法/函数之后再执行这些操作。
只要容器保持活动状态,在处理程序之外声明并执行的所有内容都将保留在容器的内存中。当它再次被调用时(从“热”状态),数据的导入或获取将不需要再次运行,可以直接从内存中获取并使用它们,从而加快了代码的执行时间。
这不会加快冷启动,但会减少后续请求的启动时间。总的来说,我们的应用程序将会有更好的性能。
压缩程序包的大小
当我们为Serverless函数打包代码时,通常会将所有的东西都放到压缩文件中(从README文件到不必要的三方库文件)。
在部署到生产环境之前,清理我们的包是很重要的,删除函数运行时不使用或不需要的所有内容。这将有助于减少内部网络延迟,从而缩短冷启动时间——该函数将获取更小的包文件。
保留一个预热的函数池
如果你仍然无法忍受冷启动的延迟时间,那么后的办法是设置常规作业来保留一组预热的函数池。工作原理如下:
对函数进行配置,以快速识别短路的预热调用并终止请求,而无需运行整个函数代码。这可以通过向函数传递一个预先确定的事件来实现,例如:{"warm":true}。当函数检测到该事件参数时,只需尽可能快地终止执行。
设置一个常规作业(例如CRON),每隔几分钟调用一次函数。具体时间视情况而定。AWSLambda通常能使容器“保活”(保持活动状态)约30-45分钟,但其变化很大。
通过调用该函数,Serverless底层系统将启动一个新容器并使其“保活”一段时间。如果有一个预热过了的容器,它会因为近的热调用而保活更长的时间。当真实的用户请求你的API时,该容器将能用于更快的响应。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。