2013-11-03 3 views
2

Я использую очереди очередей Google App Engine для планирования будущих задач, которые я хотел бы выполнить в течение второй точности их запланированного времени.Задачи App Engine с ETA увольняются гораздо позже, чем запланировано

Как правило, я планирую задачу 30 секунд с этого момента, что вызовет изменение состояния в моей системе и, наконец, запланирует другую будущую задачу.

Все работает нормально на моем локальном сервере разработки.

Однако, теперь, когда я развернулся на серверах GAE, я заметил, что запланированные задачи задерживаются. Я видел, как они бежали даже через две минуты после того, как они были запланированы.

Из очереди задач консоли администратора, он на самом деле говорит на ETA:

ETA: "2013/11/02 22:25:14 0:01:38 ago" 
Creation Time: "2013/11/02 22:24:44 0:02:08 ago" 

Почему это?

Не удалось найти документацию о ожидании и точности задач, запланированных ETA.

Я программирование в Python, но я сомневаюсь, что это делает никакой разницы \

В коде питона, параметр ета документирован следующим образом:.

eta: A datetime.datetime specifying the absolute time at which the task 
     should be executed. Must not be specified if 'countdown' is specified. 
     This may be timezone-aware or timezone-naive. If None, defaults to now. 

Мои очереди Настройки:

queue:  
- name: mgmt 
    rate: 30/s 

Система не загружается, что так всегда, за исключением 5 задач, которые должны запускаться каждые 30 секунд или около того.

UPDATE:

Я нашел https://code.google.com/p/googleappengine/issues/detail?id=4901 который является запрос принят функции для своевременных очередей, хотя ничто не кажется, что было сделано об этом. Он согласен с тем, что задачи с ETA могут задерживаться даже на многие минуты.

Какие другие альтернативные механизмы я мог бы использовать для планирования триггера со второй точностью?

+0

Насколько я понимаю, ETA является проводником и на него нельзя положиться. –

+0

Документы говорят, что 'A datetime.datetime объект, который обеспечивает самое раннее время выполнения этой задачи. ', И я всегда читаю это как не раньше, чем ETA, но может быть немного позже. –

+0

Я понимаю политику« не раньше ». Однако я бы подумал, что запрос будет вызван в течение нескольких секунд в худшем случае, а затем владельцу приложения будет обслуживать его. Интересно, есть ли какая-либо гарантия того, что запрос задачи будет запущен за определенное количество времени. – Patrick

ответ

1

я сообщил вопрос к команде GAE, и я получил следующий ответ:

This appears to be an isolation issue. Short version: a high-traffic user is sharing underlying resources and crowding you out. 

Not a very satisfying response, I know. I've corrected this instance, but these things tend to revert over time. 

We have a project in the pipeline that will correct the underlying issue. Deployment is expected in January or February of 2014. 

Посмотреть https://code.google.com/p/googleappengine/issues/detail?id=10228

Смотрите также резьба: https://code.google.com/p/googleappengine/issues/detail?id=4901

После того, как "исправлен этот экземпляр «Я провел несколько испытаний в течение нескольких часов. Ситуация немного улучшилась для задач без ETA. Но для задач с ETA я все еще вижу, что по крайней мере половина из них работает как минимум на 10 секунд позже. Это далеко не надежна для моих требований

Сейчас я решил использовать свою собственную службу планирования на другой хосте, пока команда GAE «не исправить основной вопрос» и имеет более предсказуемую систему планирования задач.

1

GAE не гарантирует гарантии синхронизации часов внутри и через свои центры обработки данных; см. UTC Time on Google App engine? для соответствующего обсуждения. Таким образом, вы не можете точно указать абсолютное время точно, даже если они сделали (другую) гарантию того, что задачи выполняются в пределах некоторого допуска целевого времени.

Если вам действительно нужна такая точность, вы можете подумать о создании постоянного экземпляра «бэкэнд» GAE, который синхронизируется с надежными внешними часами и предоставляет службы очередей и выполнения задач.

(Помимо этого, к сожалению, этот подход представляет собой единую точку отказа, поэтому, чтобы исправить это, вы можете просто сделать следующие шаги и построить целый кластер этих бэкэндов ... Но в этот момент вы также можете посмотреть в другом месте чем GAE, так как вы отодвигаетесь от модели автоматической трансмиссии GAE к модели «ручной передачи» AWS.)

+0

Спасибо Дэвиду. Мне не нужно было бы синхронизировать с внешними часами, так как я могу переносить второй или две при максимальном изменении. Идея «бэкэнд» была бы вариантом. Единственная точка отказа не была бы самой большой проблемой, так как я мог бы контролировать cron, что все еще началось. Проблема со специальным бэкэнд заключается в том, что он немного перегружен с точки зрения стоимости и сложности. В настоящее время я рассматриваю возможность иметь цепочку запросов, которые достаточно спят (не более ~ 20 с) и просыпаются, когда я готов выполнить свою логику. в конце он будет немедленно перепрограммировать себя. – Patrick

+0

Я видел сообщение от пары лет назад, когда член команды GAE/Python заявил, что они используют NTP для всех компьютеров GAE. Это не официальная гарантия, но имеет смысл, что они это сделают, и можно вывести из нее некоторую синхронизацию времени. – Tom

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