Antrian tugas terdistribusi (Mis. Celery) vs skrip crontab

92

Saya kesulitan memahami tujuan 'antrian tugas terdistribusi'. Misalnya, perpustakaan seledri python .

Saya tahu bahwa di seledri, kerangka python, Anda dapat mengatur jendela berjangka waktu agar fungsi dapat dijalankan. Namun, itu juga dapat dengan mudah dilakukan di crontab linux yang diarahkan ke skrip python.

Dan sejauh yang saya tahu, dan ditunjukkan dari aplikasi web django-seledri saya sendiri, seledri mengkonsumsi lebih banyak memori RAM daripada hanya menyiapkan crontab mentah. Perbedaan beberapa ratus MB untuk aplikasi yang relatif kecil.

Bisakah seseorang membantu saya dengan perbedaan ini? Mungkin penjelasan tingkat tinggi tentang bagaimana antrian tugas / crontab bekerja secara umum akan bagus juga.

Terima kasih.

Lucas Ou-Yang
sumber

Jawaban:

135

Itu bergantung pada apa yang Anda ingin tugas Anda lakukan, apakah Anda perlu mendistribusikannya, dan bagaimana Anda ingin mengelolanya.

Crontab mampu menjalankan skrip setiap N interval. Ini berjalan, dan kemudian kembali. Pada dasarnya Anda mendapatkan satu eksekusi setiap interval. Anda bisa mengarahkan crontab untuk menjalankan perintah manajemen django dan mendapatkan akses ke seluruh lingkungan django, jadi seledri tidak benar-benar membantu Anda di sana.

Apa yang dibawa seledri ke meja, dengan bantuan antrian pesan, adalah tugas-tugas terdistribusi. Banyak server dapat bergabung dengan kumpulan pekerja dan masing-masing menerima item pekerjaan tanpa takut penanganan ganda. Anda juga dapat menjalankan tugas segera setelah siap. Dengan cron, Anda dibatasi minimal satu menit.

Sebagai contoh, bayangkan Anda baru saja meluncurkan aplikasi web baru dan Anda menerima ratusan pendaftaran yang membutuhkan email untuk dikirim ke setiap pengguna. Mengirim email mungkin membutuhkan waktu lama (secara komparatif) sehingga Anda memutuskan bahwa Anda akan menangani email aktivasi melalui tugas.

Jika Anda menggunakan cron, Anda harus memastikan bahwa setiap menit cron dapat memproses semua email yang perlu dikirim. Jika Anda memiliki beberapa server, Anda sekarang perlu memastikan bahwa Anda tidak mengirim beberapa email aktivasi ke pengguna yang sama - Anda memerlukan semacam sinkronisasi.

Dengan seledri, Anda menambahkan tugas ke antrian. Anda mungkin memiliki beberapa pekerja per server sehingga Anda telah meningkatkan skala sebelum cronjob. Anda mungkin juga memiliki beberapa server yang memungkinkan Anda untuk menskalakan lebih banyak lagi. Sinkronisasi ditangani sebagai bagian dari 'antrian'.

Anda dapat menggunakan seledri sebagai pengganti cron tetapi itu bukan penggunaan utamanya. Ini digunakan untuk melakukan tugas-tugas asinkron di seluruh cluster terdistribusi.

Dan tentu saja, seledri memiliki banyak fitur yang tidak dimiliki cron.

Josh Smeaton
sumber