我正在使用带有lambda函数的API网关创建应用程序的后端,并且我在请求的响应时间有问题。
已经知道,lambda功能具有臭名昭著的"冷启动",好的,我们已经接受了。但是我似乎是一个新的冷门,这次是API网关。并且不是待机时间的几个ms
,它是seconds
(大约12-15秒)。哦,天哪,这是一个大问题...
在第一个请求和一些不活动之后,此响应延迟发生12-15秒(大约1小时)。
我的问题是:什么可能导致此延迟以及如何解决?
更多信息:
我的lambda功能配置为在VPC上运行。
CloudWatch Logs来自API网关:
(01) Extended Request Id: XXXXX=
(02) Verifying Usage Plan for request: XXXXX. API Key: API Stage: XXXXX
(03) API Key authorized because method 'GET /XXXXX' does not require API Key. Request will not contribute to throttle or quota limits
(04) Usage Plan check succeeded for API Key and API Stage XXXXX/v1
(05) Starting execution for request:
(06) HTTP Method: GET, Resource Path:
(07) Method request path:
(08) Method request query string:
(09) Method request headers:
(10) Method request body before transformations:
(11) Endpoint request URI:
(12) Endpoint request headers:
(13) Endpoint request body after transformations:
(14) Sending request to XXXXX
(15) Received response. Integration latency: 14497 ms
(16) Endpoint response body before transformations:
(17) Endpoint response headers:
(18) Method response body after transformations:
(19) Method response headers:
(20) Successfully completed execution
(21) Method completed with status: 200
(22) AWS Integration Endpoint RequestId :
(23) X-ray Tracing ID :
更新14/12/19:
aws引入了已提供的lambda:https://aws.amazon.com/blogs/aws/new-provisioned-concurrency-for-for-lambda-functions/
在这里牢记的很少的事情要牢记,当容器Lambda运行实际上是"退役的"时,就会发生冷淡的起点 - 这意味着AWS基础架构已从"准备好"到"准备好"到没有人真正使用它,让我们来吧搁置它"。
lambda在VPC外面的外面可以有一个寒冷的开始时间,最多可以6秒钟,在VPC内,您可以在每个容器中最多可以看12秒钟同时,第二个人将获得冷门。
因此,正如Dashmug Right先生建议使用计划的功能来热身您的Lambda是一种简单的方法,现在要记住的一件事是,如果您期望数百个请求一秒钟,您的功能可能会加热1个容器保持x容器数量的温暖。
有关如何使此简化的示例,您可以查看此问题 - 它是无服务器框架的插件,可以正是您想要的。
本质上,您需要一个函数,该功能每个终点都会提出x数量的并发请求 - 请注意,这是一个成本
就我个人而言,我认为寒冷的起点被超越了 - 确保顾客有时会遭受缓慢的反应,但是如果您的API交通相对稳定,那么我真的不担心您的客户会保持适当的Lambda的温暖,如果它容易发生,要尖峰,那么值得将它们变暖。
考虑到这一点,我对API的平均请求时间IS<400ms-所以我需要2个请求,每分钟120个,每小时7200个请求,甚至可以一直都需要两个容器 - 如果您有类似的应用程序登录的应用程序,请致电HomeScreen的API端点,您可以做某事很简单,就像登录 -> sns向下一个端点开火的热身事件。
基本上,如果您知道您的消费者要调用API的流量,则可以主动根据上一个称为"称为"的端点。
api网关没有冷启动,afaik。
一小时无活动后的延迟仍然是Lambda的冷启动。
为了防止这种情况,您可以创建一个CloudWatch计划的事件,以继续致电您的lambda(例如每5分钟)以避免不活动和降低冷
一旦您进入生产,这就不再是一个问题,而且流量已经很高,因此无活动的不活动。