Запланированные задачи с использованием AWS

В настоящее время у меня есть экземпляр Windows на AWS, который запускает запланированную задачу Windows для выполнения сценария .net для обработки дневных заказов.

Недавно я сбалансировал нагрузку на несколько экземпляров с помощью ELB, и все в порядке.

Вопрос в том, как настроить запланированные задачи, чтобы не все экземпляры запускали их. Я изучил OpsWorks, SimpleWorkFlow и т. д. на AWS, но так запутался, на каком из них мне следует сосредоточиться для этой относительно простой задачи.

Спасибо


person Raj    schedule 23.12.2013    source источник
comment
Привет, Радж, я просматривал ваш запрос, и в настоящее время я завязал, у меня будет страница asp.net на amazon, и мне нужно вызывать ее каждый час на amazon для отправки электронных писем, как я могу продолжить что? У меня есть открытый вопрос по этому поводу, вы можете ответить мне там. Спасибо.   -  person Sunil Suri    schedule 03.11.2014


Ответы (2)


Возможно, вы сможете использовать Amazon SWF, но это кажется излишним/сложным.

Существует также Amazon Pipeline. Вероятно, это правильный ответ, но для настройки требуется немного чтения.

Проще всего запланировать свою работу на всех ящиках, и база данных объявит победителя.

A) Вы можете «заблокировать» необработанные заказы в БД, а затем обработать их. Пока вы блокируете одну транзакцию, другие рабочие получат 0 заказов (или несколько новых заказов) для обработки.

Б) Вы можете создать специальную таблицу с одной строкой, которую задание заблокирует. Что-то вроде «обновить work_table set worker = 'mybox', work_start = now(), где worker = ''».

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

Если у вас нет базы данных, вы всегда можете использовать SDB (Simple DB) или DynamoDB. Попадание в БД несколько раз в день определенно подходит для бесплатного уровня.

Все это будет состоять всего из 20-50 строк кода, если вы все сделаете правильно.

person Community    schedule 24.12.2013
comment
Да, я просматривал конвейер данных AWS, но, похоже, он не позволял мне просто выполнить скрипт/URL. Казалось, что это больше связано с операциями с базами данных, резервными копиями и т. д., и, похоже, очень мало онлайн-справок/учебников по этому поводу. Маршрут базы данных, который вы предлагаете, является справедливым вариантом и, вероятно, будет правильным, если я не смогу найти больше помощи на AWS на следующей неделе! - person Raj; 30.12.2013

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

Если вам нужно n экземпляров, у вас может быть родительский рабочий процесс (Singleton, обеспечиваемый идентификатором рабочего процесса), который порождает n дочерних рабочих процессов.

person Pooja Gupta    schedule 30.12.2014