【问题标题】:How to increase performance in AWS Lambda service?如何提高 AWS Lambda 服务的性能?
【发布时间】:2017-08-02 07:48:13
【问题描述】:

我在 java 中创建了简单的 Lambda 函数并使用 API 网关公开它。 lambda 函数的计费持续时间为 60 毫秒,api 网关需要 40 毫秒 多来响应,因此这里的延迟为 100 毫秒

注意:内存大小:1.5GB 使用的最大内存:40 MB。这里提到的所有响应时间都是当 lambda 函数处于热状态(活动)时

如果我们测试 AWS API Gateway 中的延迟,它会花费 100 毫秒

如果我们在本地机器的Rest client中测试它,延迟是1500 ms

如果我们在 EC2 实例中为同一区域和同一帐户使用(调用)此 lambda 函数,则延迟为 200 毫秒

为什么 Rest 客户端有这么多变化,我们知道原因是网络延迟。我怎样才能提高它的性能,因为我们需要在本机应用程序中使用这个 Lambda 函数,它需要将近 1500 毫秒。

对于部署在同一区域和同一帐户的 EC2 实例中的 Web 应用程序,我们得到了公平的响应,即* 200 毫秒

【问题讨论】:

  • 您必须考虑到 Lambda 并不是实时系统的最佳选择。如果客户端调用了一段时间未调用的函数,则延迟将大于经常使用的函数。使用不规律且无需等待一两秒的服务最适合此服务。

标签: java amazon-web-services amazon-ec2 aws-lambda aws-api-gateway


【解决方案1】:

简答:目前最好的选择是在尽可能靠近客户的区域部署 lambda

长答案:这是任何基于 Web 的应用程序的问题,而不仅仅是 lambda/api 网关。有一些技术可以解决这个问题。

  • 缓存内容。 API Gateway 自动附带 CloudFront 分配,因此如果您缓存响应,它们会从最近的 POP 提供给客户端。

  • 多区域部署。如果您的客户端分布在许多分散的地理位置,您可以在其中几个区域部署 lamda + api 网关,然后使用基于延迟的路由的 route53 从最近的位置为客户端提供服务。

  • Lambda @edge。这目前仅处于预览阶段,目前仅支持 node.js,但非常适合响应来自最近 POP 的请求

【讨论】:

  • 请注意,API Gateway 缓存功能不使用 CloudFront 分配在 POP 处进行缓存,而是将 API Gateway 中的数据缓存在部署 API 的区域。另请注意,目前无法使用 API Gateway 设置具有自动请求路由的多区域部署。
  • 在我的测试中,最近和最远区域之间的差异并不显着——这不是 API 网关中延迟的地方。因此,除非情况有所改善,否则它可能最好用于延迟不是问题的场景(不是面向前向的网络应用程序)。
猜你喜欢
  • 2021-03-17
  • 2020-03-31
  • 2017-05-15
  • 2017-10-08
  • 2021-02-22
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
相关资源
最近更新 更多