Почему мои базовые приложения Heroku загружаются за две секунды?


103

Я создал два очень простых приложения Heroku для тестирования службы, но при первом посещении страницы часто требуется несколько секунд, чтобы загрузить страницу:

Все, что я сделал, это создал простое приложение Sinatra и развернуло его. Я не делал ничего, чтобы возиться с серверами Heroku или тестировать их. Что я могу сделать, чтобы уменьшить время отклика? Сейчас это очень медленно, и я не знаю, с чего начать. Код проектов находится на github, если это поможет.

Ответы:


179
  • Если ваше приложение какое-то время не используется, оно выгружается (из памяти сервера).
  • При первом попадании он загружается и остается загруженным до тех пор, пока никто не получит к нему доступ.

Это сделано для экономии ресурсов сервера. Если никто не использует ваше приложение, зачем загружать ресурсы и не позволять тем, кто действительно в них нуждается?
Если у вашего приложения много постоянного трафика, оно никогда не будет выгружено.

Об этом есть официальная запись .


52
Самый простой способ исправить это - увеличить дино до 2.
Глава

5
@diegopau Я нашел хорошее приложение ( wekkars.com ), которое делает именно то, что вам нужно. На данный момент он, кажется, находится в стадии бета-тестирования, но здесь он отлично работает.
SteenhouwerD

70
Пинговать ваш сервер, чтобы он не простаивал, - это гадость в вашем собственном гнезде. Эти услуги, о которых вы говорите, бесплатны . Им нужно беречь ресурсы. Если все пингуют свой сервер, ни один из них не отключается, и поставщик должен расширяться. Это стоит денег .... Прощай, бесплатное обслуживание. Я думаю, что плакат с этим ответом должен удалить предложение проверить связь с сервером.
GreenAsJade

34
Я использую uptimerobot.com, чтобы пинговать свое приложение Heroku каждые 5 минут бесплатно - он сообщает мне, что у меня есть 200OK (и, что более важно, когда у меня его нет), и поддерживает отзывчивость приложения. Я не извиняюсь за это; У меня есть 10 приложений heroku, большинство из которых являются приложениями для разработчиков или демо, но это, в частности, живое / производственное, и, несмотря на низкий трафик, оно должно быстро реагировать на запросы. Если бы это было угрозой для бизнес-модели Heroku, они бы остановили нас. Когда у меня появятся тысячи пользователей по всему миру, я разверну еще один стенд и начну платить за отличный сервис. Так что бросьте это чувство вины! :)
ED-209

4
Я с Токном. Как новые приложения должны привлекать пользователей, если сайт загружается так медленно, что они уходят еще до его запуска?
Дебора

15

Вы также можете изучить варианты кеширования, которые у вас есть на Heroku w / Varnish и Memcached. Они сохраняются независимо от динамометрических стендов.

Например, если у вас неизменная домашняя страница, вы можете кэшировать ее на длительное время в Varnish, добавив заголовки Cache-Control в ответ. Тогда ваши пользователи не столкнутся с нагрузкой, пока они не захотят «что-то сделать», а не когда они придут.


4

Вы должны проверить ответ Тома Робинсона на тему «Масштабируемость: как работает Heroku?» на Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku распределяет ресурсы сервера между множеством разных клиентов / приложений. Вашему приложению выделены блоки вычислительной мощности. Разделы Heroku на основе потребности в ресурсах. Когда у вас есть популярное приложение, требующее большей мощности, вы можете заплатить за большее количество «дино» (контейнеров приложений), а затем получить взамен больший кусок пирога.

В вашем случае, однако, вы запускаете бесплатное приложение, которое мало кто - если кто-то не из вас - посещает / использует. Таким образом, Heroku сокращает ресурсы, которые вы получаете, выгружая приложение - по сути, переводя его в спящий режим - до тех пор, пока на ваш адрес не поступит запрос. Когда это происходит, и ваше приложение долгое время простаивает, потребуется время для перезагрузки.

Добавьте 1 дополнительный дино, чтобы ваше приложение не засыпало, если время перезагрузки важно.


3

У меня та же проблема. Вчера вечером я развернул приложение Rails 3 (1.9.2), и оно работает медленно. Я знаю, что 1.9.2 / Rails 3 находится в бета-версии на Heroku, но в заявке поддержки говорилось, что все будет в порядке, используя некоторые инструкции, которые они мне прислали.

Я понимаю, что первый запрос после долгого времени занимает больше всего времени. Имеет смысл. Но простая загрузка страниц, которые даже не подключаются к БД, занимающая 10 секунд, иногда довольно плохо.

В любом случае, вы можете попробовать то, что я собираюсь делать. Это профилируйте мое приложение и посмотрите, сколько времени это займет локально. Если это занимает 400 мс, значит, что-то не так. Но если я получаю 50 мс локально, а на Heroku все равно требуется 10 секунд, то что-то определенно не так.

Очевидно, что кеширование помогает, но вы получаете только 5 МБ бесплатно, и, опять же, с ОДНИМ человеком, использующим сайт, это не должно быть так медленно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.