2017-04-24 4 views
1

거의 모든 요청에 ​​대해 SQS에 데이터를 보내는 Laravel 응용 프로그램이 있습니다. 그러나 종종 이러한 요청 중 하나가 실행되는 데 몇 초가 걸립니다. New Relic의 스택 추적이 첨부됩니다. tick() 메서드 (CURL 내)가 여러 번 호출되고 초가 쌓이는 것 같습니다. 또한 AWS 서비스이기는하지만 동일한 끝점에 여러 번 연결하려고 시도하는 것처럼 보입니다. 그래서 자주 응답하지 않을 것이라고 상상할 수 없습니다.SQS가 느린 게시 요청입니다.

왜 이런 일이 발생할 수 있습니까?

내 코드는 ELB 뒤에있는 두 개의 큰 인스턴스에서 AWS로 호스팅됩니다. 일반적으로 응용 프로그램은 매우 낮은 처리량 - 분당 약 50 - 100 건의 요청으로 작동합니다.

스택 추적 : https://ibb.co/f05gLk

추가 생각하십시오 DNS 관련 문제는 이러한 경우 개인 서브넷에 있다는 것, 그것은 SQS에 엔드 포인트에 긴 요청이 시간 수있다?

+0

왜 대기열을 만들지 않습니까? – sumit

+0

@sumit 그래서 로컬 대기열 (redis?)을 만들어 내 원격 대기열 (Sqs)에 게시 하시겠습니까? 이는 나가는 요청 수가 많은 서버에 내 병목 현상이 있음을 의미합니까? – djt

+0

기본 제공 리졸버를 사용하는 경우 DNS가 AWS에서 중단되기가 매우 어렵습니다. 인프라에서 특별한 처리가 이루어지며 보안 그룹 및 네트워크 ACL의 영향을받지 않으며 NAT가 DNS에서 작동하지 않아도됩니다 해결할. NAT 인스턴스를 사용하는 경우, NAT 인스턴스에서 'tshark'을 시도하여 유선에서 요청을 catch하십시오. 확실히 비정상입니다. –

답변

0

가끔 SQS 푸시가 느립니다 (특히 패킷 크기가 큰 경우). 나는 SQS가 상당히 작은 패킷 (200k)에 대해 약 80ms를 푸시하는 것을 압니다. 나는 푸시를 redis로 바꾸고 redis에서 sqs로 일괄 처리하여이를 해결했습니다. 푸시가 느린 이유를 조사하는 데 시간을 투자하지 않았습니다.

+0

흥미 롭습니다. 내 페이로드는 평방에 200k이지만, 90 %는 그 크기 임에도 불구하고 sqs에 빠르게 연결됩니다. 그러나 그들 중 10 %는 무작위로 오랜 시간이 걸리는 것처럼 보입니다. 그것은 여전히 ​​페이로드 크기를 나타냅니다? 페이로드 크기 문제라면 오랜 시간이 걸릴 수도 있습니다. – djt

관련 문제