내 앱에서 이벤트가 발생하면 많은 사용자에게 이메일을 보내야합니다. 한 번에 모든 이메일을 보내지 않고 서서히 메일을 보내고 싶습니다. 설명을 명확히하기 위해 10,000 명의 사용자에게 이메일을 보내야한다고 가정 해 보겠습니다.GAA 작업 대기열 및 ETA가 많은 작업
현재 작업 속도는 최대 1 작업/초인 작업 대기열에서 수행합니다. 일괄 작업으로 10,000 개의 작업을 대기열에 넣었으며 이메일은 1 초당 전송됩니다.
작업 대기열을 최대 속도로 제한하는 대신 작업에 대해 ETA를 사용하도록 변경하고 싶습니다. (즉, 작업 제출을 일괄 처리 할 것 제외) 개념적으로는 다음과 같이 될 것이다 :
now = datetime.utcnow()
for i, email in enumerate(email_list):
eta = now + datetime.timedelta(seconds=i)
deferred.defer(send_email, email, _eta=eta)
이 같은 변경 사항을 구현하기 전에, 내가 GAE 효율적으로이 작업을 수행 할 수있는 자신감을 가지고 싶습니다.
작업 대기열에 10,000 개의 작업이 있고 각 작업 시간이 다른 경우 GAE 작업 대기열은 모든 작업을 효율적으로 모니터링하고 대략적인 시간 (정확한 ETA는 중요하지 않음)에서 적절한 시간을 시작할 수 있습니까? ? 나는 구글이 이것을 위해 어떤 알고리즘을 사용하는지 모른다.
편집 : 당신은 하루에 ETA 각을 억 작업을 삽입 한 경우
을 상상해보십시오. GAE가 이러한 작업을 모니터링하여 적시에 해고 될 수 있도록하는 방법은 무엇입니까? 일정 시간 간격 (예 : 매분)마다 모든 작업을 폴링하는 것은 끔찍한 해결책입니다. GAE는 일종의 우선 순위 대기열을 사용합니다. GAE가 ETA를 사용하여 많은 작업을 수행 할 수있는 알고리즘을 구현했다고 확신하는 것이 좋을 것입니다. 명시된 daily quota of 10 billion tasks 하나
많은 작업에서 _eta를 사용하면 잘 작동한다는 것을 알아두면 좋을 것입니다. 다른 작업 대기열이 예상대로 작동하지 않는 것을 발견했습니다. –