Delen via


Cache op niveau 2 implementeren

Data API Builder heeft lang ondersteund niveau 1 (L1) in-memory cache en cachegerelateerde HTTP-aanvraagheaders zoals no-store, no-cacheen only-if-cached om het cachegedrag te beïnvloeden.

Cache op niveau 2 (L2) breidt caching uit buiten het lokale proces door een gedistribueerde cachelaag toe te voegen. Met L2, in de cache opgeslagen resultaten kunnen opnieuw worden gebruikt in meerdere DAB-exemplaren en kunnen afzonderlijke containerherstarts overleven, waardoor stateless implementaties op de juiste manieren minder stateless voelen.

Voordelen van cache op niveau 2

Gebruik de cache op niveau 2 als u het volgende wilt doen:

  • Resultaten in cache delen in uitgeschaalde DAB-exemplaren
  • Retouren van databases verminderen voor herhaalde leesbewerkingen
  • Staatloze containers warm houden na recyclen of opnieuw implementeren
  • Prestaties verbeteren voor leesintensieve werkbelastingen
  • Deelname van naamruimtecache aan partities

Instellingen voor runtimecache configureren

De cache op niveau 2 wordt globaal geconfigureerd onder runtime.cache. Met het cacheblok voor runtime kunt u opslaan in cache, de standaard time to live (TTL) instellen en de gedistribueerde-cacheprovider configureren.

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

Runtime-eigenschappen

Vastgoed Beschrijving
enabled Hiermee schakelt u ondersteuning voor cache wereldwijd in.
ttl-seconds Hiermee stelt u de standaardcache time-to-live in seconden in.
level-2.enabled Hiermee schakelt u de gedistribueerde cachelaag in.
level-2.provider Selecteert de gedistribueerde cacheprovider. Momenteel redis wordt dit ondersteund.
level-2.connection-string Verbindingsreeks voor het Redis-exemplaar.
level-2.partition Optionele naamruimte voor Redis-sleutels en het backplane-kanaal. Alleen containers die dezelfde partitie gebruiken, delen dezelfde gedistribueerde cacheruimte.

Gedrag van entiteitsspecifieke cache configureren

Entiteiten kunnen het gedrag van de globale cache overschrijven. Gebruik het entiteitsblok cache om caching in te schakelen, een aangepaste TTL in te stellen en het cacheniveau te kiezen.

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

De eigenschap cache.level

Gebruik cache.level dit om te bepalen welke cachelagen een entiteit gebruikt.

Waarde Beschrijving
L1 Alleen cache in het geheugen. Snel en lokaal naar het huidige DAB-proces.
L1L2 In-memory plus gedistribueerde cache. Dit niveau is de standaardinstelling voor entiteiten in de cache.

Als L2 deze niet globaal is ingeschakeld, gedraagt een entiteit die is geconfigureerd als L1L2L1.

Hoe L1L2 werkt

Aanbeveling

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

Een entiteit waarvoor caching is ingeschakeld, maakt standaard gebruik van niveau L1L2.

  • L1 is de cache per proces in het geheugen.
  • L2 is de gedistribueerde cachelaag, momenteel Redis, plus een backplane voor coherentie tussen exemplaren.

Met L1L2 controleert een cachelookup eerst L1. Bij een L1 miss wordt gecontroleerd L2 of caching op niveau 2 globaal is ingeschakeld en geconfigureerd. Als de vermelding niet in een van beide lagen wordt gevonden, voert DAB de databasequery uit. Het resultaat wordt vervolgens opgeslagen in zowel L1 als L2.

Dat betekent:

  • Toekomstige aanvragen op hetzelfde exemplaar worden uitgevoerd vanuit het lokale L1
  • Aanvragen op andere exemplaren kunnen de vermelding in hun eigen exemplaar lezen L2 en promoveren L1
  • Als een container opnieuw wordt opgestart, kan een L1 miss gevolgd door een L2 hit nog steeds een retour van een database voorkomen

Deze combinatie biedt u een warme gedistribueerde cache over uitgeschaalde of gerecyclede exemplaren.

Ondersteuning voor Redis

Redis is de huidige provider voor cache op niveau 2. Het is geschikt voor dit scenario, omdat het ondersteuning biedt voor:

  • Gedeelde toegang tussen meerdere DAB-exemplaren
  • Sleutelverlooptijd voor opslaan in cache op basis van TTL
  • Snelle lees- en schrijfbewerkingen voor workloads met hoge doorvoer
  • Backplane-coördinatie tussen instanties

Gepartitioneerde cacheruimten

Gebruik de optionele partition instelling om gedistribueerde cacheactiviteit te isoleren. DAB gebruikt de partitiewaarde voor naamruimte Redis-sleutels en het backplane-kanaal. Alleen containers die dezelfde partitie delen, nemen deel aan dezelfde gedistribueerde cacheruimte.

Deze instelling is handig als u het volgende wilt doen:

  • Productie- en niet-productieverkeer scheiden
  • Tenants of omgevingen isoleren
  • Voorkomen dat niet-gerelateerde services items in de cache delen

Zie ook