Chúng tôi nhận được các cuộc gọi lại đồng thời với ứng dụng web của chúng tôi từ một nhà cung cấp và chúng tôi nghi ngờ nó khiến chúng tôi bị mất cập nhật vì chúng được xử lý cùng lúc trên các máy khác nhau.Làm thế nào tôi có thể xử lý hầu hết các công việc song song nhưng tuần tự hóa một tập con?
Chúng tôi cần phải tuần tự hóa quá trình xử lý các cuộc gọi đó nếu và chỉ khi chúng ảnh hưởng đến cùng một bản ghi người dùng.
Một đồng nghiệp của tôi đã đề xuất luồng AWS Kinesis nơi chúng tôi sử dụng ID người dùng làm khóa phân vùng. Ý tưởng là cùng một khóa phân vùng đặt bản ghi trong cùng một phân đoạn. Mỗi phân đoạn được xử lý bởi chỉ một công nhân duy nhất, và sẽ không có vấn đề tương tranh. Theo thiết kế, nó sẽ được đảm bảo rằng các bản ghi thuộc về cùng một người dùng không được xử lý song song. Giải pháp này quy mô và giải quyết vấn đề nhưng nó sẽ đặt chúng ta trở lại ít nhất là chạy nước rút.
Chúng tôi đang cố gắng tìm một giải pháp mà chúng tôi có thể triển khai nhanh hơn.
giải phápkhác, chúng tôi đã thảo luận cho đến nay:
- Đơn giản chỉ cần trì hoãn việc xử lý các callbacks, có khả năng một lượng thời gian ngẫu nhiên. Trong trường hợp này, vẫn có thể (mặc dù ít có khả năng hơn) đối với một số công nhân để xử lý công việc cho cùng một người dùng cùng một lúc.
- Bất kỳ hệ thống xếp hàng nào đều có lỗi mà chúng tôi bị hạn chế đối với một công nhân hoặc xử lý song song rủi ro hoặc giống như được nêu trong (1).
Chúng tôi đang ở trên ngăn xếp Rails với MySQL và thích AWS cho các giải pháp của chúng tôi.
Có giải pháp cho vấn đề này sẽ mang lại kết quả nhanh hơn chuyển sang Kinesis không?