Доброго локалтайма!
Друзья, есть такая ситуация:
1) некий API с ограничением на 3 запроса в сукунду
2) большая очередь запросов к API
Отсюда получается, что скрипт может без лишних проблем выполнить и более трёх запросов за секунду...
На сервере стоит CentOS, сервис написан на PHP без фреймворков.
Гуглил в сторону CRON... Там можно вызывать скрипт максимум раз в минуту... Так у меня очередь задач быстро выстроится на месяца. Как вариант, можно сделать так:
<?
$i=0; $max=45;
while ($i<$max){
//Начало запроса к АПИ
//Конец запроса к АПИ
$i++;
sleep(1);
}
?>
И дёргать этот скрипт каждую минуту кроном. Скрипт выполнит 45 запросов за минуту, таким образом останется время на всякий случай и будет даже запас по кол-ву запросов в секунду. Метод масштабируется, можно в цикл засунуть два запроса к апи и общее количество выполнений будет уже 90 за минуту.
Скрипту придётся делать запросы к БД. Общую схему вижу так:
1) запрос всех строк из БД, лимит 45
2) запуск цикла
3) запрос к АПИ
4) запрос к БД с обновлением информации ("задание №х выполнено" или "задание №х завершено с ошибкой такой-то")
5) $i++
6) конец цикла, все счастливы
В перспективе планируется интеграция и других АПИ в сервис, то есть совсем скоро таких скриптов-работников будет 4-5.
Вопросов несколько:
1) насколько такое решение выглядит красиво?
2) есть ли решения лучше?
3) будут моменты, когда очередь задач будет пустая, но cron всё равно будет дёргать скрипты, это страшно? (4 скрипта, 4 запроса к БД в минуту...)
4) сильно ли данное решение будет нагружать сервер? (например, 5$ дроплет на DigitalOcean?)
Заранее всем большое спасибо за ответы!