cron работа в определенное время суток - какой предел? - PullRequest
3 голосов
/ 10 мая 2011

Я получил небольшой совет по использованию заданий Cron с PHP.Мой сценарий таков:

У меня есть сайт с большим количеством участников.У пользователей есть один или несколько URL-адресов, связанных с их учетной записью.В полночь (или в определенное время) я бы хотел вызвать скрипт, который будет запрашивать сайты каждого пользователя и обновлять базу данных найденной информацией.Думайте об этом как об услуге скребка экрана.

Мой вопрос касается нагрузки на сервер.Я буду тестировать эту новую функцию на общем сервере, но в конечном итоге я перейду на выделенный сервер.

Таким образом, если членство в c.5000 имеет 2 URL-адреса каждый - это 10000 веб-сайтов, которые он будет запрашивать.Что люди считают лучшим способом сделать это?Иметь задание cron, которое запускает первые 500 участников, а затем 10 минут спустя запускать следующие 500 и т. Д. И т. Д.

или есть какая-то магия, о которой я не слышал, которая может помочь !?

Спасибо за любые советы!

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

cron - отличный инструмент для базовых понятий, подобных этому.Однако, как вы уже догадались, он плохо масштабируется!Посмотрите на инструменты обработки заданий, такие как Gearman с открытым исходным кодом (и на нескольких языках):

http://gearman.org/

Это должна быть более надежная система для выполнения поставленной задачи.

0 голосов
/ 10 мая 2011

Как уже говорилось, вы можете запускать скрипт URL-адреса все сразу.Это самый простой подход.

Если этого недостаточно, вы можете легко изменить свой скрипт cron, чтобы он мог запускать его на нечетных / четных числах.Запустите сценарий дважды, начиная с полуночи, один раз для шансов, один раз для четных и до тех пор, пока вы не исчерпаете ресурсы на машине, он должен работать в два раза быстрее.наличие сценария, принимающего два целочисленных значения, которые позволяют вам определить модуль и остаток.Например, для нечетного четного вы определяете «2 0» и «2 1», что приведет к выполнению чего-то вроде SELECT * FROM myTable WHERE id % 2 == 0 и SELECT * FROM myTable WHERE id % 2 == 1 для базы данных SQL.Используя этот подход, было бы очень легко настроить любое количество заданий для параллельного запуска.

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

0 голосов
/ 10 мая 2011

Я бы планировал сценарий ежедневно, позволяя сценарию запрашивать 10000 сайтов только один за другим.Всего один скрипт, который перебирает все сайты и отправляет запрос и обрабатывает результаты один за другим.Для таких чисел нет необходимости делать что-то более сложное, imho.

...