Назад | Перейти на главную страницу

Надежно работающие фоновые операции

Ищу рекомендацию, как надежно запускать фоновые операции. У меня есть много серверов, отправляющих сообщения об операциях в AWS SQS, и у меня есть другой сервер, который будет выполнять эти операции с интенсивным использованием ЦП в режиме ожидания.

  1. Мне нужен какой-то механизм опроса, чтобы время от времени проверять SQS на наличие новых операций. Cron - лучший способ сделать это? Я думал поместить PHP-скрипт в cron и опрашивать каждые 5 минут - это надежно?

  2. Мне нужно убедиться, что за раз обрабатывается одна операция (сообщение от SQS). Некоторая обработка может занять более 5 минут - как я могу уведомить cron, чтобы он не опрашивал, если операции ожидают завершения?

  3. Как я могу выполнять операции только при простое ЦП? Предоставляет ли PHP доступ к данным ЦП?

Прежде всего, мне нужна высокая надежность. Если обработка одной операции не удалась, это не должно повлиять на будущие операции.

Может ли кто-нибудь указать мне правильное направление?

Мне нужен какой-то механизм опроса, чтобы время от времени проверять SQS на наличие новых операций. Cron - лучший способ сделать это? Я думал поместить PHP-скрипт в cron и опрашивать каждые 5 минут - это надежно?

Это должно быть довольно надежно, если вам не нужно что-то более мелкое.

Мне нужно убедиться, что за раз обрабатывается одна операция (сообщение от SQS). Некоторая обработка может занять более 5 минут - как я могу уведомить cron, чтобы он не опрашивал, если операции ожидают выполнения?

Заставьте вашу программу в cron проверить наличие какого-либо файла штампа. Если он существует, то запущенная программа cron просто завершает работу, не выполняя дополнительных действий.

Как я могу выполнять операции только при простое ЦП? Предоставляет ли PHP доступ к данным ЦП?

Если вы запускаете интенсивные операции с ЦП через класс планирования IDLE, используя chrt --idle command args

Обратите внимание, это будет только пройти через очередь обработки, когда у процессора нет другой работы, вы можете обнаружить, что такое поведение приводит к тому, что процесс становится слишком медленным! Результатом этого является то, что ваша нагрузка всегда будет чуть меньше 1 (поскольку процесс будет оставаться в очереди выполнения в течение длительного времени без планирования).

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