Масштабирование cronjobs на нескольких серверах - PullRequest
5 голосов
/ 20 июня 2011

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

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 20 июня 2011

Когда вам нужно масштабировать задания cron, вам лучше использовать менеджер заданий, например Gearman

0 голосов
/ 23 октября 2017

У меня была такая же проблема.То, что я сделал, было очень просто.

  1. Я запустил самый дешевый экземпляр EC2 на AWS.
  2. Я создал cronjob (s) только на этом сервере.
  3. Задание cron просто запускает задания, которыетолько делает простой запрос к моей конечной точке / api (то есть api.mydomain.com).
  4. На моем api у меня просто есть маршрут, следящий за этим специальным запросом, который запустит работу, которую я хочу.В общем, все, что я делаю вместо запуска задачи с помощью cronjob, я запускаю задачу через http-запрос.

Надеюсь, это имеет смысл!Теперь не имеет значения, сколько у вас серверов, это будет просто масштабироваться!Кроме того, единственная функция вашего сервера cronjob - запуск простых заданий для отправки запроса, ничего более.

0 голосов
/ 07 марта 2013

Beanstalkd также может быть вариантом для вас.

...