тестирование сайтов Guest • Вход

Рандомный крон (random cron)

Сначала переведу словосочетание «рандомный крон» на человеческий язык. Крон — от англ. crontab, название службы запуска задач по расписанию в UNIX-подобных системах. Рандомный — от англ. random, случайный порядок.

Таким образом, «рандомный крон» — это такой забавный каламбур, где одна часть состоит из случайности, а вторая — из постоянства.

Итак, о кроне. Задолго до того, как появились динамические сайты, компьютер под управлением UNIX-подобной операционной системы выполнял скучные и вполне планируемые задания. Обрабатывал почту, журналы обращений к чему-либо (так называемые «логи»), обращался для чего-либо к удаленному компьютеру, выполнял сервисное обслуживание самого себя.

Но вот появилась Всемирная Паутина. А ещё позже появились часто обновляемые динамические сайты, на которых можно сидеть и жать кнопку F5 (в браузере — обновить страницу) для получения ещё более новой информации.

Нельзя сказать, что выполнение задач по расписанию стало ненужным. Но характер выполнения всё тех же задач по обслуживанию существенно изменился. Веб-сервер и операционная система «живут» в так называемом реальном времени. А сайты живут от запроса к запросу. В момент захода пользователя на страничку происходит всё самое интересное — чтение конфигурации, подключение к базе данных, выполнение запроса, получение и обработка данных, подготовка HTML-кода и, наконец, отображение запрошенной странички. И ни одной задачи, требуемой для отображения страницы, отложить невозможно. Нужно всё и сразу.

На часто обновляемых сайтах есть ряд довольно ресурсоёмких задач. К примеру, на форумах — пересчет общего количества сообщений, оставленных пользователем. Для этого нужно выполнить довольно медленный SQL-запрос. Если выполнять его после каждой отправки сообщения, а на некоторых сайтах это происходит каждые 12 секунд, то тут никакого оборудования не хватит.

Как быть? До изобретения человечеством рандомного крона, к рассказу о котором я веду, веб-разработчики пользовались обычным, нерандомным кроном. Скажем, каждые полчаса запускался скрипт, который выбирал по 100 (к примеру) пользователей из базы и обновлял для них статистику.

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

Как быть? Ответ в заголовке — рандомный крон. Ранее я говорил, что сайт живет от запроса к запросу, поэтому и обслуживание необходимо производить исходя из количества запросов. Если на ваш форум заходят 1-2 раза в месяц, нет никакой необходимости выполнять пересчет каждые полчаса. И напротив, если у вас 100500 запросов в секунду, боюсь что за полчаса данные на форуме сильно устареют.

Ключевую роль в рандомном кроне играет не запуск задач по расписанию, а вероятность выполнения задачи в процентном отношении.

Пример на PHP:

  1. /* Выполняем обслуживание с вероятностью 3% */
  2. if ( (mt_rand() % 100) < 3 ){ $this->cron(); }

Обслуживание можно сделать ещё более рандомным, обозначив вероятность выполнения других задач внутри метода cron() или указав вероятность для каждой задачи отдельно.

Тем самым обновление циферок на вашем сайте будет происходить плавно для сервера и что более важно — в зависимости от потребностей ваших посетителей.

Нет посетителей — нет обновлений, много посетителей — частые обновления.

Обновлено: 29 Декабря 2009 г. пользователем Dmitry Sh, Создано: 28 Декабря 2009 г.