Praktik terbaik saat mengelola pekerjaan asinkron yang sudah berjalan lama

12

Saya sedang dalam tahap desain proyek di mana pengguna akhir akan mengirimkan permintaan dari halaman web yang akan memunculkan pekerjaan proses asinkron yang berjalan lama. Apakah ada "praktik terbaik" untuk masalah ini? Apakah layanan web dan broker layanan adalah cara yang baik untuk pergi? Apakah antrian pengiriman pesan Microsoft berlaku di sini?

John Ruf
sumber
Jika melakukan ini melalui web, dan jika butuh waktu yang sangat lama, maka Anda dapat mengirim pesan teks atau email ke pengguna setelah selesai.
Pekerjaan

Jawaban:

6

Saya tidak tahu tentang "praktik terbaik". Saya tahu kesalahan paling umum.

Kesalahan Pertama: DOS Yourself

Anda menggunakan webhandler untuk memproses pekerjaan yang sudah berjalan lama. Ini bisa buruk atau sangat buruk tergantung pada persentase klik Anda yang menjadi pekerjaan lama, berapa lama mereka berjalan dan berapa banyak lalu lintas berkelanjutan yang Anda dapatkan.

Anda ingin memastikan bahwa Anda tidak mendapatkan lebih dari 1 pekerjaan jangka panjang dalam periode waktu yang dibutuhkan untuk menyelesaikan pekerjaan jangka panjang itu. Jika Anda melakukannya, Anda DOS sendiri. Ini juga akan semakin buruk semakin banyak lalu lintas yang Anda dapatkan dengan asumsi persentase dan waktu tetap konsisten. Itu salah satu masalah yang memaksakan diri membatasi pertumbuhan lalu lintas.

Kesalahan Kedua: Pemijahan dari webhandler

Memunculkan proses dari penangan web untuk menangani proses yang berjalan lama bisa rumit, dan akibatnya juga rentan kesalahan.

  • Anda harus memisahkan dari orang tua dengan benar jika penangan web menunggu anak selesai.
  • Ketika Anda bercabang anak di unix itu mewarisi pegangan terbuka dari orang tua. Ini akan ditutup secara otomatis kecuali ditimpa. Ini termasuk hal-hal seperti koneksi database, filehandles, koneksi jaringan terbuka lainnya. Semua yang ditutup ketika proses anak selesai.

Pilihan

Saya biasanya menggunakan at(1)untuk memisahkan secara bersih dari webhandler tanpa forking.

Anda juga dapat menggunakan implementasi polling dengan cron.

Anda dapat berkomunikasi dengan proses server lain yang menangani pemrosesan. Komunikasi itu dapat dilakukan dengan sockets,, pipesatau abstraksi tingkat yang lebih tinggi seperti panggilan http REST atau routing pesan antrian.

dietbuddha
sumber
2

Saya kira Anda berbicara tentang lebih dari beberapa menit.

Jika beberapa menit, Anda bisa meluncurkan utas pekerja di latar belakang dan menampilkan beberapa kemajuan pada UI. Banyak aplikasi web menggunakan metode itu.

Jika lebih dari, katakan 5 menit, Anda mungkin ingin mendelegasikan tugas ke layanan khusus. Salah satu contohnya adalah laporan yang dihasilkan oleh Google Analytics.

Antrian Microsoft Messaging dapat digunakan untuk mengirimkan informasi dari suatu sistem ke sistem lain, atau komponen ke komponen lain.


sumber
Bagaimana bahasa seperti PHP mencapai ini? Saya tahu beberapa aplikasi web yang melakukan ini tetapi ditulis dalam PHP
TheLQ
Saya bukan pakar PHP, tapi saya kira alih-alih utas diluncurkan oleh halaman yang sama, yang lain disebut. Inilah yang sebenarnya terjadi dengan AJAX.