Pattern per la cache di risposta del servizio Web, ma utilizza solo la cache per quando l'archivio dati si interrompe o altrimenti viene eseguita la richiesta

0

Abbiamo un servizio web REST scritto in C # in ASP.NET MVC / WebAPI.

Quando l'archivio dati sottostante fallisce, questo può portare al nostro servizio completamente non disponibile, all'istante. Non esiste attualmente alcuna memorizzazione nella cache dei dati nel servizio. Stiamo esplorando i modelli di cache, tuttavia ho la sensazione che il nostro approccio non sarà convenzionale - o è quello che penso provando finora questi schemi.

Vogliamo:

  • Cache le risposte HTTP dal nostro servizio a una cache in memoria (come Redis).
  • Aggiorna la cache con tutte le richieste riuscite (200 OK).
  • Consenti alla cache di vivere indefinitamente, in modo che durante un'interruzione dell'archivio dati, continui a rispondere alle richieste restituendo l'ultima buona risposta dalla cache.
  • Utilizza la cache solo quando la richiesta all'archivio dati ha esito negativo, o un'altra c'è un altro errore che restituisce una risposta diversa da 200 OK al consumatore.

Si tratta di un approccio comune per la memorizzazione nella cache in un servizio Web o esiste un altro approccio più standard che potremmo impiegare per ottenere lo stesso effetto?

La principale differenza in questo approccio rispetto a quello che potrei considerare come un approccio di caching "normale" è che la risposta viene memorizzata nella cache per ogni richiesta corretta, ma il valore memorizzato nella cache viene effettivamente utilizzato e restituito solo quando una richiesta fallirebbe .

Vogliamo tante richieste di utilizzare i dati aggiornati, dato che i dati cambiano abbastanza frequentemente, motivo per cui il nostro approccio al caching non può essere solo "Memorizza cache per 10 minuti e restituisci la stessa risposta per ogni richiesta" . Questo inoltre non ci consentirebbe di respirare spazio per risolvere i problemi con il nostro archivio dati prima che la cache si esaurisse.

Sembra una buona idea per noi, perché questo ci permetterebbe di avere un po 'di respiro quando la nostra fonte di dati fallisce, ma mi chiedo se potrebbero esserci alcuni seri avvertimenti a questo approccio?

Grazie per le tue opinioni su questo approccio di memorizzazione nella cache.

    
posta Luke 06.04.2018 - 17:05
fonte

1 risposta

1

La cosa più vicina che può ancora scalare, sta usando il pattern "Circuit Breakers with Fallbacks". Controlla su Netflix's Hystrix link che è un'implementazione di tale modello

Ecco uno dei loro blog in cui spiegano i vantaggi generali link

    
risposta data 11.04.2018 - 23:54
fonte

Leggi altre domande sui tag