Надежно выполняемые фоновые операции

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

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

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

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

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

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

1 ответ

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам