2012-01-31 51 views
32

Từ sự hiểu biết của tôi, Celery là một hàng đợi nhiệm vụ phân tán, có nghĩa là điều duy nhất mà nó nên làm là gửi nhiệm vụ/công việc đến các máy chủ khác và nhận kết quả. RabbitMQ là một hàng đợi tin nhắn, và không có gì hơn. Tuy nhiên, một nhân viên chỉ có thể nghe MQ và thực hiện nhiệm vụ khi nhận được tin nhắn. Điều này đạt được chính xác những gì Celery cung cấp, vậy tại sao cần Celery?Tại sao sử dụng Celery thay vì RabbitMQ?

Trả lời

31

Bạn nói đúng, bạn không cần Celery chút nào. Khi bạn đang thiết kế một hệ thống phân tán có rất nhiều lựa chọn và không có cách nào đúng để làm những việc phù hợp với mọi tình huống.

Nhiều người nhận thấy rằng linh hoạt hơn để có các nhóm người tiêu dùng tin nhắn chờ thông báo xuất hiện trên hàng đợi, thực hiện một số công việc và gửi tin nhắn khi công việc kết thúc.

Cần tây là một khung kết thúc nhiều thứ trong một gói nhưng nếu bạn không thực sự cần toàn bộ gói, thì tốt hơn hết là thiết lập RabbitMQ và thực hiện những gì bạn cần mà không cần phải phức tạp. Ngoài ra, RabbitMQ có thể được sử dụng trong nhiều tình huống hơn ngoài kịch bản hàng đợi nhiệm vụ mà Celery thực hiện.

Nhưng nếu bạn chọn Celery, hãy suy nghĩ kỹ về RabbitMQ. Mô hình xếp hàng tin nhắn của Celery rất đơn giản và nó thực sự phù hợp hơn với Redis so với RabbitMQ. Thỏ có một tập hợp các tùy chọn phong phú mà Celery về cơ bản bỏ qua.

+2

"Thỏ có một tập hợp các tùy chọn phong phú mà Celery về cơ bản bỏ qua". Đó là sự thật nhưng một chút sai lầm. Ví dụ, bạn có thể thiết lập các quy tắc định tuyến trong lớp Rabbit không được kiểm soát bởi Celery, nhưng ảnh hưởng đến việc định tuyến và tiêu thụ các nhiệm vụ Celery. Đó là một vấn đề thiết kế cho dù bạn muốn định tuyến được xử lý bởi người gọi, bộ định tuyến tùy chỉnh Celery hay cơ chế trao đổi. Đúng là những cấu hình Rabbit có thể "vô hình" với Celery nhưng điều đó không có nghĩa là chúng không có tác dụng hữu ích. –

21

Celery về cơ bản cung cấp giao diện đẹp để thực hiện đúng những gì bạn đã nói và đề cập đến tất cả cấu hình cho bạn. Có, bạn có thể làm điều đó bằng tay, nhưng bạn chỉ cần viết lại cần tây.

+5

Ngoài ra còn có yếu tố hoạt động. Các bộ phận lớn của Celery là có độ tin cậy (ví dụ: không bị rơi khi một ngoại lệ cụ thể được đăng, vv), và quản lý công nhân, và các cụm công nhân. – asksol

Các vấn đề liên quan