2017-04-24 124 views
1

我有一个Laravel应用程序,几乎在每个请求中都向SQS发送数据。但是,每隔一段时间,其中一个请求需要几秒钟才能执行。附件是New Relic的堆栈跟踪。看起来,tick()方法(在CURL中)被调用很多次,秒数刚刚累积起来。它似乎也尝试连接到相同的端点,尽管它们是AWS服务,所以我无法想象它们会经常无响应。SQS发布请求速度慢

任何想法为什么会发生这种情况?

我的代码托管在AWS上,位于ELB后面的两个m4.large实例中。通常,应用程序的吞吐量相当低 - 每分钟大约需要50-100个请求。

堆栈跟踪:https://ibb.co/f05gLk

其他的想法:是,这些实例是在一个私人子网,是有可能在很长的时间要求对SQS端点是一个DNS相关的问题?

+0

你为什么不排队? – sumit

+0

@sumit所以让一个本地队列(redis?)发布到我的远程队列(Sqs)?这是否意味着我的服务器出现瓶颈问题? – djt

+0

如果您使用的是内置的解析器,DNS很难在AWS中破解 - 它在基础架构中具有特殊处理能力,不受安全组和网络ACL的影响,并且不需要NAT即可工作以便DNS解决。如果您正在使用NAT实例,请在NAT实例上尝试一些'tshark'来捕获线路上的请求。肯定不正常。 –

回答

0

有时SQS推迟缓慢(> 50ms)(尤其是如果您的数据包大小较大)。我注意到SQS推动大约需要80ms才能获得一个相当小的数据包(200k)。我把推到redis和从redis批量推到sqs来解决这个问题。 我没有花时间调查为什么推动缓慢。

+0

。我的有效载荷平方为20万,但90%的平方很快就可以连接到平方。但其中10%似乎随机需要很长时间。这仍然是有效载荷大小的指示吗?我会想象如果这是一个有效载荷大小问题,他们可能都需要很长时间 – djt