В настоящее время у меня есть 2 пользователя моего PHP-приложения, развернутого в стандартном окружении Google App Engine (GAE). Моя цель - иметь до 100 пользователей в течение года.
Все пользователи выполняют один и тот же код приложения, но имеют свою собственную копию базы данных.
Каждому пользователю необходимо синхронизировать данные с 3-мя сторонними API каждую минуту. Один из этих API-интерфейсов имеет тенденцию очень медленно обрабатывать запрос и отвечать. Один из API-интерфейсов имеет несколько жестких ограничений, с помощью которых он блокирует доступ на определенный период, если за 60-секундный период выполняется более одного вызова API.
В настоящее время у меня каждую минуту выполняется cronjob, который захватывает ключи API из пользовательской базы данных, выполняет три вызова API, а затем повторяет процесс во второй пользовательской базе данных. Это работает нормально, но явно не масштабируется.
Используя ресурсы Google App Engine, я разработал следующий план, чтобы улучшить масштабируемость моего приложения и справиться с более чем 100 пользователями:
- Cronjob выполняет скрипт PHP каждую минуту.
- Скрипт PHP получает список БД на сервере.
- Сценарий PHP выполняет итерацию по списку БД, создавая 3 x push-задачи GAE для каждой БД (т. Е. По одной на API для каждого пользователя).
- Каждая задача push вызывает конечную точку приложения, которая обрабатывает процесс синхронизации для определенного API.
Я еще не начал писать эту процедуру, но, похоже, она работает в принципе. Я предвижу следующие потенциальные проблемы:
Cronjob достигает предела выполнения в 1 минуту до того, как PHP-скрипт завершит создание всех задач push. Я предполагаю, что это маловероятно, так как я могу объединить 100 задач в один вызов addTasks (), поэтому выполнение скрипта должно длиться 10 секунд для 100 пользователей.
Очередь задач выполняет резервное копирование из-за медленного времени выполнения, что означает, что вызовы API выполняются реже, чем каждую минуту. Это могло вызвать некоторые неуправляемые проблемы с синхронизацией данных.
Выполнение задачи для пользователя задерживается, но поскольку cronjob создает новые задачи каждую минуту, это может привести к тому, что несколько задач для одного и того же пользователя и того же API будут выполняться менее чем за 60 секунд, блокируя доступ к одному из API.
Есть ли у кого-нибудь мысли по этому поводу, опыт работы с очередями задач такого рода или какие-либо советы по push-очередям GAE, которые могли бы мне помочь, пожалуйста?