Tôi đang phát triển lại một hệ thống sẽ gửi tin nhắn qua http đến một trong số một số nhà cung cấp. Bản gốc là các script perl và có khả năng là sự tái phát triển cũng sẽ sử dụng perl.Để ngã ba hay không ngã ba?
Trong hệ thống cũ, có một số tập lệnh perl chạy cùng một lúc, năm cho mỗi nhà cung cấp. Khi một thông điệp được đưa vào cơ sở dữ liệu, một số chuỗi ngẫu nhiên (1-5) và nhà cung cấp đã được chọn để đảm bảo rằng không có thông báo nào được xử lý hai lần trong khi tránh phải khóa bảng/hàng. Ngoài ra, còn có trường "Vị trí hàng đợi công bằng" trong cơ sở dữ liệu để đảm bảo rằng thư gửi lớn không trì hoãn các lần gửi nhỏ đã xảy ra trong khi thư lớn được gửi.
Đôi khi, sẽ chỉ có một vài thư mỗi phút, nhưng vào những lúc khác, sẽ có một bãi chứa hàng trăm nghìn thư. Dường như với tôi như một sự lãng phí tài nguyên để tất cả các kịch bản chạy và kiểm tra các tin nhắn tất cả thời gian nên tôi đang cố gắng tìm ra nếu có cách nào tốt hơn, hoặc nếu cách cũ có thể chấp nhận được.
Suy nghĩ của tôi bây giờ nằm với ý tưởng có một tập lệnh chạy và dồn nhiều tiến trình con là cần thiết (tối đa một giới hạn) tùy thuộc vào lưu lượng truy cập, nhưng tôi không chắc cách tốt nhất để triển khai nó như vậy mà mỗi tin nhắn được xử lý chỉ một lần, trong khi hàng đợi công bằng được duy trì. Hiện tại, tôi đoán tốt nhất là kịch bản gốc cập nhật DB để chỉ ra quy trình con nào sẽ xử lý nó, tuy nhiên tôi lo ngại rằng điều này sẽ kết thúc kém hiệu quả hơn so với phương pháp ban đầu. Tôi có ít kinh nghiệm viết mã giả mạo (lần trước tôi làm nó khoảng 15 năm trước).
Bất kỳ suy nghĩ hoặc liên kết nào đến hướng dẫn về cách xử lý hàng đợi thông điệp tốt nhất!
Bạn đã xem Gearman hoặc bất kỳ máy chủ công việc nào khác không? – jshy