Freigeben über


Implementieren des Caches der Ebene 2

Der Daten-API-Generator unterstützt lange unterstützte Cache der Ebene 1 (L1) im Arbeitsspeicher und cachebezogene HTTP-Anforderungsheader wie no-store, no-cacheund only-if-cached um das Cacheverhalten zu beeinflussen.

Der Cache der Ebene 2 (L2) erweitert die Zwischenspeicherung über den lokalen Prozess hinaus, indem eine verteilte Cacheebene hinzugefügt wird. Mit L2, zwischengespeicherten Ergebnissen können in mehreren DAB-Instanzen wiederverwendet werden und einzelne Containerneustarts überleben, wodurch zustandslose Bereitstellungen auf alle richtigen Weise weniger zustandslos wirken.

Vorteile des Caches der Ebene 2

Verwenden Sie den Cache der Ebene 2, wenn Sie Folgendes ausführen möchten:

  • Freigeben zwischengespeicherter Ergebnisse für skalierte DAB-Instanzen
  • Reduzieren von Datenbank-Roundtrips für wiederholte Lesevorgänge
  • Halten Sie zustandslose Container warm, nachdem sie wiederverwendet oder erneut bereitgestellt wurden.
  • Verbessern der Leistung für Leselasten
  • Teilnahme am Namespacecache mit Partitionen

Konfigurieren von Einstellungen für den Laufzeitcache

Der Cache der Ebene 2 ist global unter runtime.cache. Der Laufzeitcacheblock ermöglicht das Zwischenspeichern, legt die Standardzeit auf Live (TTL) fest und konfiguriert den verteilten Cacheanbieter.

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

Laufzeiteigenschaften

Eigentum Beschreibung
enabled Aktiviert die Cacheunterstützung global.
ttl-seconds Legt die Standardcachezeit in Sekunden fest.
level-2.enabled Aktiviert die verteilte Cacheebene.
level-2.provider Wählt den verteilten Cacheanbieter aus. Derzeit redis wird unterstützt.
level-2.connection-string Verbindungszeichenfolge für die Redis-Instanz.
level-2.partition Optionaler Namespace für Redis-Schlüssel und den Backplane-Kanal. Nur Container, die dieselbe Partition verwenden, verwenden denselben verteilten Cacheraum.

Konfigurieren des entitätsspezifischen Cacheverhaltens

Entitäten können das globale Cacheverhalten außer Kraft setzen. Verwenden Sie den Entitätsblock cache , um das Zwischenspeichern zu aktivieren, einen benutzerdefinierten TTL festzulegen und die Cacheebene auszuwählen.

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

Die cache.level-Eigenschaft.

Dient cache.level zum Steuern, welche Cacheebenen eine Entität verwendet.

Wert Beschreibung
L1 Nur Im Arbeitsspeichercache. Schnell und lokal für den aktuellen DAB-Prozess.
L1L2 Im Arbeitsspeicher plus verteilter Cache. Diese Ebene ist die Standardeinstellung für zwischengespeicherte Entitäten.

Wenn L2 dies nicht global aktiviert ist, verhält sich eine Entität, die mit L1L2 dem Verhalten L1konfiguriert ist.

Funktionsweise von L1L2

Tipp

TL; DRL1L2 = Anforderung → L1 → L2 → Datenbank → L2 → L1 → Antwort

Standardmäßig verwendet eine Entität mit aktivierter Zwischenspeicherung ebene L1L2.

  • L1 ist der speicherinterne Cache pro Prozess.
  • L2 ist die verteilte Cacheebene, derzeit Redis und ein Backplane für die instanzübergreifende Kohärenz.

Mit L1L2, eine Cache-Nachschlagevorgang zuerst überprüft L1. Bei einem L1 Fehler wird überprüft L2 , ob die Zwischenspeicherung der Ebene 2 global aktiviert und konfiguriert ist. Wenn der Eintrag in beiden Ebenen nicht gefunden wird, führt DAB die Datenbankabfrage aus. Das Ergebnis wird dann in beiden L1 und L2.

Dies bedeutet:

  • Zukünftige Anforderungen für dieselbe Instanz werden von der lokalen Instanz bereitgestellt. L1
  • Anforderungen für andere Instanzen können auslesen L2 und den Eintrag in eigene Instanzen höher stufen L1
  • Wenn ein Container neu gestartet wird, kann ein L1 Treffer, gefolgt von einem L2 Treffer, trotzdem eine Datenbank roundtrip vermeiden.

Diese Kombination bietet Ihnen einen warm verteilten Cache über skalierte oder wiederverwendete Instanzen.

Redis-Unterstützung

Redis ist der aktuelle Anbieter für den Cache der Ebene 2. Es eignet sich gut für dieses Szenario, da es Folgendes unterstützt:

  • Gemeinsam genutzter Zugriff über mehrere DAB-Instanzen hinweg
  • Schlüsselablauf für TTL-basierte Zwischenspeicherung
  • Schnelle Lese- und Schreibvorgänge für Workloads mit hohem Durchsatz
  • Backplane-Koordination über Instanzen hinweg

Partitionierte Cacheplätze

Verwenden Sie die optionale partition Einstellung, um verteilte Cacheaktivitäten zu isolieren. DAB verwendet den Partitionswert für den Namespace Redis-Schlüssel und den Backplane-Kanal. Nur Container, die dieselbe Partition gemeinsam nutzen, nehmen am gleichen verteilten Cachespeicherplatz teil.

Diese Einstellung ist nützlich, wenn Sie:

  • Trennen des Produktions- und Nichtproduktionsverkehrs
  • Isolieren von Mandanten oder Umgebungen
  • Verhindern, dass nicht verknüpfte Dienste zwischengespeicherte Einträge freigeben

Siehe auch