Почему задачи Google App Engine могут ложно выполняться более одного раза?

Почему задачи Google App Engine могут выполняться более одного раза? Согласно выступлению Бретта Слаткина из Google I/O 2009, это возможно. чтобы задача ложно запускалась дважды даже без сбоев сервера!

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


person fjsj    schedule 11.11.2010    source источник


Ответы (1)


Брант Слаткин выступил с аналогичный доклад на I/0 2010.

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

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

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

person CVAUGHN    schedule 11.11.2010