ข้อดีข้อเสียในการใช้คื่นฉ่ายเทียบกับ RQ [ปิด]


104

ตอนนี้ฉันกำลังทำงานในโครงการ python ที่ต้องใช้งานเบื้องหลังบางอย่าง (ส่วนใหญ่เป็นการส่งอีเมลและการอัปเดตฐานข้อมูลจำนวนมาก) ฉันใช้ Redis สำหรับนายหน้างาน ดังนั้นในจุดนี้ผมมีสองผู้สมัคร: คื่นฉ่ายและRQ ฉันมีประสบการณ์เกี่ยวกับคิวงานเหล่านี้มาบ้าง แต่ฉันอยากขอให้พวกคุณแบ่งปันประสบการณ์การใช้เครื่องมือนี้ ดังนั้น.

  1. ข้อดีข้อเสียในการใช้ Celery กับ RQ คืออะไร
  2. ตัวอย่างของโครงการ / งานที่เหมาะสมในการใช้ขึ้นฉ่ายเทียบกับ RQ

คื่นฉ่ายดูค่อนข้างซับซ้อน แต่เป็นโซลูชันที่มีคุณสมบัติครบถ้วน อันที่จริงฉันไม่คิดว่าฉันต้องการคุณสมบัติทั้งหมดนี้ จากด้านอื่น ๆ RQ นั้นง่ายมาก (เช่นการกำหนดค่าการรวม) แต่ดูเหมือนว่าจะขาดคุณสมบัติที่มีประโยชน์บางอย่าง (เช่นการเพิกถอนงานการโหลดโค้ดอัตโนมัติ)


3
แต่น่าเสียดายที่ชนิดของคำถามนี้ไม่พอดีกับรูปแบบของเว็บไซต์นี้ให้ดูที่คำถามที่พบบ่อย คำถามเช่นนี้มักจะนำไปสู่คำตอบที่คลุมเครือและล้าสมัยเร็วมากเช่นกัน หากเราสามารถช่วยคุณแก้ปัญหาใด ๆ ได้อย่าลังเลที่จะโพสต์คำถามอื่น!
Martijn Pieters

BTW สำหรับฉันดูเหมือนว่าคุณสามารถเพิกถอนงานได้แม้จะมีแผงควบคุม
rq ก็ตาม

คำตอบ:


144

นี่คือสิ่งที่ฉันพบในขณะที่พยายามตอบคำถามเดียวกันนี้ อาจไม่ครอบคลุมและอาจไม่ถูกต้องในบางประเด็น

ในระยะสั้น RQ ได้รับการออกแบบให้เรียบง่ายกว่าเดิม คื่นช่ายได้รับการออกแบบให้มีความแข็งแรงมากขึ้น พวกเขายอดเยี่ยมทั้งคู่

  • เอกสารประกอบ. เอกสารของ RQครอบคลุมโดยไม่ซับซ้อนและสะท้อนความเรียบง่ายโดยรวมของโครงการ - คุณจะไม่รู้สึกหลงทางหรือสับสน เอกสารของคื่นฉ่ายยังครอบคลุม แต่คาดว่าจะกลับมาเยี่ยมชมอีกครั้งเมื่อคุณตั้งค่าสิ่งต่างๆเป็นครั้งแรกเนื่องจากมีตัวเลือกมากเกินไปในการทำให้เป็นภายใน
  • การตรวจสอบ ดอกไม้ของคื่นฉ่ายและแผงควบคุม RQนั้นง่ายมากในการติดตั้งและให้ข้อมูลอย่างน้อย 90% ที่คุณต้องการ

  • การสนับสนุนนายหน้า คื่นช่ายเป็นผู้ชนะที่ชัดเจน RQ รองรับเฉพาะ Redis เท่านั้น ซึ่งหมายถึงเอกสารเกี่ยวกับ "นายหน้าคืออะไร" น้อยลง แต่ยังหมายความว่าคุณไม่สามารถเปลี่ยนโบรกเกอร์ได้ในอนาคตหาก Redis ไม่ทำงานให้คุณอีกต่อไป ยกตัวอย่างเช่นInstagram พิจารณาทั้ง Redis และ RabbitMQ กับคื่นฉ่าย นี่เป็นสิ่งสำคัญเนื่องจากโบรกเกอร์ที่แตกต่างกันมีการรับประกันที่แตกต่างกันเช่น Redis ไม่สามารถรับประกันได้ 100% ว่าข้อความของคุณจะถูกส่ง

  • ลำดับความสำคัญ RQs รุ่นคิวลำดับความสำคัญเป็นเรื่องง่ายและมีประสิทธิภาพ - แรงงานอ่านจากคิวในการสั่งซื้อ ขึ้นฉ่ายต้องใช้คนงานหลายคนเพื่อบริโภคจากคิวที่แตกต่างกัน ทั้งสองวิธีได้ผล

  • รองรับระบบปฏิบัติการ คื่นฉ่ายเป็นผู้ชนะที่ชัดเจนที่นี่เนื่องจาก RQ ทำงานบนระบบที่รองรับforkเช่นระบบ Unix เท่านั้น

  • รองรับภาษา RQ รองรับเฉพาะ Python ในขณะที่ Celery ให้คุณส่งงานจากภาษาหนึ่งไปยังภาษาอื่น

  • API คื่นฉ่ายมีความยืดหยุ่นสูงมาก (แบ็กเอนด์ผลลัพธ์หลายรูปแบบรูปแบบการกำหนดค่าที่ดีการรองรับผ้าใบเวิร์กโฟลว์) แต่โดยธรรมชาติแล้วพลังนี้อาจทำให้สับสนได้ ในทางตรงกันข้าม RQ api นั้นเรียบง่าย

  • รองรับงานย่อย ขึ้นฉ่ายรองรับงานย่อย (เช่นการสร้างงานใหม่จากภายในงานที่มีอยู่) ฉันไม่รู้ว่า RQ ทำหรือเปล่า

  • ชุมชนและความมั่นคง คื่นช่ายน่าจะเป็นที่ยอมรับมากขึ้น แต่ทั้งคู่เป็นโครงการที่มีการเคลื่อนไหว ในขณะที่เขียน Celery มีดาว ~ 3500 ดวงใน Github ในขณะที่ RQ มี ~ 2000 และทั้งสองโครงการแสดงให้เห็นถึงการพัฒนาที่กระตือรือร้น

ในความคิดของฉันคื่นฉ่ายไม่ซับซ้อนเท่าที่ชื่อเสียงอาจทำให้คุณเชื่อได้ แต่คุณจะต้อง RTFM

แล้วทำไมทุกคนถึงยอมแลกคื่นฉ่าย (เนื้อหาที่มีคุณสมบัติครบถ้วนมากกว่า) สำหรับ RQ? ในใจของฉันทุกอย่างลงไปที่ความเรียบง่าย ด้วยการ จำกัด ตัวเองไว้ที่ Redis + Unix ทำให้ RQ มีเอกสารประกอบที่ง่ายขึ้นโค้ดเบสที่ง่ายขึ้นและ API ที่ง่ายกว่า ซึ่งหมายความว่าคุณ (และผู้ที่อาจมีส่วนร่วมในโครงการของคุณ) สามารถให้ความสำคัญกับรหัสที่คุณสนใจแทนที่จะต้องเก็บรายละเอียดเกี่ยวกับระบบคิวงานไว้ในหน่วยความจำที่ใช้งานได้ เราทุกคนมีข้อ จำกัด เกี่ยวกับจำนวนรายละเอียดที่สามารถอยู่ในหัวของเราได้ในคราวเดียวและด้วยการลบความจำเป็นในการเก็บรายละเอียดคิวงานในนั้น RQ จะช่วยให้กลับไปที่รหัสที่คุณสนใจ ความเรียบง่ายนั้นมาพร้อมกับค่าใช้จ่ายของคุณสมบัติต่างๆเช่นคิวงานระหว่างภาษาการรองรับ OS แบบกว้างการรับประกันข้อความที่เชื่อถือได้ 100% และความสามารถในการเปลี่ยนนายหน้าข้อความได้อย่างง่ายดาย


1
Subtask support. Celery supports subtasks (e.g. creating new tasks from within existing tasks). I don't know if RQ does สำหรับ 24.05.2019 RQ รองรับงานย่อย (การเรียกคิวภายใน) ด้วย
eserdk

1

ขึ้นฉ่ายนั้นไม่ซับซ้อน ที่หลักของคุณทำขั้นตอนโดยขั้นตอนการกำหนดค่าจากที่tutorialsสร้างceleryเช่นฟังก์ชั่นการตกแต่งของคุณด้วยแล้วเรียกใช้งานด้วย@celery.taskmy_task.delay(*args, **kwargs)

เมื่อพิจารณาจากการประเมินของคุณเองดูเหมือนว่าคุณจะต้องเลือกระหว่างคุณสมบัติที่ขาด (สำคัญ) หรือมีส่วนเกินห้อยอยู่รอบ ๆ นั่นไม่ใช่ทางเลือกที่ยากเกินไปในหนังสือของฉัน


48
ฉันไม่เห็นด้วยอย่างยิ่งกับการประเมินของคุณ ฉันพยายามอยู่สองสามสัปดาห์เพื่อให้คื่นฉ่ายทำงานบนเซิร์ฟเวอร์ Debian ของฉันได้สำเร็จแม้ว่าจะอ่านเอกสารจำนวนมากและโพสต์บล็อกมากมาย ปัญหาหลักที่ผมมีก็คือว่าถ้าคุณมีบางสิ่งบางอย่างที่ไม่ถูกต้องในการกำหนดค่าของคุณคื่นฉ่ายจะไม่ให้การใด ๆความคิดเห็นเกี่ยวกับสิ่งที่อาจจะมีปัญหา และในที่สุดเมื่อฉันก็ทำงานได้ฉันก็เริ่มใช้ OSError บางประเภทที่อยู่ลึกลงไปในกอง Celery ฉันโพสต์ปัญหาบน Github แต่ไม่มีใครสามารถช่วยได้ ฉันจะไม่แตะคื่นฉ่ายอีกครั้งด้วยเสาสิบฟุต
เรย์

2
Effin 'OSError man. No such file or directory. ฉันไม่รู้ว่าจะเริ่มจากตรงไหน ฉันจะลอง RQ เป็นครั้งแรกในคืนนี้
MiniGunnR
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.