Практичны ли задания Cron при работе с › 190 000 ежемесячных задач?

Мне нужно настроить систему повторяющихся счетов для моего босса, и наша система построена с помощью php на сервере Centos Linux. У нас есть около 50 000 клиентов, которым мы выставляем счета каждый месяц, моя работа состоит в том, чтобы создать способ обработки сценария счета для всех 50 000 клиентов каждую неделю, поэтому сценарий создаст новый счет и выполнит запрос на вставку в таблицу счетов в нашем mysql. база данных.

Меня беспокоит то, что 50 000 отдельных заданий cron, запускаемых каждую неделю, приведут к слишком большой нагрузке на наш сервер, и с каким ограничением crontab может справиться, прежде чем возникнут проблемы с производительностью?

Также важно отметить, что файл crontab необходимо будет очень часто редактировать с помощью php-скрипта для редактирования и/или удаления отдельных счетов-фактур/cronjobs.

В принципе, это лучший путь?


person user3295551    schedule 11.02.2014    source источник
comment
Я полагаю, что ограничения для crontab в основном касаются аппаратных атрибутов системы, таких как память и вычислительная мощность. Однако не будет ли разумнее создать одно задание cron, которое будет обрабатывать все 50 000 клиентов, а не по одному для каждого клиента?   -  person SyntaxLAMP    schedule 11.02.2014


Ответы (2)


У вас должно быть одно задание Cron, которое запускается один раз и проходит через 50 000 клиентов.

Что я обычно делаю, так это выбираю одно из базы данных, обрабатываю его, помечаю как выполненное, а затем перехожу к следующему. Я делаю так, чтобы мой цикл выпадал после работы более 170 секунд, и устанавливаю задание Cron для запуска каждые 3 минуты в течение всего месяца - оно пройдет через них, как сможет.

person SpoonNZ    schedule 11.02.2014
comment
Это определенно способ сделать это, но вы должны быть осторожны, чтобы запуск каждого пакета не занимал более 3 минут, и завершение через x секунд может быть не тем, что вы хотите сделать, особенно если вы находитесь в середина сделки. Программа под названием Fat Controller будет повторять задачу, но интервал измеряется с конца выполнения - поэтому с интервалом 0 вы можете запустить новый экземпляр сразу после окончания предыдущего. Он даже будет обрабатывать параллельную обработку для вас. - person SlappyTheFish; 20.02.2014
comment
Я должен уточнить. Я не позволю начать новую партию (например, создать новый счет, отправить новое электронное письмо/SMS и т. д.), если время превышает 170 с. Каждая партия для меня занимает всего секунду или две, поэтому время простоя между экземплярами должно составлять ~ 9 секунд. Если они пересекаются, у меня тоже есть встроенная защита. - person SpoonNZ; 25.02.2014

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

person RaviH    schedule 11.02.2014