Dlaczego moje podstawowe aplikacje Heroku ładują się dwie sekundy?

100

Stworzyłem dwie bardzo proste aplikacje Heroku, aby przetestować usługę, ale ładowanie strony przy pierwszej wizycie zajmuje często kilka sekund:

Wszystko, co zrobiłem, to stworzyć prostą aplikację Sinatra i ją wdrożyć. Nie zrobiłem nic, żeby zepsuć lub przetestować serwery Heroku. Co mogę zrobić, aby skrócić czas odpowiedzi? W tej chwili jest bardzo wolno i nie wiem, od czego zacząć. Jeśli to pomaga, kod projektów jest na githubie.

Lance Pollard
źródło

Odpowiedzi:

176
  • Jeśli Twoja aplikacja nie będzie używana przez jakiś czas, zostanie wyładowana (z pamięci serwera).
  • Przy pierwszym trafieniu ładuje się i pozostaje załadowany do czasu, gdy nikt nie uzyska do niego dostępu.

Ma to na celu zaoszczędzenie zasobów serwera. Jeśli nikt nie korzysta z Twojej aplikacji, po co zajmować zasoby i nie pozwalać komuś, kto naprawdę ich potrzebuje?
Jeśli Twoja aplikacja ma dużo ciągłego ruchu, nigdy nie zostanie rozładowana.

Jest na ten temat oficjalna notatka .

clyfe
źródło
51
Najłatwiejszym sposobem rozwiązania tego problemu jest zwiększenie liczby hamowni do 2.
Rozdz.
5
@diegopau Znalazłem fajną aplikację ( wekkars.com ), która robi dokładnie to, czego potrzebujesz. Na razie wygląda na to, że jest w wersji beta, ale tutaj działa idealnie.
SteenhouwerD,
68
Pingowanie serwera, aby nie działał bezczynnie, jest bzdurą we własnym gnieździe. Te usługi, o których mówisz, są bezpłatne . Muszą oszczędzać zasoby. Jeśli wszyscy pingują swój serwer, żaden nie zostaje zamieniony, a dostawca musi zwiększyć skalę. To kosztuje ... Żegnaj bezpłatną usługę. Myślę, że plakat z tą odpowiedzią powinien usunąć sugestię pingowania serwera.
GreenAsJade
32
Używam uptimerobot.com do wysyłania pingów do mojej aplikacji Heroku co 5 minut za darmo - mówi mi, że mam 200 OK (i co ważniejsze, gdy nie mam) i utrzymuje aplikację na bieżąco. Nie przepraszam za to; Mam 10 aplikacji heroku, z których większość to aplikacje deweloperskie lub demonstracyjne, ale ta w szczególności jest na żywo / produkcyjna i pomimo małego ruchu musi szybko reagować na żądanie. Gdyby to było zagrożenie dla modelu biznesowego Heroku, powstrzymaliby nas przed tym. Kiedy będę miał tysiące użytkowników na całym świecie, uruchomię kolejną hamownię i zacznę płacić za świetną usługę. Więc przestań z poczuciem winy! :)
ED-209
3
Jestem z Toknem. W jaki sposób nowe aplikacje mają przyciągać użytkowników, skoro strona ładuje się tak wolno, że opuszczają ją, zanim się uruchomią?
Deborah
14

Możesz również sprawdzić opcje buforowania, które masz w Heroku w / Varnish i Memcached. Są one utrzymywane niezależnie od hamowni.

Na przykład, jeśli masz niezmienną stronę główną, możesz ją buforować przez dłuższy czas w Varnish, dodając nagłówki Cache-Control do odpowiedzi. Wówczas Twoi użytkownicy nie odczują obciążenia, dopóki nie będą chcieli „zrobić czegoś”, a nie gdy przyjdą.

siedemnaste
źródło
4

Powinieneś sprawdzić odpowiedź Toma Robinsona na „Skalowalność: Jak działa Heroku?” na Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku dzieli zasoby serwera na wielu różnych klientów / aplikacje. Twoja aplikacja ma przydzielone bloki mocy obliczeniowej. Partycje Heroku oparte na zapotrzebowaniu na zasoby. Jeśli masz popularną aplikację, która wymaga większej mocy, możesz zapłacić za więcej „hamowni” (kontenerów aplikacji), a następnie otrzymać w zamian większy kawałek ciasta.

Jednak w twoim przypadku korzystasz z bezpłatnej aplikacji, którą odwiedza / używa niewiele osób - jeśli są poza tobą. W związku z tym Heroku ogranicza zasoby, które otrzymujesz, zwalniając aplikację - zasadniczo wprowadzając ją w stan hibernacji - do momentu wysłania żądania na Twój adres. Kiedy tak się dzieje, a Twoja aplikacja działa przez długi czas, ponowne załadowanie zajmuje trochę czasu.

Dodaj 1 dodatkową hamownię, aby aplikacja nie zasypiała, jeśli czas przeładowania jest ważny.

RKelley
źródło
3

Mam ten sam problem. Wczoraj wieczorem wdrożyłem aplikację Rails 3 (1.9.2) i działa ona wolno. Wiem, że 1.9.2 / Rails 3 jest w wersji BETA na Heroku, ale zgłoszenie do pomocy technicznej mówiło, że powinno być w porządku, korzystając z instrukcji, które mi przesłali.

Rozumiem, że pierwsze żądanie po długim czasie trwa najdłużej. Ma sens. Ale samo ładowanie stron, które nawet nie łączą się z bazą danych, zajmuje 10 sekund, czasami jest dość złe.

W każdym razie możesz spróbować tego, co zamierzam zrobić. To jest profil mojej aplikacji i zobacz, jak długo to potrwa lokalnie. Jeśli trwa 400 ms, coś jest nie tak. Ale jeśli lokalnie otrzymam 50 ms, a na Heroku nadal trwa to 10 sekund, to coś jest zdecydowanie nie tak.

Oczywiście buforowanie pomaga, ale dostajesz tylko 5 MB za darmo i po raz kolejny, gdy JEDNA osoba korzysta z witryny, nie powinno to być takie wolne.

cbmeeks
źródło