从亚马逊 AWS EC2 到本地服务器的 Web 服务调用的高延迟问题

从亚马逊 AWS EC2 到本地服务器的 Web 服务调用的高延迟问题

我们有一个旧版 Web 应用程序,运行于位于休斯顿的数据中心。我们开发了一款基于 .net 4 的新 Web 应用程序,以便为客户提供新功能。新 Web 应用程序托管在 Amazon AWS EC2 环境中(北弗吉尼亚地区 US-East-1b 区域)。

为了与旧版应用程序无缝集成,新的 Web 应用程序会调用 Web 服务来检索数据。我们发现这些 Web 服务调用的延迟时间异常高,大约为 5 秒以上。在我们的本地 PC 上,完全相同的 Web 服务调用在不到 1 秒的时间内返回(考虑到与实际服务器的物理距离,这是有道理的)。奇怪的是,我们在加利福尼亚的开发人员也有相同的毫秒级响应时间。我们正在使用第三方工具(如 SoapUI、Google Chrome 扩展程序(如 Advanced REST Client)、Postman REST Client 等)测试 Web 服务响应。

似乎这还不够奇怪,我们在测试时注意到,位于同一区域和可用区的其他某些 ec2 实例也存在同样的低延迟。如果我们在所有 ec2 实例上都遇到持续的高延迟,我可以理解。但还有其他事情发生。

比较低延迟和高延迟 ec2 服务器之间的各种统计数据和结果,没有显示出任何显著差异:ping(恒定 40 毫秒)、tracert、winmtr 等。

我们也有位于 VPC 中的实例。因此,我尝试了 Web 服务主机服务器的公有和私有 IP 地址,但上述结果也没有任何不同。

我们需要解决这个延迟问题,因为这导致生成的网页加载非常慢(几乎 15 秒以上,这是不可接受的)。

ec2 实例具有 Windows Server Datacenter 64 位。如果我可以提供任何其他信息来帮助诊断此问题,请告诉我。

答案1

首先,这听起来像是您必须使用 Amazon 进行故障排除的问题。对目标主机进行简单的 tracert 即可显示延迟的位置。

其次,您应该将应用程序设计为加载页面,然后在数据可用时显示数据,而不是简单地期望它显示出来。在我看来,您似乎没有在应用程序中使用任何 AJAX 故障转移。您如何确保您的新应用程序始终可以连接到您的旧应用程序?

总结:运行 tracert,致电亚马逊,检查您的代码,确保它允许延迟和没有互联网连接的情况。

答案2

5 秒以上的延迟看起来很少见,但并不罕见。尝试使用 iperf 之类的工具来检查休斯顿数据中心和弗吉尼亚 ec2 实例之间的带宽。如果有帮助,以下是我们最近在两个亚马逊区域(东部和西部)之间以及这些区域与我们位于加利福尼亚的数据中心主机之间进行的一些带宽测量:

ec2-east -- ec2-west: 25.75 +-7.96
ec2-east -- localhost: 665.0 +-104.5
ec2-west -- localhost: 79.35 +-4.38

所有数字均以 Mbits/秒为单位,测量二十次以上并取平均值。+- 是标准差。

希望这可以帮助。

相关内容