代码之家  ›  专栏  ›  技术社区  ›  Lucas Kauer

API网关+Lambda响应时间极慢

  •  2
  • Lucas Kauer  · 技术社区  · 6 年前

    我正在使用带有Lambda函数的API网关创建应用程序的后端,请求的响应时间有问题。

    ms 待机时间 seconds

    更多信息:
    我的lambda函数配置为在专有网络上运行。

    (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 : 
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Mrk Fldig    5 年前

    更新日期:14/12/19:

    AWS引入了供应Lambda: https://aws.amazon.com/blogs/aws/new-provisioned-concurrency-for-lambda-functions/

    因此,正如Dashmug right先生建议的那样,使用一个预定函数来预热lambda是一种简单的方法,现在需要记住的一点是,您的函数可能会预热1个容器,如果您期望每秒有数百个请求,那么您需要预热X个容器。

    你可以看一个简单的例子 this -它是一个用于无服务器框架的插件,完全符合您的要求。

    基本上,你需要一个函数,使每个端点的并发请求数达到X——要知道这是有成本的,尽管你可以用每月不到30美元的价格维持一个相当不错的微服务。

    想想看,我对所处理的API的平均请求时间是<400毫秒-因此,我需要每秒2个请求,每分钟120个,每小时7200个,甚至开始一直需要两个容器-如果您有类似于用户登录的应用程序,那么为主屏幕调用api端点,您可以执行登录等简单操作->SNS向下一个端点触发预热事件。

        2
  •  1
  •   Noel Llevares    6 年前

    API网关没有冷启动,AFAIK。

    一个小时不活动后的延迟仍然是Lambda的冷启动。

    减少 冷启动。

    一旦您在生产环境中,并且您的流量已经很高了,所以不活动的情况就少了,这就不太成问题了。