Steg 9 (R4): unified migrate-corpus.mjs --write over engineering/governance/ infrastructure/security. 327 filer mutert, verified=null, prosa byte-identisk (fra første ## seksjon), advisor urørt (0 endringer). To applier-fixes oppdaget under kjøring (TDD, RED→GREEN): - insertHeaderFields: anker faller nå tilbake når en meta-linje selv passerer 500B (2 filer pakket et avsnitt i **Status:** → Type/Source landet utenfor scan-vinduet, applierens post-write-assertion fanget + restaurerte). - normalizeStaleVerified: fjerner nå ALLE stale non-date **Verified:** i 500B-vinduet, inkl. stray body-dup rett under --- (9 mlops-genaiops-filer var ellers falskt "verified"/fresh, droppet fra worklist). Operatør-godkjent utvidelse av carve-out; kun stray metadata-linjer, aldri prosa. test-transform-criterion: precondition oppdatert til post-migrasjons-sannhet (fila bærer nå Source). Suite 728/728 grønn.
539 lines
No EOL
22 KiB
Markdown
539 lines
No EOL
22 KiB
Markdown
# RAG Caching and Performance Optimization
|
||
|
||
**Last updated:** 2026-06-19 | Verified: MCP 2026-06-19
|
||
**Status:** GA
|
||
**Category:** RAG Architecture & Semantic Search
|
||
**Type:** reference
|
||
**Source:** https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview
|
||
|
||
---
|
||
|
||
## Innhold
|
||
|
||
- [Introduksjon](#introduksjon)
|
||
- [Kjernekomponenter](#kjernekomponenter)
|
||
- [Arkitekturmønstre](#arkitekturmønstre)
|
||
- [Beslutningsveiledning](#beslutningsveiledning)
|
||
- [Integrasjon med Microsoft-stakken](#integrasjon-med-microsoft-stakken)
|
||
- [Offentlig sektor (Norge)](#offentlig-sektor-norge)
|
||
- [Kostnad og lisensiering](#kostnad-og-lisensiering)
|
||
- [For arkitekten (Cosmo)](#for-arkitekten-cosmo)
|
||
- [Kilder og verifisering](#kilder-og-verifisering)
|
||
|
||
## Introduksjon
|
||
|
||
Caching er en kritisk optimaliseringsstrategi for RAG-applikasjoner (Retrieval-Augmented Generation) som kan dramatisk redusere både latency og kostnader. I typiske RAG-scenarier er kall til LLM-modeller ofte den mest kostbare og tidkrevende operasjonen, spesielt når store mengder kontekstdata og chat history sendes med hver request. En godt designet caching-strategi kan redusere antall LLM-invocations med opptil 90% for high-traffic scenarier med repeterende eller semantisk like queries.
|
||
|
||
Multi-layer caching-tilnærmingen dekker flere nivåer i RAG-arkitekturen: result caching (hele LLM-responser), retrieval caching (knowledge fragments fra vektorsøk), embedding caching (forhåndsberegnede vektorrepresentasjoner), og semantic caching (semantisk like prompts). Hver av disse lagene adresserer ulike aspekter av ytelse og kostnadsoptimalisering.
|
||
|
||
Microsoft-stakken tilbyr flere tjenester optimalisert for AI-workloads: Azure Cache for Redis (traditional og semantic caching), Azure Cosmos DB (semantic cache med vektorsøk), Azure AI Search (built-in caching av search results), og Azure API Management (semantic caching for LLM APIs). Valget av løsning avhenger av cache-type, scale-requirements, og compliance-krav.
|
||
|
||
## Kjernekomponenter
|
||
|
||
### Multi-layer caching-strategi
|
||
|
||
| Cache Layer | Formål | Typisk Hit Rate | Latency Impact |
|
||
|------------|--------|-----------------|----------------|
|
||
| **Result caching** | Cache hele LLM-responser for identiske/semantisk like queries | 30-60% (high-traffic) | -80% til -95% |
|
||
| **Retrieval caching** | Cache knowledge fragments fra vector search | 40-70% | -50% til -70% |
|
||
| **Embedding caching** | Cache forhåndsberegnede embeddings | 60-90% | -30% til -50% |
|
||
| **Model output caching** | Cache intermediate model outputs | 20-40% | -40% til -60% |
|
||
|
||
**Verified** (Microsoft Learn - Application design for AI workloads)
|
||
|
||
### Cache Key Components
|
||
|
||
Effektive cache keys må inkludere:
|
||
- **Tenant/User identity** — For multi-tenant security
|
||
- **Policy context** — RBAC og data access policies
|
||
- **Model version** — Unngå stale responses ved model updates
|
||
- **Prompt version** — Track prompt engineering changes
|
||
- **Context window** — Chat history for contextual relevance
|
||
|
||
**Verified** (Microsoft Learn - Multi-layer caching strategies)
|
||
|
||
### Time-to-Live (TTL) Policies
|
||
|
||
| Data Type | Anbefalt TTL | Begrunnelse |
|
||
|-----------|--------------|-------------|
|
||
| Static content (dokumentasjon, policies) | 24-72 timer | Sjelden endring |
|
||
| Dynamic content (dashboard data) | 5-30 minutter | Moderate freshness-krav |
|
||
| User-specific queries | 1-5 minutter | Privacy og freshness |
|
||
| Search results | 15-60 minutter | Balanse mellom cost og freshness |
|
||
|
||
**Baseline** (Industry best practices)
|
||
|
||
### Cache Invalidation Triggers
|
||
|
||
- **Data updates** — Webhook-triggered invalidation ved source data changes
|
||
- **Model changes** — Invalidate ved model deployment/retraining
|
||
- **Prompt modifications** — Clear cache ved prompt template changes
|
||
- **Manual purge** — Admin-triggered for compliance eller testing
|
||
|
||
**Verified** (Microsoft Learn - Caching strategies)
|
||
|
||
## Arkitekturmønstre
|
||
|
||
### 1. Semantic Caching (anbefalt for RAG)
|
||
|
||
**Beskrivelse:** Bruker vector similarity search på cached prompts for å returnere responses til semantisk like queries, selv om teksten ikke er identisk.
|
||
|
||
**Hvordan det fungerer:**
|
||
1. Incoming prompt vektoriseres med embedding model
|
||
2. Vector search kjøres mot cached prompt vectors
|
||
3. Items med similarity score > threshold returneres
|
||
4. Ved cache miss: LLM genererer response, som caches med vectorized prompt
|
||
|
||
**Fordeler:**
|
||
- Høyere cache hit rate enn traditional key-value caching (30-60% vs 10-20%)
|
||
- Håndterer variasjon i user input (synonyms, paraphrasing)
|
||
- Reduserer LLM token consumption drastisk
|
||
|
||
**Ulemper:**
|
||
- Krever embedding model (extra latency ~50-100ms)
|
||
- Mer kompleks implementation
|
||
- Krever vector-capable cache (Cosmos DB, Redis med RediSearch)
|
||
|
||
**Context Window Requirement:**
|
||
Semantic cache MÅ operere innenfor context window. Uten chat history kan cache returnere contextually incorrect responses.
|
||
|
||
**Eksempel:** User spør "What is the largest lake in North America?" (cached: "Lake Superior"), deretter "What is the second largest?" Uten context window ville cache kunne returnere feil svar til en annen user som spør samme oppfølgingsspørsmål i en annen kontekst.
|
||
|
||
**Verified** (Microsoft Learn - Semantic cache introduction)
|
||
|
||
### 2. Multi-tier Result Caching
|
||
|
||
**Beskrivelse:** Kombinerer in-memory cache (Redis) med persistent cache (Cosmos DB) for optimal balance mellom speed og durability.
|
||
|
||
**Arkitektur:**
|
||
```
|
||
User Query → L1: Redis (in-memory, <5ms) → L2: Cosmos DB (persistent, <50ms) → LLM (fallback, >2s)
|
||
```
|
||
|
||
**Fordeler:**
|
||
- Sub-5ms response time for hot data
|
||
- Data durability ved cache failures
|
||
- Cost-effective (Redis for hot, Cosmos for warm data)
|
||
|
||
**Ulemper:**
|
||
- Økt complexity i cache management
|
||
- Potential for stale data across tiers
|
||
- Høyere infrastructure cost
|
||
|
||
**Baseline** (Common enterprise pattern)
|
||
|
||
### 3. Retrieval Snippet Caching
|
||
|
||
**Beskrivelse:** Cache frequently retrieved knowledge fragments fra Azure AI Search eller vector databases for å unngå repeated database queries.
|
||
|
||
**Implementation:**
|
||
- Cache top-K search results per query pattern
|
||
- Key: hash(query + filters + top-K)
|
||
- TTL: 15-60 minutter (avhengig av data freshness-krav)
|
||
|
||
**Fordeler:**
|
||
- Reduserer Azure AI Search query costs (50-70% reduction)
|
||
- Lavere latency for grounding data retrieval
|
||
- Mindre load på vector index
|
||
|
||
**Ulemper:**
|
||
- Stale grounding data hvis source documents oppdateres
|
||
- Cache size kan vokse raskt med mange unique queries
|
||
|
||
**Verified** (Microsoft Learn - Retrieval caching)
|
||
|
||
## Beslutningsveiledning
|
||
|
||
### Når bruke hvilken caching-strategi
|
||
|
||
| Scenario | Anbefalt Strategi | Rationale |
|
||
|----------|-------------------|-----------|
|
||
| Chatbot med repeterende FAQs | Semantic caching (Redis + RediSearch) | Høy hit rate, semantisk matching |
|
||
| Document Q&A med mange unique queries | Retrieval snippet caching | Kostnad-effektiv, fokus på grounding data |
|
||
| Real-time dashboard med AI insights | Multi-tier caching (Redis L1 + Cosmos L2) | Speed + durability |
|
||
| Compliance-sensitive applikasjoner | User-scoped semantic caching | Privacy protection, audit trail |
|
||
|
||
**Baseline** (Architecture decision framework)
|
||
|
||
### Vanlige feil å unngå
|
||
|
||
| Anti-pattern | Problem | Løsning |
|
||
|-------------|---------|---------|
|
||
| **Caching user-private data globally** | Privacy violation, data leakage | Scope cache keys by user/tenant identity |
|
||
| **Ingen TTL policy** | Runaway cache growth, stale data | Implement TTL basert på data sensitivity |
|
||
| **For lav APIM score-threshold (distanse, f.eks. <0.1)** | Lav cache hit rate (for streng matching) | Start med 0.15, tune opp basert på metrics |
|
||
| **Caching uten context window** | Contextually incorrect responses | Vectorize chat history + latest prompt |
|
||
| **Ingen invalidation strategy** | Stale responses ved data updates | Implement webhook-based invalidation |
|
||
|
||
**Verified** (Microsoft Learn - Caching risks)
|
||
|
||
### Røde flagg
|
||
|
||
- Cache hit rate < 20% etter tuning → Revurder cache strategy
|
||
- Cache size vokser >10GB/dag → Implementer aggressive TTL eller pruning
|
||
- Latency øker etter caching → Sjekk embedding model overhead
|
||
- Brukerklager på stale data → Reduser TTL eller implementer invalidation
|
||
|
||
**Baseline** (Performance monitoring thresholds)
|
||
|
||
## Integrasjon med Microsoft-stakken
|
||
|
||
### Azure Cache for Redis
|
||
|
||
**Use Cases:** Traditional result caching, high-throughput scenarios
|
||
|
||
**Tiers:**
|
||
- **Premium tier** — 99.9% SLA, up to 120GB per shard
|
||
- **Enterprise tier** — 99.99% SLA, active-active geo-replication, Flash storage support
|
||
- **Enterprise Flash tier** — Up to 13TB cache size, 20% RAM + 80% NVMe Flash
|
||
|
||
**Workloads suited for Flash tier:**
|
||
- Read-heavy (high read/write ratio)
|
||
- Hot/cold access patterns (frequently accessed subset)
|
||
- Large values (keys in RAM, values in Flash)
|
||
|
||
**Not suited for Flash tier:**
|
||
- Write-heavy workloads
|
||
- Uniform data access patterns
|
||
- Long key names with small values
|
||
|
||
**Configuration for AI workloads:**
|
||
```python
|
||
import redis
|
||
from azure.identity import DefaultAzureCredential
|
||
from redis_entraid.cred_provider import create_from_default_azure_credential
|
||
|
||
credential_provider = create_from_default_azure_credential(
|
||
("https://redis.azure.com/.default",),
|
||
)
|
||
|
||
r = redis.Redis(
|
||
host="<redis-host>.redis.cache.windows.net",
|
||
port=10000,
|
||
ssl=True,
|
||
decode_responses=True,
|
||
credential_provider=credential_provider
|
||
)
|
||
|
||
# Set TTL på cached item
|
||
r.setex("cache_key", 3600, "cached_value") # 1 hour TTL
|
||
```
|
||
|
||
**Verified** (Microsoft Learn - Azure Managed Redis architecture, code samples)
|
||
|
||
### Azure API Management - Semantic Caching
|
||
|
||
**Use Case:** Semantic caching for LLM APIs (Azure OpenAI, Model Inference API)
|
||
|
||
**Prerequisites:**
|
||
- Azure Managed Redis med **RediSearch module** enabled
|
||
- Embeddings API deployment (for vectorization)
|
||
- Chat Completion API deployment (for user requests)
|
||
|
||
**Policy Configuration:**
|
||
|
||
Inbound (cache lookup):
|
||
```xml
|
||
<azure-openai-semantic-cache-lookup
|
||
score-threshold="0.15"
|
||
embeddings-backend-id="embeddings-backend"
|
||
embeddings-backend-auth="system-assigned"
|
||
ignore-system-messages="true"
|
||
max-message-count="10">
|
||
<vary-by>@(context.Subscription.Id)</vary-by>
|
||
</azure-openai-semantic-cache-lookup>
|
||
<rate-limit calls="10" renewal-period="60" />
|
||
```
|
||
|
||
Outbound (cache store):
|
||
```xml
|
||
<azure-openai-semantic-cache-store duration="60" />
|
||
```
|
||
|
||
**Score Threshold Tuning** (APIM `score-threshold` er en DISTANSE: lavere = strengere, krever høyere semantisk likhet):
|
||
- 0.1-0.2 → Strict matching, lavere hit rate, høy relevance
|
||
- 0.3-0.5 → Balanced, medium hit rate, god relevance
|
||
- 0.6-0.8 → Liberal matching, høyere hit rate, noe lavere relevance
|
||
|
||
**Verified** (Microsoft Learn - Enable semantic caching for LLM APIs)
|
||
|
||
### Azure Cosmos DB for NoSQL
|
||
|
||
**Use Case:** Semantic cache med built-in vector search, persistent storage
|
||
|
||
**Implementation Pattern:**
|
||
|
||
```python
|
||
from azure.cosmos import CosmosClient
|
||
from openai import AzureOpenAI
|
||
|
||
# Setup Cosmos DB vector store
|
||
cosmos_client = CosmosClient(url=cosmos_uri, credential=cosmos_key)
|
||
database = cosmos_client.get_database_client(cosmos_database_name)
|
||
container = database.get_container_client(cosmos_container_name)
|
||
|
||
# Query semantic cache
|
||
def query_cache(prompt_vector, similarity_threshold=0.15, top_k=5):
|
||
query = f"""
|
||
SELECT TOP {top_k} c.id, c.prompt, c.completion,
|
||
VectorDistance(c.promptVector, @promptVector) AS similarity
|
||
FROM c
|
||
WHERE VectorDistance(c.promptVector, @promptVector) > @threshold
|
||
ORDER BY VectorDistance(c.promptVector, @promptVector) DESC
|
||
"""
|
||
|
||
items = list(container.query_items(
|
||
query=query,
|
||
parameters=[
|
||
{"name": "@promptVector", "value": prompt_vector},
|
||
{"name": "@threshold", "value": similarity_threshold}
|
||
]
|
||
))
|
||
return items
|
||
```
|
||
|
||
**Fordeler:**
|
||
- Globally distributed, multi-region writes
|
||
- Automatic indexing av vectors
|
||
- 99.999% SLA med multi-region setup
|
||
- Built-in TTL support
|
||
|
||
**Verified** (Microsoft Learn - Semantic cache with Cosmos DB, code samples)
|
||
|
||
### Azure AI Search - Built-in Caching
|
||
|
||
**Automatic Caching Behavior:**
|
||
Azure AI Search cacher automatisk content etter første query for raskere subsequent searches.
|
||
|
||
**Optimization Tips:**
|
||
- Reduser index size → raskere caching, mindre memory footprint
|
||
- Selective field attribution → kun indexer nødvendige fields
|
||
- Unngå over-attribution (filterable, sortable, facetable) → reduserer storage 4x
|
||
|
||
**Performance Factors:**
|
||
- Smaller indexes → mer content i cache → lavere query latency
|
||
- Higher tiers (S2, S3) → mer memory → større cache capacity
|
||
- Partitions → parallel processing for slow queries
|
||
|
||
**Verified** (Microsoft Learn - Azure AI Search performance tips)
|
||
|
||
## Offentlig sektor (Norge)
|
||
|
||
### GDPR og Privacy
|
||
|
||
**Cache Key Scoping (OBLIGATORISK):**
|
||
- Aldri cache user-private content uten proper scoping by user identity
|
||
- Implementer tenant/user isolation i cache keys
|
||
- Audit trail for cached persondata
|
||
|
||
**Data Minimization:**
|
||
- Cache kun minimum nødvendig data for å svare på query
|
||
- TTL på persondata skal ikke overstige formåls-begrensningen
|
||
- Automatisk sletting ved user request (GDPR Article 17)
|
||
|
||
**Eksempel - GDPR-compliant cache key:**
|
||
```python
|
||
cache_key = f"user:{user_id}:tenant:{tenant_id}:query_hash:{hash(prompt)}"
|
||
# TTL: 1 hour (minimal for chat session)
|
||
```
|
||
|
||
**Baseline** (GDPR compliance patterns)
|
||
|
||
### Compliance-krav
|
||
|
||
| Krav | Implementation |
|
||
|------|----------------|
|
||
| **Dataportabilitet (GDPR Art. 20)** | Export cached user data on request |
|
||
| **Rett til sletting (GDPR Art. 17)** | Implement cache purge by user_id |
|
||
| **Behandlingsgrunnlag** | Dokumenter legitimate interest for caching |
|
||
| **Datatilsynet rapportering** | Audit log for cache access/invalidation |
|
||
|
||
**Baseline** (Norwegian public sector compliance)
|
||
|
||
### Sikkerhet
|
||
|
||
**Encryption:**
|
||
- **At rest:** Azure Cache for Redis (Premium/Enterprise) — automatic encryption
|
||
- **In transit:** TLS 1.2+ mandatory for all cache connections
|
||
- **Key management:** Azure Key Vault for cache access keys
|
||
|
||
**Access Control:**
|
||
- Microsoft Entra ID authentication for Redis (preview)
|
||
- Role-based access control (RBAC) for cache management
|
||
- Network isolation via Private Endpoints
|
||
|
||
**Verified** (Microsoft Learn - Redis security)
|
||
|
||
## Kostnad og lisensiering
|
||
|
||
### Azure Cache for Redis Pricing (Norway East - 2026)
|
||
|
||
| Tier | Size | Kapasitet | Månedskostnad (NOK) | Best For |
|
||
|------|------|-----------|---------------------|----------|
|
||
| Basic C0 | 250 MB | N/A (no SLA) | ~400 | Dev/Test |
|
||
| Standard C1 | 1 GB | 2 replicas, 99.9% SLA | ~1,200 | Small production |
|
||
| Premium P1 | 6 GB | Clustering, geo-replication | ~7,000 | Enterprise |
|
||
| Enterprise E10 | 12 GB | Active-active, 99.99% SLA | ~25,000 | Mission-critical |
|
||
| Enterprise Flash F300 | 345 GB | 20% RAM + 80% Flash | ~60,000 | Large-scale AI |
|
||
|
||
**Cost Optimization Tips:**
|
||
1. **Start with Premium P1** for production RAG (best price/performance)
|
||
2. **Scale out vs scale up** — Add replicas før du går til høyere tier
|
||
3. **Use Flash tier for large caches** (>100GB) — 5x lavere cost per GB vs Enterprise
|
||
4. **Monitor cache hit rate** — <20% hit rate betyr ineffektiv caching strategy
|
||
5. **Implement TTL aggressively** — Reduser cache size, lavere tier
|
||
|
||
**Verified** (Microsoft Learn - Plan and manage costs)
|
||
|
||
### Azure Cosmos DB Pricing
|
||
|
||
**Request Units (RU/s) for Semantic Cache:**
|
||
- Vector query (1KB): ~10-50 RU
|
||
- Write (cache store): ~5-10 RU
|
||
- Storage: ~2.5 NOK/GB/måned
|
||
|
||
**Cost Example (10,000 queries/day):**
|
||
- 10,000 queries × 30 RU avg = 300,000 RU/day = 3.5 RU/s avg
|
||
- Provisioned: 100 RU/s (for burst) = ~600 NOK/måned
|
||
- Storage (10GB cache): ~25 NOK/måned
|
||
- **Total: ~625 NOK/måned**
|
||
|
||
**Baseline** (Cosmos DB pricing calculator estimates)
|
||
|
||
### TCO Sammenligning
|
||
|
||
| Scenario | Without Caching | With Semantic Caching (Redis) | Savings |
|
||
|----------|-----------------|-------------------------------|---------|
|
||
| 100K LLM queries/day (GPT-4) | ~450,000 NOK/måned | ~150,000 NOK/måned + 7,000 (Redis) | 65% |
|
||
| 10K queries/day (GPT-3.5) | ~45,000 NOK/måned | ~15,000 NOK/måned + 7,000 (Redis) | 51% |
|
||
|
||
**Assumptions:** 50% cache hit rate, avg 2000 tokens/query
|
||
|
||
**Baseline** (TCO analysis based on Azure pricing)
|
||
|
||
## For arkitekten (Cosmo)
|
||
|
||
### Spørsmål å stille kunden
|
||
|
||
1. **Traffic pattern:** Hvor mange LLM queries per dag/time forventer dere? Hva er peak vs avg load?
|
||
2. **Query similarity:** Er det mange repeterende eller semantisk like spørsmål? (Indikerer semantic cache ROI)
|
||
3. **Data freshness:** Hvor ofte endres underlying data? Hva er akseptabelt staleness-vindu?
|
||
4. **Privacy requirements:** Håndterer dere persondata? Trengs user-scoped caching?
|
||
5. **Compliance:** Hvilke regulatory frameworks gjelder (GDPR, Schrems II, Datatilsynet)?
|
||
6. **Budget:** Hva er totalt budsjett for LLM + caching infrastructure?
|
||
7. **Latency SLA:** Hva er maks akseptabel response time (p50, p95, p99)?
|
||
8. **Global reach:** Trengs multi-region caching for latency eller compliance?
|
||
|
||
### Fallgruver å unngå
|
||
|
||
| Fallgruve | Impact | Mitigering |
|
||
|-----------|--------|------------|
|
||
| **Caching uten context window** | Contextually incorrect responses → user frustration | Vectorize chat history + prompt |
|
||
| **Global caching av persondata** | GDPR violation, potential bøter | User-scoped keys, TTL enforcement |
|
||
| **For lav APIM score-threshold (distanse)** | Lav hit rate, caching ineffective | Start på 0.15, tune opp for løsere matching |
|
||
| **Ingen invalidation strategy** | Stale data → incorrect LLM responses | Webhook-based invalidation |
|
||
| **Undersized cache tier** | High eviction rate, lav hit rate | Monitor evictions, scale proaktivt |
|
||
| **Ignoring embedding overhead** | Latency increase vs direct LLM call | Batch embeddings, use async patterns |
|
||
|
||
### Anbefalinger per modenhetsnivå
|
||
|
||
**Level 1 - Pilot (0-6 måneder RAG erfaring):**
|
||
- Start med **Azure API Management semantic caching** (managed, low-complexity)
|
||
- Use case: FAQ chatbot med <1000 queries/dag
|
||
- Tier: Standard Redis (C1) for læring, lav cost
|
||
- Monitoring: Basic hit rate metrics i APIM
|
||
|
||
**Level 2 - Production (6-18 måneder):**
|
||
- Implementer **multi-layer caching** (Redis L1 + Cosmos DB L2)
|
||
- Use case: Customer support RAG med 10K-100K queries/dag
|
||
- Tier: Premium Redis (P1) + Cosmos DB autoscale
|
||
- Monitoring: Application Insights med custom metrics (hit rate, latency, cost per query)
|
||
|
||
**Level 3 - Enterprise (18+ måneder):**
|
||
- **Hybrid semantic + retrieval caching** med advanced invalidation
|
||
- Use case: Multi-tenant SaaS RAG platform, 100K+ queries/dag
|
||
- Tier: Enterprise Redis (E10) + global Cosmos DB
|
||
- Monitoring: Full observability stack (Grafana, custom dashboards, alerting)
|
||
|
||
**Baseline** (Maturity model for AI implementations)
|
||
|
||
## Kilder og verifisering
|
||
|
||
### Microsoft Learn Documentation
|
||
|
||
1. **Application design for AI workloads on Azure** - Multi-layer caching strategies
|
||
https://learn.microsoft.com/en-us/azure/well-architected/ai/application-design#implement-multi-layer-caching-strategies
|
||
*Confidence: Verified (2026-02)*
|
||
|
||
2. **Introduction to semantic cache** - Semantic caching concepts, context window requirements
|
||
https://learn.microsoft.com/en-us/azure/cosmos-db/gen-ai/semantic-cache
|
||
*Confidence: Verified (2026-02)*
|
||
|
||
3. **Enable semantic caching for LLM APIs in Azure API Management** - APIM semantic cache implementation
|
||
https://learn.microsoft.com/en-us/azure/api-management/azure-openai-enable-semantic-caching
|
||
*Confidence: Verified (2026-02)*
|
||
|
||
4. **Tips for better performance in Azure AI Search** - Index caching, performance optimization
|
||
https://learn.microsoft.com/en-us/azure/search/search-performance-tips
|
||
*Confidence: Verified (2026-02)*
|
||
|
||
5. **Azure Managed Redis architecture** - Flash tier workloads, caching strategies
|
||
https://learn.microsoft.com/en-us/azure/redis/architecture#flash-optimized-tier
|
||
*Confidence: Verified (2026-02)*
|
||
|
||
6. **Plan and manage costs of an Azure AI Search service** - Cost optimization, enrichment caching
|
||
https://learn.microsoft.com/en-us/azure/search/search-sku-manage-costs#minimize-costs
|
||
*Confidence: Verified (2026-02)*
|
||
|
||
7. **Data platform considerations for mission-critical workloads** - Azure Cache for Redis enterprise patterns
|
||
https://learn.microsoft.com/en-us/azure/well-architected/mission-critical/mission-critical-data-platform#caching-for-hot-tier-data
|
||
*Confidence: Verified (2026-02)*
|
||
|
||
### Code Samples
|
||
|
||
8. **RAG implementation with Azure AI Search** - Python RAG cache patterns
|
||
https://learn.microsoft.com/en-us/azure/search/retrieval-augmented-generation-overview#content-retrieval-in-azure-ai-search
|
||
*Confidence: Verified (code sample)*
|
||
|
||
9. **Azure Cache for Redis with Python** - Redis connection and caching code
|
||
https://learn.microsoft.com/en-us/azure/redis/python-get-started#code-to-connect-to-a-redis-cache
|
||
*Confidence: Verified (code sample)*
|
||
|
||
### Confidence Levels per Section
|
||
|
||
| Seksjon | Confidence | Source |
|
||
|---------|-----------|--------|
|
||
| Multi-layer caching strategy | **Verified** | Microsoft Learn docs (1) |
|
||
| Semantic caching pattern | **Verified** | Microsoft Learn docs (2, 3) |
|
||
| Azure Cache for Redis configuration | **Verified** | Microsoft Learn docs (5, 7), code samples (9) |
|
||
| Azure API Management policies | **Verified** | Microsoft Learn docs (3) |
|
||
| Azure AI Search caching | **Verified** | Microsoft Learn docs (4, 6) |
|
||
| Cost estimates | **Baseline** | Azure pricing calculator (2026-02) |
|
||
| GDPR compliance patterns | **Baseline** | Industry best practices |
|
||
| Maturity model recommendations | **Baseline** | Architecture consulting experience |
|
||
|
||
---
|
||
|
||
**Totalt antall kilder:** 9 unike Microsoft Learn URLer
|
||
**MCP calls:** 6 (4 docs_search + 2 docs_fetch + 1 code_sample_search)
|
||
**Sist verifisert:** 2026-06-19
|
||
|
||
|
||
### Azure Managed Redis — Arkitektur (oppdatert 2026-04)
|
||
|
||
Azure Managed Redis (basert på Redis Enterprise) er anbefalt for AI-workloads vs. Azure Cache for Redis (community edition):
|
||
|
||
| Egenskap | Azure Cache for Redis | Azure Managed Redis |
|
||
|---------|----------------------|---------------------|
|
||
| Threading | Single-threaded | Multi-threaded (Redis Enterprise) |
|
||
| Arkitektur | Primary + replica (2 nodes) | Multiple shards per node, distributed primaries |
|
||
| Performance | Begrenset av single thread | Nær-lineær skalering med vCPUs |
|
||
| Clustering | Valgfritt | Alltid aktivert (OSS, Enterprise, eller Non-Clustered policy) |
|
||
| Active geo-replication | Nei | Ja |
|
||
|
||
**Cluster policies:**
|
||
- **OSS policy** — anbefalt for de fleste. Klienten kobles direkte til shards, laveste latency, best throughput
|
||
- **Enterprise policy** — enkelt endpoint, bakoverkompatibelt, men enkelt-node proxy kan bli bottleneck. Påkrevd for RediSearch
|
||
- **Non-Clustered** — kun ≤25 GB, for migrering fra ikke-shardede miljøer
|
||
|
||
**Flash Optimized tier:** 20% RAM + 80% NVMe Flash. Optimal for read-heavy workloads med subset av hot keys. |