我们在Heroku应用程序上遇到数据库查询时间问题,我已经设置了一个新的测试应用程序,其脚本可以ping我们的MongoLab数据库服务器和Google。 MongoLab数据库服务器与Heroku应用程序位于同一数据中心。
到数据库服务器的RTT大约是3毫秒。现在,即使在测试服务器上,我也看到了大量的抖动。您可以在此处查看我的ping脚本的输出:http://damp-citadel-6004.herokuapp.com/test - 延迟频繁波动到30ms范围内,有时甚至达到ms范围内的100s。
我只是想知道这是否是Heroku的正常行为?如果是,Heroku将不再是一个可行的选择,因为我们需要MongoLab连接的低延迟。由于添加到查询中的时间,当前的延迟量正在扼杀我们的应用程序。
Heroku堆栈是Cedar,它位于US-EAST,MongoLab数据库也是如此。
任何帮助都将不胜感激。
答案 0 :(得分:0)
我很好奇你怎么知道你的heroku dynos和mongolab的实例在同一个数据中心?以某种方式通过IP?你真的可以肯定吗?这两个服务都使用us-east-1 AWS区域中的多个可用区域,据我所知,不允许您指定资源所在的首选项或报告。同一应用程序的2个heroku dynos可能,并且从它的声音可能确实存在于不同的AWS AZ中。毫无疑问,不同的AZ位于不同的数据中心,我相信即使一些可用区域跨越多个数据中心。
无论如何,你不是唯一一个。我最近从heroku和我自己的ec2实例到同一个亚马逊地区的mongolab和mongohq都经常遇到连接问题。 Mongohq支持回应说,他们在us-east-1的不同AZ中的EC2实例之间也存在连接问题,并暗示AWS支持最近承认了一些网络级/安全组扩展问题。我能够找到这篇文章:http://orensol.com/2009/05/24/network-latency-inside-and-across-amazon-ec2-availability-zones/这表明你所观察到的延迟特别高。
也许相关地,我在EC2中遇到了DNS解析器问题 - 包括heroku - 对于mongolab和mongohq。即使是权威服务器都属于亚马逊的53号区域。总而言之,似乎us-east-1中可用区域之间的连接现在不是100%,所以当我鼓励您尝试其他基于EC2的数据库服务时,您可能看不出任何差异。