Tôi có một dịch vụ web đang chạy trên một cụm máy chủ. Dịch vụ web này thực hiện một số xử lý nội bộ và sau đó có thể thực hiện cuộc gọi đến dịch vụ bên ngoài chịu phí.Mẫu thiết kế đồng bộ hóa đồng bộ hóa tối ưu hóa
Tôi muốn đặt vào bộ nhớ đệm để nhận được yêu cầu giống hệt với dịch vụ (được đảm bảo), sau đó tôi không phải lặp lại quá trình xử lý, tiết kiệm thời gian/công suất xử lý và cả chi phí phát sinh trong phần bên ngoài của cuộc gọi dịch vụ.
Tuy nhiên, tôi đang đấu tranh để tìm ra cách để quản lý bộ nhớ đệm này khi tôi có những hạn chế sau
- Dịch vụ này đang chạy trên nhiều máy chủ web cho High Availability và khả năng mở rộng
- Yêu cầu có thể mất đến 5 giây để trả lời, nhưng trong thời gian đó, tôi có thể đã nhận được 2 hoặc 3 yêu cầu giống hệt khác.
Làm cách nào tôi có thể dừng thực hiện các cuộc gọi dịch vụ khác, cho đến khi cuộc gọi đầu tiên đã phản hồi (do đó có sẵn trong bộ nhớ cache), khi làm việc trong môi trường phân tán.
Tôi đã nghĩ đến việc đặt một mẫu ủy nhiệm trước và xây dựng một hàng đợi các yêu cầu giống hệt nhau trong proxy, để khi trở về đầu tiên, nó cũng có thể trả về cùng một phản hồi cho người khác. Đây có phải là mô hình chính xác hay có mô hình tương tranh tốt hơn liên quan đến tình huống này không?
cũng là các nhóm bên ngoài được nhóm, bạn có kiểm soát được không? nó có vẻ đại diện cho một mục tiêu tốt để bắt đầu, bạn có thể viết dịch vụ web caching của riêng bạn caching web ở phía trước của nó –
của nó không phải trong kiểm soát của tôi. Đó là một dịch vụ mà chúng tôi đang gọi từ một nhà cung cấp – Codemwnci
Như trong mọi trường hợp _cache_: Có thực sự chắc chắn rằng dịch vụ đó là _really_ không quốc tịch? I E. dịch vụ "FetchCustomerDetailById" không thể lưu vào bộ nhớ cache vì một "ChangeCustomerName" trung gian sẽ phải làm mất hiệu lực bộ nhớ cache của bạn. –