Ana içeriğe geç

Caching Yapılandırması

vNext üç bağımsız cache katmanı çalıştırır: ComponentCache (workflow/task/schema/function/view/extension/mapping tanımları), InstanceFunctionCache (data/view/schema gibi built-in function yanıtları) ve StateFunctionCache (state fonksiyonu long-poll yanıtları). Üçü de Orchestration host'ta yapılandırılır.

ComponentCache

Tanım bileşenleri için iki katmanlı önbellek: paylaşımlı (L2, Redis) ve process-içi (L1) envelope cache. L1, aynı Redis anahtarlarını kullanır ve generation token'a göre otomatik geçersizleşir — publish, bileşenin token'ını bump eder ve bu, o bileşene ait tüm eski çözümlemeleri (L1 dahil) anında erişilemez kılar.

{
"ComponentCache": {
"L1Enabled": true,
"L1SizeLimitMb": 64,
"GenerationMemoSeconds": 5,
"FullVersionTtlSeconds": 1800,
"GenerationTtlSeconds": 3600,
"ResolutionTtlSeconds": 3600,
"NegativeTtlSeconds": 30,
"PurgeLegacyKeysOnPublish": true
}
}
AnahtarTipVarsayılanAçıklama
L1EnabledbooleantrueProcess-içi envelope cache'i (dağıtılmış cache'in önünde) açar/kapatır. Kapatılırsa her erişim bir L2 okumasına düşer
L1SizeLimitMbinteger64L1'in bellek bütçesi (MB); tüm component tipleri arasında paylaşılır. Bütçe aşıldığında LRU tahliyesi yapılır (hata değil, L2'den yeniden okuma)
GenerationMemoSecondsinteger5Generation token'ının process içinde memoize edildiği süre (0–60 aralığı; 0 = kapalı). Aşağıdaki "Generation memo penceresi" bölümüne bakın
FullVersionTtlSecondsinteger1800Immutable full-version body'lerin TTL'i — yalnızca bellek sınırı, içerik hiç değişmediği için tazelik etkisi yoktur
GenerationTtlSecondsinteger3600Generation token'ının TTL'i — bir publish'in token yazımı başarısız olursa son çare yenileme mekanizması
ResolutionTtlSecondsinteger3600Sürüm çözümleme (latest, 1, 1.2) girdilerinin TTL'i — doğruluk değil, çöp toplama; generation bump zaten eski girdileri erişilemez kılar
NegativeTtlSecondsinteger30"Eşleşen sürüm yok" negatif yanıtlarının TTL'i — kısa tutulur ki yeni bir publish hemen görünür olsun
PurgeLegacyKeysOnPublishbooleantruePublish sırasında eski (:latest, :artifact:{version}) anahtar düzeninin de temizlenmesini sağlar — rolling deployment sırasında eski build'i çalıştıran pod'ların artık okumadığı anahtarlar

L1, generation-anahtarlı in-process envelope cache'idir; publish'te token bump ile bayat girişler erişilemez hale gelir — ayrı bir invalidation protokolü yoktur.

Generation memo penceresi

GenerationMemoSeconds, her sürüm çözümlemesinde gereken tek kalan uzak okumayı (generation token) process içinde N saniye boyunca memoize eder. Bunun bedeli, publish eden pod dışındaki pod'ların ≤N saniye boyunca eski generation'ı sunabilmesidir:

YüzeyDavranış
Publish eden podAnında taze — bump işlemi kendi memo'sunu önce siler
Diğer pod'larBump'tan sonra ≤N saniye eski generation'ı sunabilir
Pinned full version'lar (1.0.0-pkg.*)Etkilenmez — immutable body, generation'a bağlı değil
Çalışan instance'larEtkilenmez — kendi FlowVersion'larına pinlenmiştir

CI/CD kuralı: son publish çağrısından sonra N + margin (1–2 sn) kadar bekleyin, ardından smoke test / trafik geçişi / "release live" ilanı yapın. Rollback runbook'unda da aynı pencere geçerlidir — geri alınan bir sürüm diğer pod'larda ≤N saniye daha sunulabilir. GenerationMemoSeconds: 0 anlık cluster-wide görünürlük sağlar (eski davranış).

Manuel geçersizleştirme için:

POST /api/v1/utilities/invalidate

InstanceFunctionCache

Built-in data/view/schema function'larının yanıtlarını caché'ler.

{
"InstanceFunctionCache": {
"DefaultTtlSeconds": 60
}
}
AnahtarTipVarsayılanAçıklama
DefaultTtlSecondsinteger60Built-in function yanıtlarının varsayılan TTL'i

Flow tanımı, kendi built-in function'ları için bu değeri override edebilir:

{
"attributes": {
"config": {
"functionCache": { "ttlSeconds": 120 }
}
}
}

Ayrıntı için bkz. Workflow Bileşeni.

StateFunctionCache

State fonksiyonunun (long-poll) yanıtlarını caché'ler.

{
"StateFunctionCache": {
"Enabled": true,
"TtlSeconds": 60,
"ActiveSubflowTtlMilliseconds": 500
}
}
AnahtarTipVarsayılanAçıklama
EnabledbooleantrueKill-switch — false her istekte tam değerlendirme yapar
TtlSecondsinteger60Cache girişinin TTL'i; client long-poll timeout'u ile aynı değerde tutulur
ActiveSubflowTtlMillisecondsinteger500Aktif bir SubFlow korelasyonu olan parent instance'ların poll yanıtları için kısa pencereli snapshot cache — parent-only fingerprint ETag ile doğrulanır, bir subflow değişikliği anında geçersizleştirir

Aktif subflow'lu bir parent'ta poll, hem 304 fast-path'i hem de normal cache'i bypass ederdi (her poll'de tam parent yükü + canlı subflow gezinmesi). ActiveSubflowTtlMilliseconds bu pencerede kısa süreli bir snapshot tutar; aynı pencerede 304 artık mümkündür.

İlgili