2015-07-10 23 views
17

Tôi thấy một mô hình chung cho các dịch vụ mà chúng tôi cố gắng phát triển và tự hỏi liệu có các công cụ/thư viện không. Trong khi các công việc mặc định như được thảo luận trong tài liệu microservice là từ bản chất YÊU CẦU -> RESPONSE, công việc của chúng tôi là nhiều hay ít nhiệm vụ của nhiệm vụ bán vĩnh viễn.Làm thế nào để quản lý/cân bằng các công việc bán kiên trì trên các trường hợp dịch vụ

Ví dụ về các nhiệm vụ như vậy

  • Nghe trên hàng đợi thông điệp cho dữ liệu từ nguồn X và Y, tương quan dữ liệu mà đi vào và lưu nó trong Z.
  • Giữ một bộ đệm trong bộ nhớ để tính toán trung bình hoạt động trong 15 phút qua của dữ liệu mỗi lần nhập dữ liệu mới.

Hiện tại dịch vụ của chúng tôi được viết bằng PHP. Do chi phí của các quy trình PHP và các kết nối đến hàng đợi thông điệp, chúng tôi muốn có một quy trình dịch vụ đơn lẻ để xử lý nhiều công việc đó một cách đồng thời.

Một biểu đồ mà hy vọng minh họa các thiết lập mà chúng tôi có trong đầu của chúng tôi: Công nhân services_setup

  • Dịch vụ đang deamonized PHP script
  • Đối với Registry Service chúng tôi đang xem xét Zookeeper

Trong khi Zookeeper (và Curator) làm cân bằng tải, tôi không tìm thấy bất cứ thứ gì xung quanh việc phân phối các công việc vĩnh viễn (có thể cập nhật, có thể tháo rời và phải được gán lại khi một nhân viên chết)

trách nhiệm đề xuất của một Manager Ngành

  • Knows về việc
  • Knows về các dịch vụ mà có thể làm những công việc
  • có thể phân công công việc cho các dịch vụ
  • có thể gửi thông tin cập nhật công việc với các dịch vụ
  • Có thể giao lại công việc nếu một công nhân chết

Có thư viện/công cụ nào có thể giải quyết các vấn đề như vậy, và do đó có thể hoạt động với tư cách là Quản lý công việc không? Hay đây là một mô hình chống lớn và chúng ta có nên làm theo cách khác không?

Trả lời

10

Bạn nên xem Gearman.

Nó bao gồm một số client chỉ định công việc, một hoặc nhiều workers sẽ nhận và thực hiện công việc và server sẽ duy trì danh sách chức năng (dịch vụ) và công việc đang chờ xử lý. Nó sẽ giao lại công việc nếu một công nhân chết.

+0

Có, rất nhiều chức năng tôi muốn đã có trong một nhà môi giới thư (như bộ điều khiển). Tôi sẽ thử nó với RabbitMQ, sử dụng các thông báo như các công việc và cho phép các cá thể công nhân tìm nạp nhiều như họ muốn, nhưng mà không cần vuốt chúng. (Cho phép nói 20 việc làm cho mỗi công nhân). Sau đó tôi có thể sử dụng một lá cờ trong memcache hoặc để chỉ ra nếu một công việc nào đó được cập nhật/hủy bỏ, trong trường hợp đó nhân viên có thể hoàn thành (ACK) công việc và bất kỳ thay thế nào có thể được đăng trên hàng đợi như một công việc mới. –

+0

Âm thanh tốt. Bạn cũng có thể muốn kiểm tra Celery - nó trực tiếp tiêu thụ RabbitMQ, mặc dù tôi không chắc liệu họ có hỗ trợ cho PHP hay không. Tôi tìm thấy một danh sách các lựa chọn thay thế khác có thể thú vị: http://queues.io/ – Paras

5

Nhân viên của bạn có vẻ giống như dịch vụ (api-less). Vì vậy, yêu cầu của bạn có thể được thay đổi công như:

  • Knows về các dịch vụ triển khai
  • Knows về các nút mà có thể lưu trữ có dịch vụ
  • có thể triển khai dịch vụ cho các nút
  • thể [gửi thông tin cập nhật công việc với các dịch vụ] = triển khai lại các dịch vụ/gọi một số API trên các dịch vụ triển khai
  • có thể triển khai lại dịch vụ nếu dịch vụ hoặc nút chết

Nhìn vào Docker triển khai, chạy và quản lý các quy trình riêng biệt trên máy chủ.

0

RabbitMq là hàng đợi tin nhắn đơn giản dễ dàng thực hiện.

+0

Um thật lạ lùng tại sao tôi nhận được +100 cho điều này. Chỉ cần nói. Tôi đã có kế hoạch để làm một lời giải thích mặc dù nhiều hơn nhưng sau đó tôi thấy nhận xét của OP về 'Tôi sẽ thử nó với RabbitMQ' và tìm ra lý do tại sao họ đã tìm ra nó. – ArtisticPhoenix

+0

Các câu trả lời đã cố gắng khác không ở đâu gần là câu trả lời hay cho câu hỏi này. Tôi thành thật sẽ dành tất cả các điểm SO của tôi chỉ để xem câu trả lời hay cho câu hỏi này. Số lượng các giải pháp được đề xuất cho vấn đề này là quá lớn mà một cuộc khảo sát hợp lý sẽ có ý nghĩa và sẽ giúp nhiều người quan tâm đến loại giải pháp này. – Andrei

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