Начинаем довольно большой проект (API, партнерский сайт, клиентский сайт, сайт для разработчиков с документацией по SDK). Так как людские ресурсы сейчас ограничены, а нагрузка предполагается не маленькая, решили использовать в качестве платформы Google App Engine, чтобы не тратить силы и время на поддержку серверов.
Бэкенд будет на PHP, в качестве фреймворка выбрали Laravel (в том числе и потому, что он относительно безболезненно запускается в облаках Google).
Какие могут быть проблемы\подводные камни в использовании этого зоопарка?
Вот тут особенности запуска приложения на PHP: https://developers.google.com/appengine/docs/php/
А вот тут работа с файлами: https://developers.google.com/appengine/docs/php/g...
Если используете вместе с MySQL то это будет обычное PHP приложение которое можно перенести на обычный хостинг после небольших доработок.
А так как для PHP по сравнению с Python сильно ограничен выбор сервисов GAE которые можно использовать в приложении, то проблема с переносом становится еще меньше.
Т.е. по сути делая приложение на PHP вы просто используете автоматическое масштабирование виртуальных серверов и балансировщик нагрузки.
Подводные камни могут попадаться при работе с Datastore (которого в PHP нет) и другими сервисами GAE типа Search.
>Начинаем довольно большой проект
>решили использовать в качестве платформы Google App Engine
Когда гугл решить закрыть свой очередной "никому не нужный сервис чтобы сделать нечто еще более крутое" вам будет очень весело.
Имхо в вопросах ключевых мест своих программ нельзя быть настолько зависимым от кого бы то ни было.
ps. гугл не единственная платформа дающая возможность разрабатывать приложения, но я бы не цеплялся ни за одну из них без веских на то причин.
Если не привязываться в приложении к Datastore, а делать на обычном MySQL то какие могут быть проблемы в переносе PHP приложения на другой хостинг? Там конечно есть некоторые места, которые реализуются не так как на обычном хостинге (работа с локальными файлами например), но в остальном ничего существенного нет. Для всех сервисов (Memcache, Tasks и т.п.) которые есть в GAE есть аналоги на которые можно перейти.
Сергей Скрипов: ну хотя бы работа с лимитами на обработку запроса. например загрузка и обработка файла на GAE:
1) Создаем HTML форму, которая отправляет файл в Blobstore.
2) После загрузки в Blobstore сам GAE дернет обработик в frontend instance.
3) В этом обработчике помещаем задачу для backend instance и ссылку на файл.
4) GAE запускает backend instance и передает ему данные для обработки.
Вы можете сказать что так и нужно работать с большими видеофайлами, к примеру. То есть загрузил файл и отправил на кодирование в нужные форматы.
Но дело в том, что GAE заставляет вас столь серьезно оптимизировать свое приложение в очень и очень многих случаях.
abcyu: Ну во первых вместо Blobstore давно уже лучше использовать Cloud Storage, это вообще независимый сервис, можете в любом приложение на любом хостинге использовать. Да, из-за ограничения времени у приложения может не хватить времени на загрузку большого файла, поэтому нужно использовать сервис гугла для загрузки, и при переезде его без проблем можно заменить.
Во вторых, для обработки видео бэкэнд инстанс Вам скорее всего не поможет, т.к. там можно запускать только приложения написанные на одном из доступных в GAE языках программирования (Python, Java, Go, PHP). На сколько я знаю PHP еще не умеет видео обрабатывать. Так что Вам понадобится свой обычный сервер для обработки видео на котором установлены необходимые приложения и кодеки для обработки видео.
Сергей Скрипов:
Нет. Для закачки файлов нет. Не Cloud Storage. А Blobstorage.
Для последующего хранения после закачки - да.
Но делать полностью контролируемую закачку напрямую на Cloud Storage трудоемкость больше.
Сергей Скрипов: В описанной мною схеме приложение только инициирует закачку и получает управление после окончания закачки. Лимиты времени тут не мешают.
Пример с видео был приведен только для понятности схемы. Я думаю многим понятно как работает загрузка на Youtube. Делать видеохостинг на чистом GAE не круто.
У меня работает такая схема для не видеофайлов. На Go. Уж скоро год.
Было бы интересно увидеть ваш код, реализующий прямую закачку на Cloud Storage
Я и не говорил, что можно напрямую от клиента на GCS закачивать файлы. Собрались переезжать с GAE на свои сервера, сделайте сервис который будет получать файлы от клиентов и закачивать их в GCS и используйте его, причем пользоваться им можно начать прямо из приложения в GAE для этого не обязательно брать и все одновременно перевозить. Тоже самое и по другим сервисам типа Tasks и т.п.
Используя собственные сервисы GAE конечно все проще и быстрее делается, но это не помеха для переезда их все можно заменить.
Главный подводный камень - жутко сильная привязка под уникальные API Google AppEngine.
Второй подводный камень, казалось бы очевидный, но не все просекают - ПО нужно разрабатывать не как привыкли под обычный сервер, а именно с расчетом на "12 факторов".
Третье, следствие из неправильно понятого второго - тупое ПО будет жрать кучу бабла. Нужно всегда подумать, прежде чем лишнее действие заставить программу делать.