Масштабирование cronjobs на несколько server

прямо сейчас у нас есть единственный сервер с вкладкой cronjob, которая отправляет ежедневные электронные письма. Мы хотели бы масштабировать этот сервер. Это стандартное приложение zend framework, развернутое на сервере centos в облаке Amazon.

Мы уже позаботились о балансировке нагрузки, управлении контентом и управлении развертыванием. Тем не менее, cronjob по-прежнему является для нас проблемой, поскольку мы должны гарантировать, что некоторые задачи выполняются только один раз.

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

Я думаю о двух решениях, но мне было интересно, была ли у кого-то такая же проблема.

  1. Сделайте один из серверов «мастер», который рассылает только ежедневные электронные письма. Это будет проблемой, если сервер будет работать неправильно, и, как правило, мы не хотим иметь «специальный» сервер. Это также означает, что нам нужно будет отслеживать, какой сервер является главным.
  2. Создайте очередь запланированных задач для выполнения. Каждый сервер открывает эту очередь и видит, какие задачи необходимо выполнить. Первый сервер, который «схватит» задачу, предварительно сформирует задачу и пометит ее как выполненную. Я смотрел на Amazon Simple Queuing Service как на решение для очереди.

Оба этих решения имеют свои преимущества и недостатки, и мне было интересно, думал ли кто-нибудь о ком-нибудь еще, кто мог бы нам здесь помочь.

5
задан aporat 20 June 2011 в 17:18
поделиться