Решение достаточно простое. Вместо выполнения API запросов у себя на сервере, можно отдать их серверам хостинга приложении, к примеру Heroku. Так как Heroku бесплатно предоставляет один dyno (виртуальный сервер), который может обслуживать только один запрос одновременно, то нам понадобятся множество приложений на Heroku с идентичными скриптами для запросов к различным API.
Предварительно придется создать все приложения. Это можно сделать этой командой (после регистрации на сайте и установки Heroku Toolbelt):
heroku apps:create
В ответ вы получите ссылку на приложение и ссылку на git через который можно добавить необходимые скрипты в приложение:
Created http://distant-universe-42.heroku.com/ | git@heroku.com:distant-universe-42.git
Необходимое количество приложений в Heroku будет напрямую зависеть от числа ожидаемых пользователей. Все названия проектов можно хранить в БД, к примеру в MySQL. Затем при генерации интерфейса приложения для пользователя, в зависимости от текущей нагрузки (или при отсутствии метрики, можно просто случайным образом выбирать сервера для запросов), из таблицы необходимо выбрать случайно или последовательно кол-во серверов равное числу групп API запросов которые необходимо выполнить. Под группами подразумеваются несколько запросов к API необходимых для заполнения данными определенного блока, к примеру верхней части приложения с актуальной картинкой профиля пользователя. Загрузка блоками необходима на случай отказа сервера по какой-либо причине. Тогда, в случае отказа, пользователь увидит большинство экрана заполненного информацией и только одно опоздавшее окно, вместо множества пустых полей в различных блоках:
Пользователю на много приятней увидеть интерфейс приложения сразу после нажатия на ссылку, и уже затем ожидать когда индикаторы загрузки сменятся контентом. Кстати при желании можно настроить скрипт загрузки на отображения модулей одновременно, то есть он дождется полной загрузки всей информации и только потом отобразит её пользователю.
P.S. Этот прием легко использовать и для других API или запросов на обработку данных от пользователя, которые могут занять много времени.
ссылка на оригинал статьи http://habrahabr.ru/post/186604/
Добавить комментарий