2017-04-24 56 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