Pro dan kontra menggunakan Celery vs. RQ [ditutup]

101

Saat ini saya sedang mengerjakan proyek python yang memerlukan penerapan beberapa pekerjaan latar belakang (kebanyakan untuk pengiriman email dan pembaruan basis data yang besar). Saya menggunakan Redis untuk tugas broker. Jadi saat ini saya punya dua kandidat: Seledri dan RQ . Saya memiliki pengalaman dengan antrean pekerjaan ini, tetapi saya ingin meminta kalian berbagi pengalaman menggunakan alat ini. Begitu.

  1. Apa pro dan kontra menggunakan Celery vs. RQ.
  2. Setiap contoh proyek / tugas yang cocok untuk menggunakan Celery vs. RQ.

Seledri terlihat cukup rumit tetapi ini adalah solusi berfitur lengkap. Sebenarnya saya rasa saya tidak membutuhkan semua fitur ini. Dari sisi lain RQ sangat sederhana (misalnya konfigurasi, integrasi), tetapi tampaknya RQ tidak memiliki beberapa fitur yang berguna (misalnya pencabutan tugas, pemuatan ulang kode)

Max Kamenkov
sumber
3
Sayangnya, pertanyaan semacam ini tidak sesuai dengan format situs ini, lihat FAQ . Pertanyaan seperti ini cenderung mengarah pada jawaban yang tidak jelas yang juga menjadi usang dengan sangat cepat. Jika kami dapat membantu Anda dengan masalah tertentu, jangan ragu untuk mengeposkan pertanyaan lain!
Martijn Pieters
BTW menurut saya seperti Anda dapat mencabut tugas, bahkan dengan rq-dashboard
Peter Kilczuk

Jawaban:

141

Inilah yang saya temukan ketika mencoba menjawab pertanyaan yang sama persis. Ini mungkin tidak komprehensif, dan bahkan mungkin tidak akurat dalam beberapa hal.

Singkatnya, RQ dirancang agar lebih sederhana. Seledri dirancang agar lebih kuat. Keduanya luar biasa.

  • Dokumentasi. Dokumentasi RQ lengkap tanpa rumit, dan mencerminkan kesederhanaan proyek secara keseluruhan - Anda tidak pernah merasa tersesat atau bingung. Dokumentasi Celery juga komprehensif, tetapi berharap untuk mengunjunginya kembali cukup sering ketika Anda pertama kali mengaturnya karena ada terlalu banyak pilihan untuk diinternalisasi.
  • Pemantauan. Bunga Celery dan dasbor RQ keduanya sangat mudah diatur dan memberi Anda setidaknya 90% dari semua informasi yang Anda inginkan

  • Dukungan broker. Seledri adalah pemenangnya, RQ hanya mendukung Redis. Ini berarti lebih sedikit dokumentasi tentang "apa itu broker", tetapi juga berarti Anda tidak dapat beralih broker di masa mendatang jika Redis tidak lagi berfungsi untuk Anda. Misalnya, Instagram menganggap Redis dan RabbitMQ dengan Celery . Ini penting karena broker yang berbeda memiliki jaminan yang berbeda, misalnya Redis tidak dapat (pada saat penulisan) menjamin 100% bahwa pesan Anda terkirim.

  • Antrian prioritas. Model antrian prioritas RQ sederhana dan efektif - pekerja membaca dari antrian secara berurutan . Seledri membutuhkan pemintalan beberapa pekerja untuk mengkonsumsi dari antrian yang berbeda. Kedua pendekatan tersebut berhasil

  • Dukungan OS. Celery adalah pemenang yang jelas di sini, karena RQ hanya berjalan pada sistem yang mendukung forkmisalnya sistem Unix

  • Dukungan bahasa. RQ hanya mendukung Python, sedangkan Celery memungkinkan Anda mengirim tugas dari satu bahasa ke bahasa lain

  • API. Celery sangat fleksibel (beberapa hasil backend, format konfigurasi yang bagus, dukungan kanvas alur kerja) tetapi tentu saja kekuatan ini bisa membingungkan. Sebaliknya, RQ api itu sederhana.

  • Dukungan subtugas. Celery mendukung subtugas (misalnya membuat tugas baru dari dalam tugas yang sudah ada). Saya tidak tahu apakah RQ melakukannya

  • Komunitas dan Stabilitas. Seledri mungkin lebih mapan, tetapi keduanya adalah proyek aktif. Saat penulisan, Celery memiliki ~ 3500 bintang di Github sementara RQ memiliki ~ 2000 dan kedua proyek menunjukkan perkembangan aktif

Menurut pendapat saya, Celery tidak serumit reputasinya yang mungkin membuat Anda percaya, tetapi Anda harus RTFM.

Jadi, mengapa ada orang yang mau menukar Celery (bisa dibilang lebih berfitur lengkap) untuk RQ? Dalam pikiran saya, semuanya bermuara pada kesederhanaan. Dengan membatasi dirinya pada Redis + Unix, RQ menyediakan dokumentasi yang lebih sederhana, basis kode yang lebih sederhana, dan API yang lebih sederhana. Ini berarti Anda (dan kontributor potensial untuk proyek Anda) dapat fokus pada kode yang Anda pedulikan, daripada harus menyimpan detail tentang sistem antrian tugas di memori kerja Anda. Kita semua memiliki batasan tentang berapa banyak detail yang dapat kita pikirkan sekaligus, dan dengan menghilangkan kebutuhan untuk menyimpan rincian antrian tugas di sana, RQ memungkinkan kembali ke kode yang Anda pedulikan. Kesederhanaan itu datang dengan mengorbankan fitur-fitur seperti antrian tugas antar-bahasa, dukungan OS yang luas, jaminan pesan yang 100% andal, dan kemampuan untuk beralih broker pesan dengan mudah.

Hamy
sumber
1
Subtask support. Celery supports subtasks (e.g. creating new tasks from within existing tasks). I don't know if RQ does Adapun 24.05.2019 RQ mendukung subtugas (panggilan batin untuk antrian) juga.
eserdk
1

Seledri tidak serumit itu. Pada intinya, Anda melakukan konfigurasi langkah demi langkah dari tutorials, membuat celeryinstance, menghias fungsi Anda dengan @celery.tasklalu menjalankan tugas dengan my_task.delay(*args, **kwargs).

Menilai dari penilaian Anda sendiri, sepertinya Anda harus memilih antara kekurangan fitur (kunci) atau memiliki kelebihan berkeliaran. Pilihan itu tidak terlalu sulit dalam buku saya.

Jesse the Game
sumber
46
Saya sangat tidak setuju dengan penilaian Anda. Saya berjuang selama beberapa minggu untuk menjalankan Celery dengan sukses di server Debian saya, bahkan setelah membaca banyak dokumentasi dan banyak posting blog. Masalah utama saya adalah bahwa jika Anda punya sesuatu yang salah dalam konfigurasi Anda, seledri tidak akan memberikan setiap umpan balik tentang apa masalahnya mungkin. Dan ketika saya akhirnya berhasil, saya mulai mendapatkan beberapa jenis OSError jauh di dalam tumpukan Celery. Saya memposting masalah di Github tetapi tidak ada yang bisa membantu. Saya tidak akan menyentuh Celery lagi dengan tiang setinggi sepuluh kaki.
Ray
2
Effin 'OSError man. No such file or directory. Saya tidak tahu harus mulai dari mana. Saya akan mencoba RQ untuk pertama kalinya malam ini.
MiniGunnR