Ищу рекомендацию, как надежно запускать фоновые операции. У меня есть много серверов, отправляющих сообщения об операциях в AWS SQS, и у меня есть другой сервер, который будет выполнять эти операции с интенсивным использованием ЦП в режиме ожидания.
Мне нужен какой-то механизм опроса, чтобы время от времени проверять SQS на наличие новых операций. Cron - лучший способ сделать это? Я думал поместить PHP-скрипт в cron и опрашивать каждые 5 минут - это надежно?
Мне нужно убедиться, что за раз обрабатывается одна операция (сообщение от SQS). Некоторая обработка может занять более 5 минут - как я могу уведомить cron, чтобы он не опрашивал, если операции ожидают завершения?
Как я могу выполнять операции только при простое ЦП? Предоставляет ли PHP доступ к данным ЦП?
Прежде всего, мне нужна высокая надежность. Если обработка одной операции не удалась, это не должно повлиять на будущие операции.
Может ли кто-нибудь указать мне правильное направление?
Мне нужен какой-то механизм опроса, чтобы время от времени проверять SQS на наличие новых операций. Cron - лучший способ сделать это? Я думал поместить PHP-скрипт в cron и опрашивать каждые 5 минут - это надежно?
Это должно быть довольно надежно, если вам не нужно что-то более мелкое.
Мне нужно убедиться, что за раз обрабатывается одна операция (сообщение от SQS). Некоторая обработка может занять более 5 минут - как я могу уведомить cron, чтобы он не опрашивал, если операции ожидают выполнения?
Заставьте вашу программу в cron проверить наличие какого-либо файла штампа. Если он существует, то запущенная программа cron просто завершает работу, не выполняя дополнительных действий.
Как я могу выполнять операции только при простое ЦП? Предоставляет ли PHP доступ к данным ЦП?
Если вы запускаете интенсивные операции с ЦП через класс планирования IDLE, используя chrt --idle command args
Обратите внимание, это будет только пройти через очередь обработки, когда у процессора нет другой работы, вы можете обнаружить, что такое поведение приводит к тому, что процесс становится слишком медленным! Результатом этого является то, что ваша нагрузка всегда будет чуть меньше 1 (поскольку процесс будет оставаться в очереди выполнения в течение длительного времени без планирования).
Наконец, вы можете использовать batch
команда для планирования задач для выполнения, когда нагрузка ниже определенного значения - откровенно говоря, это не очень динамично и не будет сдерживаться после запуска.