2016-11-10 2 views
0

В моем приложении мне нужно отправлять электронные письма большому числу пользователей, когда происходит событие. Я бы хотел отправить эти электронные письма постепенно, а не сразу. Для ясности объяснения, скажем, мне нужно отправить электронные письма 10 000 пользователям.Целевые очереди GAE с 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 задач в очереди задач, каждая с другой ETA, будет ли очередь задач GAE эффективно контролировать все задачи и запускать их примерно (точное значение ETA не важно) в соответствующие моменты времени ? Я не знаю, какой алгоритм Google использует для этого.

EDIT:

Представьте себе, если вы вставили миллиард задач в один день каждый с ETA. Как GAE будет контролировать эти задачи, чтобы убедиться, что их уволили в нужное время? Опрос всех заданий за определенный промежуток времени (например, каждую минуту) был бы ужасным решением. Возможно, GAE использует некоторую очередь приоритетов. Было бы неплохо иметь некоторую уверенность в том, что GAE внедрил алгоритм, который будет масштабироваться для множества задач с помощью ETA.

ответ

1

С заявленной daily quota of 10 billion tasks Казалось бы, они должны быть в состоянии справиться с 10.000 из них :)

В моем текущем проекте я также отправка ~ 10000 писем (SendGrid) с задачами & _eta (хотя в партиях 25), который работает до сих пор ...

+0

Приятно знать, что он хорошо работает с использованием _eta для множества задач. Я обнаружил, что другие очереди задач не работают должным образом. –

1

В текущей инфраструктуре логика может быть немного запутанной, когда пропускная способность значительно ниже настроенной скорости. Очереди готовят задачи 5 с заранее, но обработка может замедляться, если в заданном окне 5s нет задач.

Он должен работать в целом, но вы можете увидеть шаблон задержек до 20 с последующими очередями.

При общей пропускной способности 1B задач/дня вы, вероятно, захотите разбить, чтобы работать в 40 очередях со скоростью около 300 задач/сек/очереди. Если скорость будет устойчивой, задержки будут необычными.

Смежные вопросы