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