0

Мы хотели бы, чтобы наши клиенты могли планировать повторяющиеся задачи ежедневно, еженедельно и ежемесячно. Линейная масштабируемость действительно важна для нас, поэтому мы используем Windows Azure Table Storage вместо SQL Azure. Текущий проект выглядит следующим образом: - Информация о расписании хранится в таблице хранения таблиц. Например: Задача A, ежедневно; Задача B, еженедельно; ... - Есть рабочие процессы, которые выполняются ежечасно и запрашивают эту таблицу. Затем решите, что они должны выполнять задание или нет.Планировщик асинхронных повторяющихся задач в Windows Azure

Но что, если несколько рабочих ролей начинают запускать одну и ту же задачу?

Некоторые другие требования: - Рабочие процессы могут находиться в разных часовых поясах.

Windows Azure Queue Storage может решить все проблемы cuncurrency, упомянутые выше, но также вводит некоторые новые проблемы: - Сколько элементов очереди мы должны генерировать? - Что делать, если клиент изменяет скорость повторения или отменяет планирование?

Итак, мой вопрос: как создать повторяющийся планировщик задач с несколькими асинхронными рабочими, используя Windows Azure Storage?

ответ

0

Я бы продолжил использовать хранилище таблиц Azure, но отметьте процесс как «в процессе», прежде чем рабочий начнет работать над ним. Поскольку ATS поддерживает параллелизм, который контролируется Etags, вы можете быть уверены, что два процесса не смогут запустить один и тот же процесс.

Я бы, однако, подумал о логике повтора, когда рабочие места неожиданно неожиданно завершили работу и перезапустили процесс работа, по-видимому, пошли сирота

1

Некоторые мысли:

Но что, если несколько ролей работника начинают выполнить ту же задачу?

Это может случиться. Чтобы этого избежать, вы можете иметь экземпляр рабочей роли (любой экземпляр рабочей роли из пула), считываемый из таблицы, и push-сообщения в очереди. Пока этот экземпляр выполняет эту работу, все остальные экземпляры ждут. Чтобы решить, какой экземпляр это работает, вы можете использовать функциональность аренды blob.

Некоторые другие требования: - Рабочие процессы могут быть в разных часовых поясах .

Не уверен в этом. Предполагая, что вы говорите о Cloud Services Worker Roles, они могут находиться в разных центрах обработки данных, но все они будут находиться в часовом поясе UTC.

Сколько элементов очереди мы должны генерировать?

Это действительно зависит от того, сколько работы должно быть выполнено. Вы можете поместить все сообщения в очередь. За один раз клиенту может быть выгружено не более 32 сообщений из очереди. Поэтому, если вы скажете 100 задач и, следовательно, 100 сообщений, каждый экземпляр может считывать до 32 сообщений из очереди в одном вызове для очереди.

Что делать, если клиент изменяет скорость повторения или отменяет планирование ?

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

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