В настоящее время у меня есть 2 пользователя моего приложения PHP, развернутого в стандартном окружении Google App Engine (GAE). Моя цель — иметь до 100 пользователей в течение года.
Все пользователи выполняют один и тот же код приложения, но имеют свою собственную копию базы данных.
Каждый пользователь должен каждую минуту синхронизировать данные с 3-мя сторонними API. Один из этих API имеет тенденцию очень медленно обрабатывать запрос и отвечать. У одного из API есть несколько жестких дросселей, с помощью которых он будет блокировать доступ на период, если за 60 секунд будет сделано более одного вызова API.
В настоящее время у меня выполняется cronjob каждую минуту, который получает ключи API из пользовательской базы данных, выполняет три вызова API, а затем повторяет процесс для второй пользовательской базы данных. Это прекрасно работает, но явно не будет масштабироваться.
Используя ресурсы Google App Engine, я разработал следующий план для улучшения масштабируемости моего приложения и работы с более чем 100 пользователями:
Я еще не начал писать вышеупомянутую процедуру, но, похоже, она работает в принципе. Потенциальные проблемы, которые я предвижу:
Cronjob достигает 1-минутного предела выполнения, прежде чем PHP-скрипт завершит создание всех push-задач. Я предполагаю, что это маловероятно, поскольку я могу объединить 100 задач в один вызов addTasks (), поэтому выполнение сценария должно быть < 10 секунд на 100 пользователей.
Резервное копирование очереди задач из-за медленного времени выполнения, то есть вызовы API выполняются реже, чем каждую минуту. Это может вызвать некоторые неуправляемые проблемы с синхронизацией данных.
Выполнение задачи для пользователя задерживается, но поскольку cronjob создает новые задачи каждую минуту, это может привести к тому, что несколько задач для одного и того же пользователя и одного и того же API-интерфейса будут выполнены менее чем за 60 секунд, блокируя доступ к одному из API-интерфейсов.
У кого-нибудь есть какие-либо мысли по поводу вышеизложенного, опыт работы с очередями задач такого рода или какие-либо советы по очереди push-сообщений GAE, которые могут мне помочь, пожалуйста?
Прежде всего, я хотел бы отметить, что API REST Task Queue недоступен с 20 февраля 2018 года, поэтому для работы с очередями задач можно использовать новую альфа-версию API, которая называется API облачных задач.
Позвольте мне дать некоторые комментарии к трем пунктам, которые вы подчеркнули в своем вопросе:
Я думаю, что это охватывает основы об очередях задач. Любой другой «Глубже» вопрос может быть слишком конкретным для вашего варианта использования, и с этим трудно помочь (такому сообществу также нравятся конкретные вопросы).
В качестве последнего предложения, убедитесь, что подать заявку на внесение в белый список для нового API облачных задач для того, чтобы иметь доступ к новой документации.
Других решений пока нет …