워커에서 이벤트를 처리하는 시간이 sqs의 Visibility timeout을 넘긴 경우, 동일한 이벤트가 다른 워커에서 동시에 처리될 수 있는가?

jinwook han·2021년 1월 4일
0

aws sqs 설정

목록 보기
2/5

워커에서 이벤트를 처리하는 시간이 sqs의 Visibility timeout을 넘긴 경우, 동일한 이벤트가 다른 워커에서 동시에 처리될 수 있는가?
-> 그렇다.

sqs의 Visibility timeout은 워커가 한 이벤트를 처리하는 동안, 다른 워커가 그 이벤트를 처리하지 못하도록 막을 수 있는 시간을 의미한다.
https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

하지만 워커가 visibility timeout보다 더 많은 시간을 이벤트 처리에 소모할 경우, 그 이벤트는 다른 워커에게도 보여져 다른 워커에서도 동시에 처리된다.(여러 개의 워커를 사용하고 있다고 가정할 경우 그렇다)

실험

1. sqs로 트리거되는 aws lambda를 두 개 만든다.(워커로 사용)

2. aws lambda 중 하나는 이벤트 처리 시간을 인위적으로 3초로 둔다.

두 개의 워커가 있다.
하나의 워커는 visibility timeout보다 이벤트 처리 시간이 길게 되도록 time.sleep(3) 코드를 추가했다.

3. sqs의 Visibility timeout를 1초로 설정한다.

4. sqs에서 이벤트를 보낸다.

{"bye":1}
{"bye":2}
...
{"bye":5"}
총 5개의 메시지를 보낸다.

5. 로그를 확인한다. 똑같은 이벤트가 두 개의 워커에서 처리됐음을 확인한다.

visibility timeout보다 이벤트 처리가 길게 된 워커의 로그.

그 외 워커의 로그


cloudwatch의 lambda 로그를 확인한다.
{"bye":1} 이벤트가 동시에 처리됐음을 확인할 수 있다.

0개의 댓글