Hàng đợi tác vụ phân tán (Ví dụ: Cần tây) so với tập lệnh crontab


92

Tôi gặp khó khăn khi hiểu mục đích của 'hàng đợi tác vụ được phân phối'. Ví dụ, thư viện cần tây của python .

Tôi biết rằng trong celery, framework python, bạn có thể đặt cửa sổ định thời cho các hàm được thực thi. Tuy nhiên, điều đó cũng có thể được thực hiện dễ dàng trong crontab linux hướng tới tập lệnh python.

Và theo như tôi biết, và được hiển thị từ các ứng dụng web django-celery của riêng tôi, cần tây tiêu tốn nhiều bộ nhớ RAM hơn là chỉ thiết lập một crontab thô. Chênh lệch vài trăm MB cho một ứng dụng tương đối nhỏ.

Ai đó có thể vui lòng giúp tôi với sự phân biệt này? Có lẽ một lời giải thích cấp cao về cách hoạt động của hàng đợi tác vụ / crontabs nói chung cũng sẽ rất hay.

Cảm ơn bạn.

Câu trả lời:


133

Nó phụ thuộc vào những gì bạn muốn các nhiệm vụ của mình đang làm, nếu bạn cần phân phối chúng và cách bạn muốn quản lý chúng.

Một crontab có khả năng thực thi một tập lệnh sau mỗi N khoảng thời gian. Nó chạy, và sau đó trả về. Về cơ bản, bạn nhận được một lần thực hiện mỗi khoảng thời gian. Bạn chỉ có thể hướng một crontab thực hiện lệnh quản lý django và có quyền truy cập vào toàn bộ môi trường django, vì vậy cần tây không thực sự giúp bạn ở đó.

Những gì cần tây mang lại cho bảng, với sự trợ giúp của hàng đợi tin nhắn, là các tác vụ được phân phối. Nhiều máy chủ có thể tham gia nhóm công nhân và mỗi máy nhận được một hạng mục công việc mà không sợ phải xử lý gấp đôi. Cũng có thể thực thi một tác vụ ngay khi nó sẵn sàng. Với cron, bạn bị giới hạn tối thiểu một phút.

Ví dụ: hãy tưởng tượng bạn vừa khởi chạy một ứng dụng web mới và bạn đang nhận được hàng trăm lượt đăng ký yêu cầu gửi email cho mỗi người dùng. Việc gửi email có thể mất nhiều thời gian (tương đối) nên bạn quyết định rằng bạn sẽ xử lý email kích hoạt thông qua các tác vụ.

Nếu bạn đang sử dụng cron, bạn cần đảm bảo rằng mỗi phút cron có thể xử lý tất cả các email cần được gửi đi. Nếu bạn có nhiều máy chủ, bây giờ bạn cần đảm bảo rằng bạn không gửi nhiều email kích hoạt cho cùng một người dùng - bạn cần một số loại đồng bộ hóa.

Với cần tây, bạn thêm một nhiệm vụ vào hàng đợi. Bạn có thể có một số công nhân trên mỗi máy chủ, vì vậy bạn đã mở rộng quy mô trước một cronjob. Bạn cũng có thể có một số máy chủ cho phép bạn mở rộng quy mô hơn nữa. Đồng bộ hóa được xử lý như một phần của 'hàng đợi'.

Bạn có thể sử dụng cần tây để thay thế cron nhưng đó không thực sự là công dụng chính của nó. Nó được sử dụng để tạo ra các nhiệm vụ không đồng bộ trên một cụm phân tán.

Và tất nhiên, cần tây có một danh sách lớn các tính năng mà cron không có.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.