2010-11-11 2 views
3

Почему задачи Google App Engine могут выполняться более одного раза? Согласно do Brett Slatkin talk from Google I/O 2009, задача может выполняться дважды, даже без сбоев сервера!Почему задачи Google App Engine могут ошибочно выполняться несколько раз?

Это как-то связано с поддельным пробуждением потоков?

ответ

2

Брант Слаткин дал similar talk at I/0 2010.

Я не знаю, что он когда-либо рассказывал о том, как и когда это может произойти. Его точка зрения заключалась в том, что из-за того, как работают задачи «Очереди задач», это может быть спроектировано для повторного вызова задач. Из-за этого вам нужно написать свои задачи, чтобы это не вызывало проблем, если это произойдет.

Например, предположим, что у вас есть задача, которая отправляет электронное письмо, а затем увеличивает счетчик в хранилище данных. Если в вашем коде была ошибка, или если Datastore не работает, возможно, что письмо будет отправлено успешно, но для записи в хранилище данных не удастся. Если вы не справились с отказом из хранилища данных в своем коде, обратившись к исключению, невозможность записи в хранилище данных приведет к тому, что ваша задача вернет код состояния HTTP из 500. Очередь задач предназначена для повторного вызова задачи, если она возвращает код состояния > 299. Это приведет к тому, что ваша задача будет выполняться снова и снова, пока запись в хранилище данных не будет успешной. Это означает, что кто-то получит много дубликатов писем.

Я думаю, что строка о «Возможная задача для ложного запуска дважды ...» была всего лишь способом сказать, что App Engine не гарантирует защиту от этого, поэтому вам нужно убедиться, что вы позаботитесь об этом в своем код.

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