Dunia Internet

Cara menangani request time out pada web

Cara menangani request time out pada web – Permintaan web yang diproses oleh Heroku diarahkan ke dynos Anda melalui sejumlah router Heroku. Permintaan ini dimaksudkan untuk dilayani oleh aplikasi Anda dengan cepat. Praktik terbaik adalah mendapatkan waktu respon aplikasi web Anda di bawah 500ms, ini akan membebaskan aplikasi untuk permintaan lebih banyak dan memberikan pengalaman pengguna berkualitas tinggi kepada pengunjung Anda. Terkadang permintaan web mungkin hang atau membutuhkan waktu berlebih untuk diproses oleh aplikasi Anda. Bila ini terjadi, router akan menghentikan permintaan jika membutuhkan waktu lebih dari 30 detik untuk menyelesaikannya.

Penghitungan mundur untuk timeout 30 detik ini dimulai setelah seluruh permintaan (semua header permintaan dan, jika ada, badan permintaan) telah dikirim dari router ke dyno. Permintaan tersebut kemudian harus diproses di dyno oleh aplikasi Anda, dan tanggapan dikirim kembali ke router, dalam waktu 30 detik untuk menghindari batas waktu.

Ketika timeout terdeteksi, router akan mengembalikan halaman kesalahan yang dapat disesuaikan ke klien dan sebuah kesalahan H12 dipancarkan ke log aplikasi Anda. Sementara router telah mengembalikan respons ke klien, aplikasi Anda tidak akan tahu bahwa permintaan pemrosesannya telah mencapai batas waktu, dan aplikasi Anda akan terus bekerja sesuai permintaan. Untuk menghindari situasi ini, Heroku merekomendasikan pengaturan batas waktu dalam aplikasi Anda dan menjaga nilainya dengan baik di bawah 30 detik, seperti 10 atau 15 detik. Tidak seperti timeout routing, timer ini akan dimulai saat permintaan mulai diproses oleh aplikasi Anda. Anda dapat membaca lebih lanjut tentang hal ini di bawah dalam perilaku Timeout.

Nilai timeout tidak dapat dikonfigurasi. Jika server Anda membutuhkan waktu lebih dari 30 detik untuk menyelesaikan permintaan yang diberikan, sebaiknya pindahkan pekerjaan ke tugas latar belakang atau pekerja untuk melakukan ping server secara berkala untuk mengetahui apakah permintaan pemrosesan telah selesai. Pola ini membebaskan proses web Anda hingga melakukan lebih banyak pekerjaan, dan mengurangi waktu respons aplikasi secara keseluruhan.

Cara menangani request time out pada web

Tanggapan polling dan streaming yang panjang Heroku mendukung fitur HTTP 1.1 seperti polling panjang dan tanggapan streaming. Aplikasi memiliki jendela awal 30 detik untuk merespons dengan satu byte kembali ke klien. Namun, setiap byte yang dikirim setelahnya (baik diterima dari klien atau dikirim oleh aplikasi Anda) me-reset sebuah jendela 55 jendela yang bergulir. Jika tidak ada data yang dikirim selama jendela 55 detik, koneksi akan dihentikan.

Jika Anda mengirim respons streaming, seperti acara yang dikirim oleh server, Anda harus mendeteksi saat klien menutup telepon, dan pastikan server aplikasi Anda segera menutup sambungan. Jika server membuat sambungan terbuka selama 55 detik tanpa mengirim data apapun, Anda akan melihat batas waktu permintaan.

Saat sambungan dihentikan, halaman kesalahan akan diberikan ke klien. Dyno web yang memproses permintaan tidak tersentuh – akan terus memproses permintaan (meskipun tidak dapat mengirim tanggapan apa pun). Permintaan selanjutnya kemudian diteruskan ke proses yang sama yang tidak dapat merespons (tergantung pada perilaku konkurensi bahasa / kerangka aplikasi) yang menyebabkan degradasi lebih lanjut.

Waktu tunggu permintaan debugging Salah satu penyebab timeout permintaan adalah loop tak terbatas dalam kode. Uji secara lokal (mungkin menggunakan salinan lokal dari database produksi, diekstrak menggunakan pgbackups) dan lihat apakah Anda dapat meniru masalah dan memperbaiki bug. Kemungkinan lain adalah Anda mencoba melakukan semacam tugas lama dalam proses web Anda, seperti:

  1. Mengirim email
  2. Mengakses API jarak jauh (mengeposkan ke Twitter, menanyakan Flickr, dll.)
  3. Web scraping / crawling
  4. Merender gambar atau PDF
  5. Perhitungan berat (menghitung urutan fibonacci, dll.)

Penggunaan database yang berat (query lambat atau banyak, kueri N + 1) Jika demikian, Anda harus memindahkan pengangkatan berat ini ke pekerjaan latar belakang yang dapat berjalan secara asinkron dari permintaan web Anda. Lihat Dynos Pekerja, Pekerjaan Latar Belakang dan Antrian untuk rinciannya.

Kelas timeout lain terjadi bila layanan eksternal yang digunakan oleh aplikasi Anda tidak tersedia atau kelebihan beban. Dalam kasus ini, aplikasi web Anda kemungkinan besar akan habis waktu kecuali Anda memindahkan pekerjaan ke latar belakang. Dalam beberapa kasus di mana Anda harus memproses permintaan ini selama permintaan web Anda, Anda harus selalu merencanakan kasus kegagalan. Sebagian besar bahasa memungkinkan Anda menentukan batas waktu pada permintaan HTTP, misalnya.

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll To Top