Как выполнить метод один раз (несколько процессов / экземпляров) в минуту с помощью AWS

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

Несмотря на то, что он работает в нескольких экземплярах, я хочу, чтобы сообщения SQS отправлялись только один раз в минуту. Итак, если машина A отправляет сообщения, я не хочу, чтобы машина B отправляла их, и наоборот.

Я хочу избежать настройки главного / подчиненного устройства.

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

Я также подумал о том, чтобы процесс, который отправляет сообщения, помещал метку времени в simpleDB или, возможно, в другую базу данных, и чтобы процессы проверяли метку времени через определенный интервал. Первый, который проверяет его и обнаруживает, что он старше минуты, обновит метку времени и отправит сообщения.

Я исследовал SWF и обнаружил, что он может запускать рабочие процессы / действия по таймеру, но SWF кажется излишним для этого, и я бы предпочел избегать его настройки и запуска с доступом к моей БД.

Есть ли у кого-нибудь изящное решение подобных проблем?


person HypeXR    schedule 27.02.2015    source источник


Ответы (1)


Мы использовали нашу базу данных mysql, чтобы сделать это аналогично тому, что вы предложили. Но мы не пытаемся прочитать отметку времени (состояние гонки?). Таблица имеет уникальный индекс по метке времени. Процессы в каждом экземпляре пытаются вставить метку времени, в которой они выполняются, например, «2015-02-27 12:47:00». Если mysql возвращает ошибку с повторяющимся ключом, то сначала появляется другой экземпляр, и они ничего не делают. Если вставка прошла успешно, они отправляют сообщение SQS.

Вы также можете попробовать Google для распределенных систем cron.

person at0mzk    schedule 27.02.2015