Condividi tramite


Implementare la cache di livello 2

Generatore API dati supportato a lungo livello 1 (L1) nella cache e intestazioni di richiesta HTTP correlate alla cache, ad esempio no-store, no-cachee only-if-cached per influenzare il comportamento della cache.

La cache di livello 2 (L2) estende la memorizzazione nella cache oltre il processo locale aggiungendo un livello di cache distribuita. Con L2, i risultati memorizzati nella cache possono essere riutilizzati in più istanze di DAB e possono sopravvivere ai singoli riavvii dei contenitori, in modo da rendere le distribuzioni senza stato meno in tutti i modi giusti.

Vantaggi della cache di livello 2

Usare la cache di livello 2 quando si vuole:

  • Condividere i risultati memorizzati nella cache tra istanze di DAB con scalabilità orizzontale
  • Ridurre i round trip del database per letture ripetute
  • Mantenere i contenitori senza stato ad accesso frequente dopo il riciclo o la ridistribuitura
  • Migliorare le prestazioni per carichi di lavoro con elevato utilizzo di lettura
  • Partecipazione alla cache dello spazio dei nomi con partizioni

Configurare le impostazioni della cache di runtime

La cache di livello 2 è configurata a livello globale in runtime.cache. Il blocco cache di runtime abilita la memorizzazione nella cache, imposta la durata predefinita (TTL) e configura il provider di cache distribuita.

{
  "runtime": {
    "cache": {
      "enabled": true,
      "ttl-seconds": 30,
      "level-2": {
        "enabled": true,
        "provider": "redis",
        "connection-string": "localhost:6379",
        "partition": "prod-api"
      }
    }
  }
}

Proprietà di runtime

Proprietà Descrizione
enabled Abilita il supporto della cache a livello globale.
ttl-seconds Imposta la durata predefinita della cache in secondi.
level-2.enabled Attiva il livello cache distribuita.
level-2.provider Seleziona il provider di cache distribuita. Attualmente redis è supportato.
level-2.connection-string Stringa di connessione per l'istanza di Redis.
level-2.partition Spazio dei nomi facoltativo per le chiavi Redis e il canale backplane. Solo i contenitori che usano la stessa partizione condividono lo stesso spazio della cache distribuita.

Configurare il comportamento della cache specifico dell'entità

Le entità possono eseguire l'override del comportamento della cache globale. Usare il blocco di entità cache per abilitare la memorizzazione nella cache, impostare un TTL personalizzato e scegliere il livello di cache.

{
  "entities": {
    "Products": {
      "source": "dbo.Products",
      "cache": { "enabled": true, "ttl-seconds": 120, "level": "L1L2" }
    },
    "Orders": {
      "source": "dbo.Orders",
      "cache": { "enabled": true, "level": "L1" }
    }
  }
}

Proprietà cache.level

Usare cache.level per controllare i livelli di cache usati da un'entità.

Valore Descrizione
L1 Solo cache in memoria. Veloce e locale per il processo DAB corrente.
L1L2 In memoria più cache distribuita. Questo livello è l'impostazione predefinita per le entità memorizzate nella cache.

Se L2 non è abilitato a livello globale, un'entità configurata con L1L2 si comporta come L1.

Funzionamento di L1L2

Suggerimento

TL; DRL1L2 = Request → L1 → L2 → database → L2 → L1 → Response

Per impostazione predefinita, un'entità con memorizzazione nella cache abilitata usa il livello L1L2.

  • L1 è la cache in memoria per processo.
  • L2 è il livello cache distribuita, attualmente Redis, più un backplane per coerenza tra istanze.

Con L1L2, una ricerca nella cache controlla L1innanzitutto . In caso L1 di mancato appuntamento, verifica L2 se la memorizzazione nella cache di livello 2 è abilitata e configurata a livello globale. Se la voce non viene trovata in entrambi i livelli, DAB esegue la query di database. Il risultato viene quindi archiviato sia in che L2in L1 .

Ciò significa che:

  • Le richieste future nella stessa istanza vengono gestite da locale L1
  • Le richieste su altre istanze possono leggere L2 e promuovere l'immissione nel proprio L1
  • Se un contenitore viene riavviato, un L1 errore seguito da un L2 hit può comunque evitare un round trip del database

Questa combinazione offre una cache distribuita ad accesso frequente tra istanze con scalabilità orizzontale o riciclata.

Compatibilità con Redis

Redis è il provider corrente per la cache di livello 2. È particolarmente adatto per questo scenario perché supporta:

  • Accesso condiviso tra più istanze DAB
  • Scadenza della chiave per la memorizzazione nella cache basata su TTL
  • Letture e scritture veloci per carichi di lavoro con velocità effettiva elevata
  • Coordinamento del backplane tra istanze

Spazi cache partizionati

Usare l'impostazione facoltativa partition per isolare l'attività della cache distribuita. DAB usa il valore della partizione per le chiavi Redis dello spazio dei nomi e il canale backplane. Solo i contenitori che condividono la stessa partizione partecipano allo stesso spazio della cache distribuita.

Questa impostazione è utile quando si vuole:

  • Separare il traffico di produzione e non di produzione
  • Isolare tenant o ambienti
  • Impedire ai servizi non correlati di condividere voci memorizzate nella cache

Vedere anche