2011-06-20 33 views
5

ngay bây giờ, chúng tôi có một máy chủ duy nhất có tab cronjob gửi email hàng ngày. Chúng tôi muốn quy mô máy chủ đó. Ứng dụng này là ứng dụng khung công tác zend tiêu chuẩn được triển khai trên máy chủ centos trong đám mây amazon.Chia tỷ lệ cronjob trên nhiều máy chủ

Chúng tôi đã quản lý cân bằng tải, quản lý nội dung và triển khai quản lý. Tuy nhiên, cronjob vẫn là một vấn đề đối với chúng tôi, vì chúng tôi cần phải được cấp một số công việc chỉ được thực hiện một lần.

Ví dụ: cronjob email hàng ngày chỉ được thực hiện một lần bởi một máy chủ duy nhất. Tôi đang tìm kiếm phương pháp tốt nhất để cấp cho người nhận chỉ một máy chủ sẽ thực hiện nó chỉ một lần.

Tôi đang suy nghĩ về 2 giải pháp, nhưng tôi đã tự hỏi liệu có ai khác có cùng vấn đề hay không.

  1. Làm cho một trong các máy chủ "chính", người chỉ gửi email hàng ngày. Đó sẽ là một vấn đề, nếu máy chủ bị trục trặc, và nói chung chúng tôi không muốn có một máy chủ "đặc biệt". Nó cũng có nghĩa là chúng ta sẽ cần phải theo dõi máy chủ nào là chủ.
  2. Có hàng đợi các tác vụ theo lịch được thực hiện. Mỗi máy chủ mở hàng đợi đó và xem những nhiệm vụ cần thực hiện. Máy chủ đầu tiên "lấy" nhiệm vụ, sẽ làm nhiệm vụ trước và đánh dấu nó là xong. Tôi đã nhìn vào dịch vụ xếp hàng đơn giản amazon như một giải pháp cho hàng đợi.

Cả hai giải pháp này đều có ưu điểm và nhược điểm, và tôi đã tự hỏi nếu có ai đó nghĩ về người khác có thể giúp chúng tôi ở đây.

+1

Điều này có thể được phục vụ tốt hơn trên ServerFault? –

Trả lời

5

Khi bạn cần phải mở rộng ra các công việc cron, bạn nên sử dụng một người quản lý công việc như Gearman

+1

Bạn có thể sử dụng PHP với bộ điều khiển. – datasage

+0

cảm ơn, tôi thấy thư viện php gốc. trông có vẻ thú vị. – aporat

+0

+1 cho Gearman, nó cũng được tích hợp với PHP. Chúng tôi sử dụng nó cho nhiều giao tiếp đa nền tảng, ETL giữa các cơ sở dữ liệu để di chuyển dữ liệu, gửi email, theo dõi hoạt động của người dùng và hơn thế nữa. Chỉ bắt được tôi thấy rằng trong khi bạn có thể có nhiều khách hàng Gearman đang chạy, thì quy trình máy chủ Gearman chính không quy mô, vì vậy bạn sẽ phải chạy nhiều máy chủ, có thể gọi các phân loại khách hàng khác nhau có quyền truy cập vào một số công việc và không phải những người khác. – iandouglas

0

Tôi gặp vấn đề tương tự. Những gì tôi đã làm đã chết đơn giản.

  1. Tôi chia nhỏ phiên bản EC2 rẻ nhất trên AWS.
  2. Tôi đã tạo cronjob chỉ trên máy chủ này.
  3. Công việc cron chỉ chạy công việc mà chỉ yêu cầu đơn giản tới điểm cuối/api của tôi (tức là api.mydomain.com).
  4. Trên api của tôi, tôi chỉ có một tuyến đường xem cho các yêu cầu đặc biệt sẽ chạy công việc tôi muốn. Vì vậy, về cơ bản, tất cả những gì tôi đang làm thay vì chạy tác vụ bằng cách sử dụng cronjob, im chạy tác vụ thông qua một yêu cầu http.

Tôi hy vọng điều đó có ý nghĩa! Bây giờ nó không quan trọng bao nhiêu máy chủ bạn có, nó sẽ chỉ quy mô! Ngoài ra, chức năng duy nhất của máy chủ cronjob của bạn là chạy các công việc đơn giản chết để gửi yêu cầu, không có gì hơn.

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