Tengo un servicio web que se ejecuta en un clúster de servidores. Este servicio web realiza algunos procesos internos, y luego puede hacer una llamada a un servicio externo que incurre en una tarifa.Optimistic Caching Concurrency Design Patrón
Quiero poner algo de almacenamiento en caché para que si recibo solicitudes idénticas al servicio (lo cual está garantizado), entonces no tengo que repetir el procesamiento, ahorrando tiempo de procesamiento/potencia y también el costo incurrido en la parte externa de la llamada de servicio.
Sin embargo, estoy luchando para encontrar la manera de gestionar este almacenamiento en caché cuando tenga las siguientes limitaciones
- el servicio se ejecuta en varios servidores web de alta disponibilidad y escalabilidad
- La solicitud puede tomar hasta a 5 segundos para responder, pero mientras tanto, puede haber recibido 2 o 3 solicitudes idénticas.
¿Cómo puedo retrasar la ejecución de las otras llamadas de servicio, hasta que la primera ha respondido (por lo tanto, disponible en la memoria caché), cuando se trabaja en un entorno distribuido.
He pensado en poner un patrón de proxy frontal y crear una cola de solicitudes idénticas dentro del proxy, de modo que cuando la primera vuelva, también pueda devolver la misma respuesta a las demás. ¿Es este el patrón correcto, o hay un mejor patrón de concurrencia que se ocupa de este escenario?
es el ws externo agrupado también, ¿tiene usted el control sobre él? parece que representa un buen objetivo para empezar, puede escribir su propio servicio web de caché contenedor frente a él –
no está en mi control. Es un servicio al que llamamos desde un proveedor – Codemwnci
Como en cada escenario _cache_: ¿Están realmente seguros de que el servicio es _realmente sin estado? Es decir. un servicio "FetchCustomerDetailById" no es cachable porque un intermedio "ChangeCustomerName" tendría que invalidar su caché. –