2014-07-14 1 views
0

aws sqs에 메시지를 보내는 데 사용되는 첫 번째 웹 서비스가 있습니다.이 웹 서비스는 별도의 ec2 인스턴스에 배포됩니다. 웹 서비스는 IIS 8에서 실행됩니다.이 웹 서비스는 두 대의 컴퓨터에서 초 당 500 개의 요청을 처리 할 수 ​​있으며 초당 1000 개의 요청을 의미합니다. 더 많은 요청을 처리 할 수 ​​있습니다.AWS Sqs ReceiveMessage가 SendMessage만큼 빠르지 않습니다.

두 번째 웹 서비스가 동일한 전원/구성의 다른 ec2 인스턴스에 배포되었습니다. 이 웹 서비스는 Sqs에 저장된 메시지를 처리하는 데 사용됩니다. 현재 테스트 목적으로, 나는 단지 Sqs에서 메시지를 받고 그냥 삭제하고 있습니다.

저는 aws Sns 서비스를 가지고 있습니다.이 서비스는 두 번째 웹 서비스에 메시지가 sqs에 왔음을 알리고 처리 할 메시지를받습니다.

그러나 두 번째 웹 서비스는 첫 번째 웹 서비스만큼 빠르지는 않지만 테스트를 실행할 때마다 메시지는 sqs에 남아 있지만 이상적으로는 아무 메시지도 sqs에 남아 있어서는 안됩니다.

이 부분과 내가 중점을 두어야 할 영역의 가능한 원인을 알려주십시오.

미리 감사드립니다.

답변

0

수신자는 두 번의 개별 호출에서 수행되는 메시지를 수신하고 삭제하므로 수행 할 작업이 두 배로 늘어납니다. 볼륨이 큰 경우 보낸 된 메시지를 처리하기 위해 인스턴스를 두 배로 늘려야 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 하지만 지금 당장은 높은 볼륨을 가지고 있지 않습니다. 단 1 초당 1000 건의 요청 만있을 것입니다. 심지어 나는 프로세서가 초당 500 건의 요청을 처리 할 수 ​​없다는 것을 관찰 해왔다. – user3417528

0

한 번에 몇 개의 메시지를 받고 있습니까? MaxNumberOfMessages을 10으로 설정하고 DeleteMessageBatch을 10으로 설정하는 것이 좋습니다. 처리량이 크게 향상 될뿐만 아니라 SQS 청구서가 약 60 % 가량 줄어 듭니다.

또한 SNS 주제에 대해 혼란 스럽습니다. 다른 웹 서비스에 메시지가 있다는 것을 SNS 주제에 알릴 필요는 없습니다. 모든 메시지가 해당 주제에 대한 게시를 생성하면 많은 추가 작업과 비용이 추가됩니다. 대신 긴 폴링을 사용하고 WaitTimeSeconds을 20으로 설정하고 항상 SQS를 호출해야합니다. 한 달에 2 번씩 0 개의 메시지를받는 경우에도 지속적으로 긴 폴링은 무료 티어 내에 잘 보관됩니다. 무료 티어 (Tier) 이상인 경우 지속적으로 긴 서버 2 대를 사용하여 SQS 큐를 폴링하는 비용은 $ 0.13/월입니다.

관련 문제