Чому для завантаження моїх основних програм Heroku потрібні дві секунди?


100

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

Все, що я зробив, - створити простий додаток Sinatra і розгорнути його. Я нічого не робив, щоб зіпсуватись або перевірити сервери Heroku. Що я можу зробити, щоб покращити час відповіді? Зараз це дуже повільно, і я не знаю, з чого почати. Код проектів знаходиться на github, якщо це допомагає.

Відповіді:


176
  • Якщо ваша програма деякий час не використовується, вона завантажується (з пам'яті сервера).
  • Під час першого потрапляння він завантажується і залишається завантаженим, поки не пройде якийсь час, не маючи до нього жодного доступу.

Це робиться для економії ресурсів сервера. Якщо ніхто не використовує вашу програму, чому б зайняти ресурси, а не дозволити комусь, хто справді потребує їх, використовувати?
Якщо у вашому додатку багато постійного трафіку, він ніколи не буде завантажений.

Про це є офіційна примітка .


51
Найпростіший спосіб виправити це - збільшити свій динос до 2.
Розділ

5
@diegopau Я знайшов хороший додаток ( wekkars.com ), який робить саме те, що вам потрібно. На даний момент, здається, він знаходиться в бета-версії, але тут він ідеально працює.
SteenhouwerD

68
Пінгнг вашого сервера, щоб уберегти його від холостого ходу, тріщить у власному гнізді. Ці послуги, про які ви говорите, безкоштовні . Їм потрібно заощадити ресурси. Якщо кожен пінгує свій сервер, жоден не заміняється, і провайдер повинен масштабувати. Це коштує грошей .... до побачення безкоштовне обслуговування. Я думаю, що плакат цієї відповіді повинен видалити пропозицію про те, щоб пінг-сервер.
GreenAsJade

32
Я використовую uptimerobot.com, щоб безкоштовно перевіряти додаток Heroku кожні 5 хвилин - це говорить про те, що у мене є 200 ОК (і що ще важливіше, коли я цього не роблю), і це допомагає додатку реагувати. Я не вибачаюся за це; У мене є 10 додатків heroku, більшість з яких - програми для розробників чи демонстрації, але, зокрема, це живе / виробництво, і незважаючи на низький трафік, йому потрібно швидко відповісти на запит. Якби це було загрозою для бізнес-моделі Хероку, то вони перестали б нам це робити. Коли у мене з’являться тисячі глобальних користувачів, я накручую ще одну динозалію і почну платити за чудову послугу. Тож киньте з справою про вину! :)
ED-209

3
Я з Токном. Яким чином нові програми повинні залучати користувачів, якщо сайт завантажується так повільно, що вони виходять, перш ніж він працює?
Дебора

14

Ви також можете вивчити параметри кешування, які є у Heroku w / Varnish і Memcached. Вони зберігаються незалежно від диносу.

Наприклад, якщо у вас є незмінна домашня сторінка, ви можете кешувати це протягом тривалого періоду в Varnish, додавши до відповіді заголовки Cache-Control. Тоді ваші користувачі не відчуватимуть навантаження, поки не захочуть "зробити щось", а не коли приїдуть.


4

Ви повинні перевірити відповідь Тома Робінсона на "Масштабованість: як працює Героку?" на Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku розділяє серверні ресурси на безліч різних клієнтів / додатків. У вашому додатку виділені блоки обчислювальної потужності. Розділи Heroku на основі попиту на ресурси. Коли у вас є популярна програма, яка вимагає більшої енергії, ви можете заплатити за більше 'dynos' (контейнери для додатків), а потім отримати більший шматок пирога натомість.

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

Додайте 1 додатковий дино, щоб ваш додаток не засинав, якщо важливий цей час для перезавантаження.


3

У мене така ж проблема. Я розгорнув програму Rails 3 (1.9.2) минулої ночі, і це повільно. Я знаю, що 1.9.2 / Rails 3 є в BETA на Heroku, але в службі підтримки було сказано, що це має бути добре, використовуючи деякі інструкції, які вони мені надіслали.

Я розумію, що перший запит через тривалий час займає найдовше. Має сенс. Але просто завантажувати сторінки, які навіть не підключаються до БД, займаючи 10 секунд, іноді буває дуже погано.

У будь-якому випадку, ви можете спробувати те, що я буду робити. Це профіль мого додатка, і подивіться, скільки часу це займає локально. Якщо це займає 400 мс, то щось не так. Але якщо я отримаю 50 мс локально, і це все одно займає 10 секунд на Хероку, то щось точно не так.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.