Arsitektur Aplikasi Web - Antrean Pekerjaan/Tugas diperlukan?

Saat ini saya sedang merancang aplikasi web yang memungkinkan pengguna menjadwalkan tugas yang akan dijalankan terhadap API HTTP (atas nama mereka). Tugas dapat berulang dan resolusi waktu minimal yang dapat digunakan untuk penjadwalan adalah satu menit. Karena sifat tugasnya, menurut saya masuk akal untuk menjalankannya secara asinkron. Namun, bagaimana seharusnya arsitektur bagian ini?

Saya berpikir untuk menggunakan antrian tugas untuk membuat tugas oleh aplikasi web dan membiarkannya dijalankan oleh pekerja. Dalam hal ini, saya punya beberapa pertanyaan:

  • Bagaimana cara saya menangani tugas yang berulang?
  • Bagaimana cara menyimpan hasil tugas dengan mudah?
  • Apakah mudah untuk membuat antrian menjadi "persisten"?
  • Haruskah para pekerja berinteraksi langsung dengan database?
  • Haruskah saya mengantri tugas berulang secara manual?

Apa lagi yang bisa saya pertimbangkan? Karena saya berasumsi saya bukan satu-satunya yang memikirkan arsitektur aplikasi web semacam ini, apakah ada "praktik terbaik"? Apakah antrian tugas adalah cara yang tepat?


person Simon    schedule 30.04.2011    source sumber
comment
Ini relevan. Ini menunjukkan cara mengimplementasikan tugas masa depan di node.js. Ubah saja cara kerja dengan mengirimkan permintaan HTTP.   -  person Raynos    schedule 06.05.2011


Jawaban (1)


Ya, ini adalah pola yang terkenal untuk menangani tugas-tugas jangka panjang di bagian belakang aplikasi web. Bergantung pada bahasa dan kerangka aplikasi Anda, ada sejumlah implementasi antrian di luar sana - mis. Resque atau Beanstalkd atau ActiveMQ atau jika persyaratan kinerja Anda tidak tinggi, Anda dapat menggunakan tabel database sebagai semacam antrian.

Ide dasarnya adalah aplikasi Web Anda menempatkan pekerjaan pada antrian dengan konten yang cukup untuk memungkinkan pekerjaan dilanjutkan. Sekelompok proses pekerja di latar belakang (idealnya berjalan independen dari aplikasi web Anda) membaca pekerjaan dari antrian dan menjalankannya. Hasilnya dapat ditulis kembali ke antrian balasan atau mungkin ditulis ke dalam database. Itu tergantung pada bagaimana Anda ingin menampilkan hasilnya kembali kepada pengguna. Untuk aplikasi web, menulis hasil ke dalam database mungkin lebih masuk akal.

Bergantung pada penangan antrean Anda, mereka dapat membuat pekerjaan tetap ada. Misalnya. ActiveMQ mendukung pesan persisten sehingga pesan dalam antrian dipulihkan jika terjadi kegagalan.

Anda bertanya tentang pekerjaan yang berulang - dan menurut saya jawabannya bergantung pada kapan pekerjaan tersebut perlu diulang.

Antrean pesan langsung akan memproses/melepaskan pesan ke pekerja segera setelah tersedia. Jadi penjadwalan itu rumit atau tidak mungkin. Untuk mendukung pekerjaan terjadwal (termasuk pekerjaan yang berulang pada waktu tertentu atau setelah waktu berlalu), Anda mungkin harus mempertimbangkan penggunaan tabel database sebagai antrian sederhana dengan atribut "waktu mulai".

Saya baru-baru ini menjelaskan pola serupa di sini.

person scaganoff    schedule 06.05.2011
comment
Misalkan saya menggunakan RabbitMq, apakah saya memerlukan layanan yang berjalan untuk mengelola antrian? Bagaimana pekerjaan ini biasanya dilakukan? Apa alternatif yang baik untuk suatu layanan? - person SynBiotik; 23.02.2016