【问题标题】:Converting a high performance web service from Nginx on AWS EC2 to AWS Lambda将 AWS EC2 上的 Nginx 的高性能 Web 服务转换为 AWS Lambda
【发布时间】:2017-10-08 15:14:24
【问题描述】:

在我正在进行的一个项目中,在 AWS 上实现了许多 Web 服务。相对简单的服务(DynamoDB 插入或查找)且使用频率相对较低,已实现为 Lambda,非常适合该任务。还有一个更复杂的 Web 服务,它执行大量的字符串处理和正则表达式匹配,需要高性能,它已在 C++(大约 5K LOC)中作为 Nginx 模块实现,可以处理 20K 请求/ s 在 EC2 实例上运行(该服务只接受一个小的 JSON 有效负载,对位于 S3 上的静态数据文件中的一些参考数据进行大量字符串处理和正则表达式匹配,并返回大小小于 1KB 的 JSON 响应)

管理层推动统一我们对 AWS 服务的使用,并将所有 Web 服务实现为 Lambda。

我的问题是:在 EC2 上运行的 C/C++ nginx 编译模块等高性能 Web 服务是否可以实际转换为 AWS Lambda(在 Python 中)并期望具有相同的性能,还是与 EC2 上的性能相同?如果转换为 Lambda,需要注意哪些性能注意事项?

【问题讨论】:

  • 恕我直言,就性能而言,Lambda 函数无法与纯 C/C++ nginx 编译模块竞争,但有趣的是,Lambda at edge 是 Lambda 的精简版,并且可以用于响应早期的 HTTP 查询以响应 CloudFront 事件,这种机制显然需要快速。
  • 听起来你已经很好地处理了这个问题——告诉管理层把他们的手指从他们的(r)耳朵里拿出来。 ??????

标签: amazon-web-services nginx amazon-ec2 aws-lambda


【解决方案1】:

Lambda 能做到吗?是的。 Lambda 应该这样做吗?没有。

为什么?成本。

首先,假设您在一整天内每秒处理一次20k Requests / Second。这将相当于当天的 17.28 亿 个请求。在免费套餐中,您确实获得了 100 万个免费请求,因此可计费请求降至 17.27 亿个。 Lambda 收费$0.20 / Million Requests,所以:

1.728 Billion requests * $0.20 / Million requests = $345.40

我很确定您的 EC2 成本低于每天。采用m4.16xlarge 实例,采用按需定价,我们得到:

$3.20 / Hour * 24 Hours = $76.80

看到区别了吗?但是,Lambda 也会对计算时间收费!

假设您在 Lambda 函数中包含了 c++ 可执行文件(从 PythonNode 调用,因此我们不会考虑从 c++ 到解释语言的性能损失。由于 Lambda以100 Millisecond 块计费,四舍五入,对于这个估计,我们假设所有请求都在100 Milliseconds 内完成。

假设您使用最小的内存大小,128 MB。这将为您提供免费套餐内的3.2 Million Seconds,或32 Million Requests,因为它们都在100 Milliseconds 之下,免费。但这仍然让您有1.696 Billion Requests 计费。 128 MB 大小的成本是 $0.000000208 / 100 Milliseconds。鉴于每个请求在100 Milliseconds 下完成,执行时间的成本将为:

$0.000000208 / 100 Milliseconds * 1.696 Billion 100 Millisecond Units = $352.77

将该成本添加到请求的成本中,您会得到:

 $345.40 + $352.77 = $707.17

EC2:$76.80
拉姆达:$707.17

请注意,这只是使用您提供的 20k Requests / Second 数字,并且适用于 一天。如果实际请求数不同,请求耗时超过 100 毫秒,或者您需要的内存超过 128 MB,则成本估算会相应上升或下降。

Lambda 有它的位置,但 EC2 也有。仅仅因为你可以把它放在 Lambda 上并不意味着你应该这样做。

【讨论】:

  • 同意。它总是归结为同一个问题 - 您的服务(lambda 将要取代)在请求/处理方面是否大量?如果是 - 只要您希望您的业务盈利,您就不应该使用 lambda。
  • 我认为成本会更高——如果成本是唯一的考虑因素,这里的数字差异可能会导致 for Lambda 的情况。对于许多组织(尤其是那些有“管理”的组织)来说,这可能是零花钱。我想知道更多关于性能方面的考虑(而且 OP 似乎已经对此有了很好的处理)。
  • 我很确定成本会高于此。假设所有请求将在 100 毫秒内完成是相当乐观的。
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 2021-03-17
  • 2021-02-11
  • 2017-07-28
相关资源
最近更新 更多