как реализовать пользовательский облачный рабочий - PullRequest
0 голосов
/ 02 декабря 2011

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

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

То, что у меня есть, не совсем вписывается в модели «запускать эту задачу каждые 5 минут» или «добавлять это в очередь для последующего выполнения».Я думаю, что основное отличие от моей проблемы заключается в том, что сами работники находят работу, а не назначаются ей периодическим планировщиком или внешним процессом, который генерирует работу.

То, что у меня есть, - это в основном гигантская таблица, гдекаждая запись имеет три поля:

  1. job: небольшая задача, которую нужно выполнить, скажем, она получает последнее сообщение из учетной записи Twitter и сохраняет его в базе данных
  2. interval для выполнения этой работы: скажем, каждые 5 минут, NB, интервал является произвольным и отличается для каждой записи в таблице
  3. последней date, когда задание было выполнено

Способ, которым я бы это реализовал, - иметь работника с бесконечным циклом.Когда он входит в цикл, он просматривает базу данных a) ищет элементы, у которых date + interval < currentTime, b) когда он их находит, он устанавливает date = currentTime, и c) затем выполняет задание.Если нет работающего банкомата, он спит несколько секунд, а затем пытается снова.

У меня будет много параллельных рабочих, которые будут одновременно обрабатывать базу данных, поэтому сначала я делаю б), а затем в) в параграфе.выше.Поскольку есть параллельные рабочие, действия a) и b) являются атомарными операциями в базе данных, чтобы предотвратить дублирование работы.Если работник выходит из строя после а) и б), но до того, как ему удается закончить работу, это не страшно, и рабочие могут просто сделать это в следующий интервал;Причина этого заключается в том, что работа не выполняется в системе, не зависящей от времени, поэтому сценарий отставания невыполненных заданий не дает никаких преимуществ, поскольку задачи должны выполняться с их точными интервалами, поэтому лучше пропустить 1 интервал, чем иметь неравные интервалы.между которыми выполнялись задачи.

Мой вопрос: является ли это разумной стратегией реализации?Если да, то как мне реализовать этот процесс в облаке (я использую Heroku, но в будущем могу перейти на EC2)?Я до сих пор не написал никакого кода, поэтому буду рад другим предложениям (может быть, я неправильно понял варианты использования / приложения для систем очередей).

1 Ответ

0 голосов
/ 05 декабря 2011

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

Однако эта идея поиска работы звучит глупо.Что произойдет, если два сотрудника найдут одну и ту же задачу, например, в одно и то же время?Кроме того, нет ли в приложении триггеров, которые могут указывать, что работа должна быть выполнена?Кажется странным, что у вас есть код «в поисках работы».

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

...