Serverless 几乎是无堆栈的应用程序的新标准,但是问题在于,当应用程序规模增大时会出现一些不适用的需求。这些需求涉及高容量和资源需要。这些是在Lambda函数端点上最容易遇到的问题之一。因此,在这篇文章中,我们将探讨如何避免Serverless Lambda请求超时的5种最佳实践。
1. 使用流量预热
Lambda 的冷启动时间是函数运行时的时长。因此在第一次请求的时候就会触发Lambda 的冷启动,让请求的响应速度降低。可以使用 AWS 请求去预热 Lambda 函数。这个方式可以使函数一直处于“热状态”,从而避免冷启动问题。
以下示例代码可以通过请求 API 触发预热:
-- -------------------- ---- ------- ------ ----- ------ ---- ------ - ---------------------- -------- - -------------- ------------------------------------- ---------------------------------- -------------------- --------- ---- -- -展开代码
2. 使用更强大的实例
当Lambda函数处理大量请求的时候,应该考虑使用更强大的实例来避免请求超时的问题。例如使用64位内存较大的实例。
{ "MemorySize": 4224, "Timeout": 900, "Runtime" : "nodejs12.x", "Role" : "arn:aws:iam::0123456789012:role/lambda-role" }
3. 使用缓存
某些Lambda函数执行可能服从于惰性规律的数据。例如, 商品信息描述数据等等。在此情况下,函数可以具有可用缓存来提高请求响应速度。例如,Redis、Memcached或Amazon ElastiCache。
下面的示例是在API Gateway中使用Redis:
-- -------------------- ---- ------- ------ ----- ----- - ----------------------------- ---------- --- --------------------- --------- -- ----------------------- -- ----- - --------- -------- - ------- - ------ ----------------------- --------- ------- ----- -------- - ----------------------- ------ - ------------- ---- ------- -------- -展开代码
4. 垂直拆分功能
单个Lambda函数可以并行处理少量请求,但它在扩展到多个阶段时可能会面临问题。为了解决这个问题,可以将函数垂直拆分为更小的函数。当多个Lambda函数并行执行时,可以提高总体吞吐量并避免超时问题。
使用AWS服务器请求跨Lambda函数单数据处理示例代码为:
-- -------------------- ---- ------- ------ ----- ------ ---- ------ - ---------------------- -------- - -------------- ------------------------------------- ---------------------------------- -------------------- ------- ---------- -- -展开代码
5. 使用不可变模式
服务器可以不可变模式下工作。在Lambda中使用不可变代码和资源,保证每个运行实例都可以被替换而不会破坏其他实例的正确性。
示例代码:
-- -------------------- ---- ------- ------ ----- ----------- - ------------- ---------- - ----- --- ----------- ------ ----------------------------------- --------------- --- ----- ------ ------------------展开代码
结语
在避免Serverless Lambda请求超时的5种最佳实践中,我们讨论了一些最好的方法来避免Serverless Lambda请求超时问题。我们强烈建议您使用这些方法以避免Serverless Lambda请求超时。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bd78c4a231b2b7edfef61f