Mengapa aplikasi Heroku dasar saya memerlukan waktu dua detik untuk dimuat?

100

Saya membuat dua aplikasi Heroku yang sangat sederhana untuk menguji layanan, tetapi sering kali butuh beberapa detik untuk memuat halaman ketika saya pertama kali mengunjunginya:

Yang saya lakukan hanyalah membuat aplikasi Sinatra sederhana dan menerapkannya. Saya belum melakukan apa pun untuk mengacaukan atau menguji server Heroku. Apa yang dapat saya lakukan untuk meningkatkan waktu respons? Ini sangat lambat sekarang dan saya tidak yakin harus mulai dari mana. Kode untuk proyek ada di github jika itu membantu.

Lance Pollard
sumber

Jawaban:

176
  • Jika aplikasi Anda tidak digunakan untuk beberapa saat, aplikasi akan dibongkar (dari memori server).
  • Pada klik pertama itu dimuat dan tetap dimuat sampai beberapa waktu berlalu tanpa ada yang mengaksesnya.

Ini dilakukan untuk menghemat sumber daya server. Jika tidak ada yang menggunakan aplikasi Anda mengapa menyibukkan sumber daya dan tidak membiarkan seseorang yang benar-benar membutuhkannya?
Jika aplikasi Anda memiliki banyak lalu lintas berkelanjutan, aplikasi tersebut tidak akan pernah diturunkan.

Ada catatan resmi tentang ini.

clyfe
sumber
51
Cara termudah untuk memperbaikinya adalah dengan meningkatkan dynos Anda menjadi 2.
Bab
5
@diegopau Saya menemukan aplikasi yang bagus ( wekkars.com ) yang melakukan apa yang Anda butuhkan. Untuk saat ini tampaknya dalam versi beta tetapi berfungsi sempurna di sini.
SteenhouwerD
68
Mem-ping server Anda untuk menjaganya agar tidak menganggur sangat merugikan di sarang Anda sendiri. Layanan yang Anda bicarakan ini gratis . Mereka perlu menghemat sumber daya. Jika semua orang melakukan ping ke server mereka, tidak ada yang ditukar, dan penyedia harus meningkatkan skala. Itu membutuhkan uang .... selamat tinggal layanan gratis. Saya pikir poster jawaban ini harus menghapus saran untuk melakukan ping ke server.
GreenAsJade
32
Saya menggunakan uptimerobot.com untuk melakukan ping ke aplikasi Heroku saya setiap 5 menit secara gratis - ini memberi tahu saya bahwa saya memiliki 200OK (dan yang lebih penting jika saya tidak melakukannya) dan itu membuat aplikasi tetap responsif. Saya tidak meminta maaf untuk ini; Saya memiliki 10 aplikasi heroku, yang sebagian besar adalah aplikasi dev atau demo, tetapi yang ini khususnya adalah live / produksi dan meskipun lalu lintasnya rendah, aplikasi ini perlu merespons dengan cepat saat diminta. Jika ini adalah ancaman bagi model bisnis Heroku maka mereka akan menghentikan kami melakukannya. Ketika saya memiliki ribuan pengguna global, saya akan memutar dyno lain dan mulai membayar untuk layanan yang hebat itu. Jadi berhentilah dengan hal yang membuat Anda merasa bersalah! :)
ED-209
3
Saya dengan Tokn. Bagaimana aplikasi baru bisa mendapatkan pengguna jika situs memuat begitu lambat sehingga mereka pergi sebelum aktif?
Deborah
14

Anda mungkin juga ingin menyelidiki opsi cache yang Anda miliki di Heroku w / Varnish dan Memcached. Ini dipertahankan terlepas dari dino.

Misalnya, jika Anda memiliki beranda yang tidak berubah, Anda dapat menyimpannya dalam cache untuk waktu yang lama di Varnish dengan menambahkan header Kontrol-Cache ke respons. Kemudian pengguna Anda tidak akan mengalami beban yang dipukul sampai mereka ingin "melakukan sesuatu" daripada saat mereka tiba.

tujuh sembilan belas
sumber
4

Anda harus memeriksa jawaban Tom Robinson untuk "Skalabilitas: Bagaimana Cara Kerja Heroku?" di Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku membagi sumber daya server di antara banyak pelanggan / aplikasi yang berbeda. Aplikasi Anda diberi alokasi blok daya komputasi. Partisi Heroku berdasarkan permintaan sumber daya. Ketika Anda memiliki aplikasi populer yang menuntut lebih banyak daya, Anda dapat membayar lebih banyak 'dynos' (wadah aplikasi) dan kemudian mendapatkan potongan kue yang lebih besar sebagai gantinya.

Namun dalam kasus Anda, Anda menjalankan aplikasi gratis yang hanya sedikit orang - jika ada di luar Anda - yang mengunjungi / menggunakan. Oleh karena itu, Heroku mengurangi sumber daya yang Anda peroleh dengan membongkar aplikasi Anda - pada dasarnya dalam mode hibernasi - sampai ada permintaan yang dibuat ke alamat Anda. Jika itu terjadi, dan aplikasi Anda sudah lama tidak digunakan, perlu waktu untuk memuat ulang.

Tambahkan 1 dyno ekstra agar aplikasi Anda tidak tertidur, jika waktu muat ulang itu penting.

RKelley
sumber
3

Saya mengalami masalah yang sama. Saya menerapkan aplikasi Rails 3 (1.9.2) tadi malam dan lambat. Saya tahu bahwa 1.9.2 / Rails 3 ada dalam BETA di Heroku tetapi tiket dukungan mengatakan seharusnya baik-baik saja menggunakan beberapa instruksi yang mereka kirimkan kepada saya.

Saya memahami bahwa permintaan pertama setelah waktu yang lama membutuhkan waktu yang paling lama. Masuk akal. Tetapi hanya memuat halaman yang bahkan tidak terhubung ke DB membutuhkan waktu 10 detik terkadang sangat buruk.

Bagaimanapun, Anda mungkin ingin mencoba apa yang akan saya lakukan. Itu profil aplikasi saya dan lihat berapa lama waktu yang dibutuhkan secara lokal. Jika butuh 400ms maka ada sesuatu yang salah. Tetapi jika saya mendapatkan 50ms secara lokal dan masih membutuhkan 10 detik di Heroku maka pasti ada sesuatu yang salah.

Jelas, caching membantu tetapi Anda hanya mendapatkan 5MB secara gratis dan sekali lagi, dengan SATU orang menggunakan situs ini, seharusnya tidak selambat itu.

cbmeeks.dll
sumber