Menerapkan cache tingkat 2

Penyusun API Data mendukung lama cache dalam memori Level 1 (L1) dan header permintaan HTTP terkait cache seperti no-store, no-cache, dan only-if-cached untuk memengaruhi perilaku cache.

Cache Tingkat 2 (L2) memperluas penembolokan di luar proses lokal dengan menambahkan lapisan cache terdistribusi. Dengan L2, hasil yang di-cache dapat digunakan kembali di beberapa instans DAB dan dapat bertahan dari mulai ulang kontainer individual, yang membuat penyebaran stateless terasa kurang stateless dengan semua cara yang tepat.

Manfaat cache tingkat 2

Gunakan cache tingkat 2 saat Anda ingin:

  • Bagikan hasil cache di seluruh instans DAB yang diskalakan
  • Mengurangi perjalanan pulang pergi database untuk bacaan berulang
  • Jaga agar kontainer stateless tetap hangat setelah daur ulang atau sebarkan ulang
  • Meningkatkan performa untuk beban kerja baca-berat
  • Partisipasi cache namespace dengan partisi

Mengonfigurasi pengaturan cache runtime

Cache Tingkat 2 dikonfigurasi secara global di bawah runtime.cache. Blok cache runtime memungkinkan penembolokan, mengatur waktu hidup default (TTL), dan mengonfigurasi penyedia cache terdistribusi.

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

Properti runtime

Harta benda Deskripsi
enabled Mengaktifkan dukungan cache secara global.
ttl-seconds Mengatur cache default time-to-live dalam hitungan detik.
level-2.enabled Mengaktifkan tingkat cache terdistribusi.
level-2.provider Memilih penyedia cache terdistribusi. Saat ini redis didukung.
level-2.connection-string String koneksi untuk instans Redis.
level-2.partition Namespace opsional untuk kunci Redis dan saluran backplane. Hanya kontainer yang menggunakan partisi yang sama yang berbagi ruang cache terdistribusi yang sama.

Mengonfigurasi perilaku cache khusus entitas

Entitas dapat mengambil alih perilaku cache global. Gunakan blok entitas cache untuk mengaktifkan penembolokan, mengatur TTL kustom, dan memilih tingkat cache.

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

Properti cache.level

Gunakan cache.level untuk mengontrol tingkat cache mana yang digunakan entitas.

Nilai Deskripsi
L1 Hanya cache dalam memori. Cepat dan lokal ke proses DAB saat ini.
L1L2 Dalam memori ditambah cache terdistribusi. Tingkat ini adalah default untuk entitas yang di-cache.

Jika L2 tidak diaktifkan secara global, entitas yang dikonfigurasi dengan L1L2 perilaku sebagai L1.

Cara kerja L1L2

Petunjuk / Saran

TL; DRL1L2 = Meminta → L1 → L2 → database → L2 → L1 → Respons

Secara bawaan, entitas dengan penyimpanan sementara diaktifkan menggunakan tingkat L1L2.

  • L1 adalah cache dalam memori per proses.
  • L2 adalah lapisan cache terdistribusi, saat ini Redis, ditambah backplane untuk koherensi lintas instans.

Dengan L1L2, pencarian cache pertama-tama memeriksa L1. L1 Jika tidak ada, ini memeriksa apakah L2 penembolokan tingkat 2 diaktifkan dan dikonfigurasi secara global. Jika entri tidak ditemukan di salah satu lapisan, DAB menjalankan kueri database. Hasilnya kemudian disimpan di dan L1L2.

Itu berarti:

  • Permintaan di masa mendatang pada instans yang sama dilayani dari lokal L1
  • Permintaan pada instans lain dapat membaca dari L2 dan mempromosikan entri ke dalam instans mereka sendiri L1
  • Jika kontainer dimulai ulang, kesalahan L1 diikuti oleh L2 hit masih dapat menghindari perjalanan pulang pergi database

Kombinasi ini memberi Anda cache terdistribusi hangat di seluruh instans yang diskalakan atau didaur ulang.

Dukungan Redis

Redis adalah penyedia saat ini untuk cache tingkat 2. Sangat cocok untuk skenario ini karena mendukung:

  • Akses bersama di beberapa instans DAB
  • Kedaluwarsa kunci untuk penembolokan berbasis TTL
  • Membaca dan menulis cepat untuk beban kerja throughput tinggi
  • Koordinasi backplane di seluruh instans

Spasi cache yang dipartisi

Gunakan pengaturan opsional partition untuk mengisolasi aktivitas cache terdistribusi. DAB menggunakan nilai partisi untuk namespace kunci Redis dan saluran backplane. Hanya kontainer yang berbagi partisi yang sama yang berpartisipasi dalam ruang cache terdistribusi yang sama.

Pengaturan ini berguna ketika Anda ingin:

  • Memisahkan lalu lintas produksi dan nonproduksi
  • Mengisolasi penyewa atau lingkungan
  • Mencegah layanan yang tidak terkait berbagi entri yang di-cache

Baca juga