【问题标题】:AWS Load balancer causing slow API requestsAWS 负载均衡器导致 API 请求缓慢
【发布时间】:2020-11-26 04:07:34
【问题描述】:

当通过我的 AWS 弹性负载均衡器通过 https 调用时,我的 API 请求非常慢。弄清楚我需要做什么才能使负载均衡器更高效的最佳方法是什么?我正在使用专门针对 HTTPs 的负载均衡器,并运行一个带有 HTTP 服务器的 ec2 实例。

eu-central-1a、eu-central-1b 中的 AWS 弹性负载均衡器。
eu-central-1a 中的 EC2 实例是托管 http 服务器的 c5.xlarge。

当我通过 HTTPS 调用从美国东海岸向负载平衡器发出 API 请求时,它可以工作,但速度非常慢。最佳情况是 400 毫秒,大约 20% 的时间会达到 800-1500 毫秒。

当我通过 HTTP 从美国东海岸直接向 EC2 实例发出 API 请求时,完全绕过了负载均衡器,速度非常快。几乎总是 130-140 毫秒,很少出现尖峰。

注意:我仅将负载平衡器用于 HTTPS 支持,我并不真正关心(现在)跨多个后端的实际负载平衡。目前,我只有一个后端。我所有的来电都来自美国东海岸,我的服务器暂时必须留在欧洲。所以是的,我可以将我的服务器移至美国东海岸,以便在一个地区进行通话,但出于各种其他原因,我不想这样做。

问题和可能的解决方案:

  • 我选择了 Application Load Balancer,对吗?
  • 如何判断我的配置是否应该归咎于它的缓慢?
  • 我是否应该将我的负载均衡器移到美国东海岸,客户将从那里拨打电话?并将 EC2 实例留在 eu-central-1a 中?
  • 我的 ec2 实例 (c5.xlarge) 除了 http 服务器外绝对没有在其中运行,所以我知道它不会因 CPU 和内存使用而过载。我的实例类型不适合连接到负载均衡器吗?

问题已解决:

  • 从开发运维人员那里得到了一些帮助。在 Route 53 控制台中,他删除了我在设置向导中创建的两条 A 记录,并将它们替换为直接指向我的别名的 CNAME 记录。奇怪的是,巫师不让我这样做。我不得不使用 Route 53 的“旧版本”,它让我可以直接输入记录。
  • 现在性能很好。建立安全连接时的第一个请求需要几百毫秒,但之后的每个请求大约需要 130 毫秒。那是从美国东海岸到德国法兰克福。现在按预期工作。
  • 我尝试将负载均衡器移动到另一个区域,但 AWS 不允许这样做。

【问题讨论】:

  • 如果你的用户都在我们东部,你能把你的服务移到更近的地区吗?负载均衡器不应该增加太多延迟,但没有其他明显的答案。
  • @JohnRotenstein 我明天试试。有什么简单的方法可以将负载均衡器移动到另一个区域,还是我必须创建一个新的并将其指向 ec2 实例?
  • 请记住,对于小型负载来说,HTTPS 需要 2 倍于 HTTP 所需的时间是正常的……所以如果您的 HTTP 仅需要 140 毫秒,那么 HTTPS 的绝对最佳理论时间是 280 毫秒。您还需要查看负载均衡器日志,因为它们会告诉您均衡器和 EC2 之间的时间,您需要先了解这些信息,然后才能有效地进行故障排除。
  • @JohnRotenstein 看起来我无法在第 5 步:注册目标下选择另一个区域中的实例。 imgur.com/DygCKwF 可能无法将负载均衡器放在与 EC2 实例不同的区域?
  • 感谢大家的帮助。我找到了问题并在上面列出了解决方案。

标签: amazon-web-services amazon-ec2 https amazon-elb


【解决方案1】:

对于最低延迟,您需要客户端和服务器之间的最短距离,使用cloudping 我甚至可以直接在 AWS 主干网(这是 AWS 私有网络)上的 AWS 区域之间看到延迟为 @987654324 @。在公共互联网上,这将更多。

如果您目前无法将实例移动到另一个区域,延迟的性能仍将适用。不过,我建议看看 CloudFront,它是 AWS CDN 服务。

Amazon CloudFront 内容分发网络 (CDN) 可大规模扩展并分布在全球各地。 CloudFront 网络有 216 个接入点 (PoP),并利用高度弹性的 Amazon 主干网络为您的最终用户提供卓越的性能和可用性。

CloudFront 的一个主要功能是提供前端对象(图像、css、静态 HTML)的本地缓存,如果您可以缓存这些对象中的任何一个,您的用户体验将得到显着改善。许多网站将使用此服务来缓存其网站的许多静态或很少更改的部分,例如主页。

如果静态页面的某些部分是动态的,您能否考虑在初始页面加载后异步加载它们?这让用户感觉到网站正在加载,而页面的某些部分仍在加载。

您还将受益于 CloudFront 的性能改进,例如它利用 AWS 主干来改善用户 PoP 位置和目标端点之间的延迟。

您可能会感兴趣的几个链接:

【讨论】:

  • 我不是开发运维专家,所以请原谅我的愚蠢问题。您是否建议我让 Amazon CloudFront 为我处理 https 并指向我的 ec2 实例并获得更好的性能? Amazon CloudFront 说它使用 Elastic Load Balancing,所以我使用它不会得到相同的结果吗?
  • 您可以将它添加到负载均衡器端点的前面,让 ELB 保持原样。它只是让第一次联系更接近客户,并减少延迟,因为 CloudFront 将使用 AWS 私有网络与 ELB 通信,而不是与客户的互联网通信。它还具有一些内置机制来提高速度,如果您感兴趣,附加的视频还包括更多幕后示例。但从您的角度来看,您只需将 DNS 指向 CloudFront 分配而不是 ELB。 ELB 成为 CloudFront 中配置的来源
  • 所以我创建了一个 CloudFront 分配并将其指向我的负载均衡器,它会生成一个类似 https://.cloudfront.net/ 的 URL,当我在浏览器中键入它时它会重定向并加载就好了。但是当我在邮递员中进行相同的调用时,它会失败并出现 403 错误。我配置错了吗?我设置了配置,以便启用 https 并允许 HTTP 方法 = GET、HEAD。我只打 GET 电话。任何想法为什么我的简单 GET 在邮递员中不起作用但在 chrome 网络浏览器中起作用?除了 -> Origin Protocol Policy = Match Viewer 之外的所有设置都默认
  • 它通常会给你HTML解释为什么?你有HTML的输出吗? :)
  • 我刚刚向您发送了一封包含详细信息的电子邮件(发送至您的 stackoverflow 帐户中的电子邮件地址),这样我就可以更轻松地分享,而不必担心隐私问题。
猜你喜欢
  • 2020-05-26
  • 2018-06-30
  • 2015-01-22
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2018-04-14
相关资源
最近更新 更多