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
- 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?
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. –
Â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