Updated 66 stale knowledge base reference files (10 critical, 56 high) across all 5 skills using Microsoft Learn MCP research. Key factual updates: - Groundedness Detection API: `correction` → `mitigating` param, `correctedText` → `correctionText` (breaking change) - Copilot Studio: GPT-4.1 mini now default (was GPT-4o mini); Claude Sonnet 4.5 + Opus 4.5 added (experimental, 200K ctx) - Agentic Retrieval: still public preview; 50M free tokens/month - Azure security baselines: "Cognitive Services" → "Foundry Tools" - Databricks: Delta Live Tables → Lakeflow Spark Declarative Pipelines - MLflow 3 GenAI: new Feedback/Expectation data model - Token tracking doc: "Azure OpenAI in Foundry Models through a gateway" - Agent Registry: Risks column (M365 E7), Graph API (preview) - Copilot DLP: new Entra AI Admin + Purview Data Security AI Admin roles - ISO/IEC 42001: scope expanded to M365 Copilot, Foundry, Security Copilot - Zero Trust: CAE now via Conditional Access, Strict Location Enforcement - Purview: new Fabric Copilots/agents governance section - AG-UI HITL: ApprovalRequiredAIFunction (C#), @tool approval_mode (Python) All files: Last updated → 2026-04, *(Verified MCP 2026-04)* markers added. Build registry: 1341 URLs from 387 files (+2 new URLs). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
18 KiB
RAG at Enterprise Scale - Indexing and Serving
Last updated: 2026-04 Status: GA Category: RAG Architecture & Semantic Search
Introduksjon
Når RAG-løsninger skaleres til enterprise-volumer, endres både tekniske og operasjonelle utfordringer fundamentalt. Det som fungerer for 10 000 dokumenter kan kollapse ved 10 millioner. Enterprise-skala handler om mer enn bare størrelse — det innebærer parallell prosessering, inkrementelle oppdateringer, batch-optimalisering, og serving-infrastruktur som håndterer høye søkevolumer med lav latency.
Azure AI Search gir to skaleringsdimensjoner: replicas (for serving og high availability) og partitions (for storage og indexing throughput). Kombinasjonen utgjør search units (SU), og riktig konfigurering av disse er kritisk for både ytelse og kostnadseffektivitet. For enterprise-løsninger er ikke spørsmålet om man skal skalere, men hvordan man skal gjøre det strategisk — med tanke på både initial bulk indexing, inkrementelle oppdateringer, og query serving under produksjonslast.
Microsoft tilbyr to grunnleggende tilnærminger til indexing: push model (programmatisk opplasting via API) og pull model (indexers som henter data fra støttede datakilder). For enterprise-skala anbefales indexers kombinert med data partitioning, parallell prosessering, og scheduling — dette gir automatisk retry-logikk, change detection, og inkrementell oppdatering out-of-the-box.
Kjernekomponenter
Batch Indexing Pipelines
| Komponent | Formål | Best Practice |
|---|---|---|
| Batch Size | Dokumenter per request (maks 1000 eller 16 MB) | Test optimal størrelse — varierer med schema og dokumentstørrelse |
| Threading | Concurrent requests til search service | Sett antall threads = antall search units for optimal throughput |
| Exponential Backoff | Retry-strategi ved 503/207 errors | Implementer 2× delay ved feil, maks 5 forsøk |
| Progress Tracking | Logging og monitoring av batch progress | Logg failed documents, track indexing rate (docs/sec eller MB/sec) |
Push model: Bruk IndexDocumentsBatch.Upload() eller SearchIndexingBufferedSender (Azure.Search.Documents SDK v11.7.0, v11.8.0-beta.1 tilgjengelig) for asynkron batch-opplasting. Verified (MCP 2026-04). Azure SDK håndterer automatisk 503-retries, men 207 (partial failure) må håndteres eksplisitt.
Pull model (indexers): Batch size settes via batchSize-parameter. Default varierer per datakilde: 1000 for SQL/Cosmos DB, 10 for Blob Storage (grunnet større dokumentstørrelse).
Incremental Updates
| Strategi | Bruk når | Implementasjon |
|---|---|---|
| Change Detection | Datakilde støtter timestamps/watermarks | Enable change detection på data source (High Water Mark, Integrated Change Tracking, SQL Change Tracking) |
| Scheduled Indexing | Jevnlig oppdatering (hver 2., 5., 15. minutt, time, dag) | Bruk indexer schedule med 2-timers intervaller for lang-kjørende prosesser |
| Delta Indexing | Kun nye/endrede dokumenter | Kombiner change detection med schedule — indexer fortsetter fra siste stopppunkt |
| Document-level Updates | Enkeltdokument-endringer | Bruk MergeOrUpload for å oppdatere felt uten å erstatte hele dokumentet |
Viktig: Indexers resumerer automatisk fra siste kjente stopppunkt hvis prosessering tar lengre tid enn 2-timers vinduet. Dette gjør dem ideelle for meget store datasett hvor initial indexing kan ta dager.
Distributed Indexing
For store datasett (flere millioner dokumenter), partitoner dataene og kjør parallelle indexers:
Parallel Indexing Pattern:
- Del kildedata i fysiske partisjoner (f.eks. flere blob containers)
- Opprett én data source per partisjon
- Opprett én indexer per data source, alle peker til samme search index
- Schedule indexers til å kjøre samtidig
- Antall parallelle indexers begrenses av antall search units (1 SU = 1 concurrent indexer)
Eksempel (Blob Storage):
- 5 millioner blobs fordelt i 5 containers (1M hver)
- 6 search units (Standard S1: 2 partitions × 3 replicas)
- 5 parallelle indexers → 5× raskere indexing
Trade-offs:
- Fordel: Dramatisk redusert indexing-tid
- Risiko: Indexing kjører ikke i bakgrunnen — økt query throttling under heavy indexing
- Mitigation: Kjør parallell indexing utenfor peak query-perioder, eller provisjon ekstra capacity midlertidig
Load Balancing
Azure AI Search distribuerer automatisk queries på tvers av replicas. Ingen manuell konfigurasjon nødvendig.
| Konfigurasjon | Query Serving Capacity | SLA |
|---|---|---|
| 1 replica | Ingen redundans | Ingen SLA |
| 2 replicas | 2× query throughput | Read-only SLA (99.9%) |
| 3+ replicas | 3×+ query throughput | Read/write SLA (99.9%) |
Replica Scaling Triggers:
- Økende query latency
- HTTP 503 errors (service overload)
- Queries per second (QPS) nærmer seg kapasitetsgrense
Partition Scaling Triggers:
- Index size nærmer seg partition-grense (varierer per tier: Basic 15 GB [services etter april 2024; eldre: 2 GB], Standard 25 GB, Standard S2 100 GB, etc.) — Verified (MCP 2026-04)
- HTTP 429 errors (storage full)
- Indexing throughput for lav
Disaster Recovery
Azure AI Search har ingen innebygd cross-region replication. For mission-critical enterprise-løsninger:
Disaster Recovery Pattern:
- Deploy identiske search services i 2+ Azure regions
- Bruk samme index schema i alle regioner
- Kjør parallelle indexers mot samme datakilder (eller geo-replicated data sources)
- Implement failover logic i application layer (Azure Traffic Manager eller Azure Front Door)
Data Persistence: Search indexes er ikke durable storage. Alltid behold source data (Blob Storage, SQL, Cosmos DB) som single source of truth. Index kan rebuildes fra source.
Arkitekturmønstre
1. Push vs Pull Indexing
| Aspekt | Push Model (API) | Pull Model (Indexers) |
|---|---|---|
| Kontroll | Full kontroll over timing og batching | Automatisk scheduling og retry |
| Kompleksitet | Krever custom threading og error handling | Minimal kode — deklarativ konfigurasjon |
| Change Detection | Må implementeres selv | Built-in support (High Water Mark, Change Tracking) |
| Skillsets | Ikke støttet | Full support for AI enrichment |
| Use Case | Custom data sources, proprietary formats | Azure Blob, SQL, Cosmos DB, SharePoint, OneLake |
Anbefaling: Bruk indexers når datakilde støttes. Fallback til push model kun for custom sources eller når du trenger ekstremt presis kontroll over batching.
2. Incremental vs Full Reindex
| Scenario | Strategi | Implementasjon |
|---|---|---|
| Schema change (breaking) | Full reindex | Opprett ny index med nytt navn, reindex alt, swap alias |
| Schema change (non-breaking) | Incremental | Legg til felt, reindex kun nye felt (hvis nødvendig) |
| Document updates | Incremental | Change detection + scheduled indexer |
| Initial load | Full reindex (batch-optimized) | Scale opp partitions midlertidig, scale ned etter initial load |
Index Aliasing Pattern (anbefalt for zero-downtime updates):
- Opprett ny index:
my-index-v2 - Reindex alle data til ny index
- Test ny index i staging
- Swap alias:
my-index→my-index-v2 - Slett gammel index
3. Multi-Region Serving
For global enterprise-løsninger med latency-krav:
Active-Active Multi-Region Pattern:
- Search service i flere regioner (f.eks. North Europe, West US, Southeast Asia)
- Identisk index schema i alle regioner
- Separate indexers synker data fra geo-replicated sources
- Azure Front Door ruter queries til nærmeste region
Cost vs Performance Trade-off:
- Høy tilgjengelighet: 2 regions (production + failover)
- Lav latency globalt: 3+ regions (multi-geo serving)
- Kostnadsbesparelse: Single region + Azure Front Door caching
Beslutningsveiledning
Tier Selection (Indexing Perspective)
| Tier | Storage per Partition | Indexing Speed | Use Case |
|---|---|---|---|
| Basic | 15 GB (services opprettet etter april 2024; eldre services: 2 GB) | Moderat | < 500K dokumenter, low update frequency |
| Standard S1 | 25 GB | God | 1-5M dokumenter, daily updates |
| Standard S2 | 100 GB | Meget god | 5-20M dokumenter, hourly updates |
| Standard S3 | 200 GB | Svært god | 20M+ dokumenter, continuous updates |
| Storage Optimized L1 | 1 TB | Moderat | Arkiv-scenarier, sjeldne oppdateringer |
Viktig: Services opprettet etter 3. april 2024 har høyere storage per partition. Eldre services kan oppgraderes.
Vanlige Feil
| Feil | Symptom | Fix |
|---|---|---|
| Under-dimensjonert indexing capacity | Indexing tar dager, 503 errors | Scale opp partitions midlertidig under bulk loads |
| Over-dimensjonert serving capacity | Høy månedlig kostnad, lav query load | Reduser replicas, monitorér QPS og latency |
| Ingen retry-logikk | Partial failures → manglende dokumenter | Implementer exponential backoff for 207 errors |
| Blob enumeration timeout | Indexer "henger" uten progress | Partitioner data i flere containers, kjør parallelle indexers |
| Missing change detection | Full reindex hver gang | Enable High Water Mark eller Integrated Change Tracking |
Røde Flagg (Handling Required)
🚨 HTTP 503 (Service Unavailable): Scale opp replicas eller reduser concurrent indexing load 🚨 HTTP 429 (Too Many Requests): Storage full — scale opp partitions eller slett unødvendige indexes 🚨 Indexer failure rate > 5%: Sjekk source data quality, batch size, og network connectivity 🚨 Query latency > 500ms (p95): Scale opp replicas eller optimaliser queries (add filters, reduce result set)
Integrasjon med Microsoft-stakken
Azure Data Factory
Bruk ADF for komplekse ETL-pipelines før indexing:
Pipeline:
1. Copy Activity: Source → Staging (Blob/ADLS)
2. Data Flow: Transform, enrich, chunk documents
3. Stored Procedure: Trigger indexer run (REST API)
4. Web Activity: Poll indexer status
Use Case: Transform data fra legacy systems (SAP, on-prem SQL) før indexing.
Azure Functions
Implementer event-driven indexing:
Blob Trigger Pattern:
- Blob uploaded → Function triggered
- Function pusher dokument til Azure AI Search via push API
- Ideal for real-time scenarios hvor indexer schedule (2-timers intervall) er for tregt
Code Sample (C#):
await ExponentialBackoff.IndexData(indexClient, documents, batchSize: 1000, threads: 8);
Azure Event Grid
Bruk Event Grid for eventual consistency i multi-region setups:
Event Flow:
- Source data updated (Cosmos DB, Blob Storage)
- Event Grid publiserer event
- Multiple indexers (i forskjellige regioner) subscriber til event
- Hver indexer oppdaterer sin lokale search service
Azure Monitor
Sett opp alerts for enterprise drift:
| Metric | Alert Threshold | Action |
|---|---|---|
| Queries per Second (QPS) | > 80% av capacity | Scale opp replicas |
| Indexing Failed Documents | > 1% of batch | Investigate data quality |
| Search Latency (p95) | > 500ms | Optimaliser queries eller scale opp |
| Throttled Requests | > 5% | Scale opp eller reduser request rate |
Offentlig sektor (Norge)
Skaleringsbudsjetter
| Volum | Anbefalt Tier | Månedlig Kostnad (NOK)* | Begrunnelse |
|---|---|---|---|
| < 100K docs | Basic (1P × 2R) | ~2 000 kr | Lavt volum, read-only SLA tilstrekkelig |
| 100K - 1M docs | Standard S1 (1P × 3R) | ~9 000 kr | Produksjonsklar, read/write SLA |
| 1M - 10M docs | Standard S2 (2P × 3R) | ~36 000 kr | Enterprise-volum, høy availability |
| 10M+ docs | Standard S3 (3P × 3R) | ~100 000+ kr | Svært stort volum, krever budsjettgodkjenning |
*Priser er estimater (2026) — bruk Azure Pricing Calculator for nøyaktige tall.
Anskaffelsesregler
Dynamisk Skalering og Budsjettramme:
- Azure AI Search fakturerer per time basert på provisjonerte SUs
- Midlertidig oppscaling (f.eks. under bulk reindex) må budsjetteres
- Anbefaling: Reserver 20% buffer i årlig budsjett for peak loads
Driftsmodell:
- Indexing: Batch-prosesser kan kjøres natt/helg for å spare replicas (cost optimization)
- Serving: Replicas må kjøre 24/7 for SLA — ikke skalerbar ned uten downtime
Datalokalitet
Azure AI Search støtter følgende Norge-regioner:
- Norway East (Oslo) — primær anbefaling
- Norway West (Stavanger) — disaster recovery
GDPR og Schrems II: All data lagres innenfor EU/EØS når Norway East brukes. Ingen data går til USA.
Kostnad og Lisensiering
Prismodell per Tier
| Tier | SU-pris (NOK/time)* | Storage per Partition | QPS Estimate |
|---|---|---|---|
| Basic | ~10 kr | 15 GB (services etter april 2024) | ~15 |
| Standard S1 | ~120 kr | 25 GB | ~15 |
| Standard S2 | ~480 kr | 100 GB | ~60 |
| Standard S3 | ~960 kr | 200 GB | ~120 |
*SU = 1 partition × 1 replica. Faktisk pris varierer — se Azure Pricing.
Optimaliseringstips
1. Right-size din tier:
- Standard S2 med 4 SUs (2P × 2R) kan være billigere og raskere enn Standard S1 med 6 SUs (2P × 3R)
- Høyere tier = mer minne = bedre caching = lavere latency
2. Scale ned etter bulk indexing:
Initial load: 6 partitions (for speed)
→ Reindex complete
→ Scale down to 2 partitions (for cost)
3. Bruk index aliasing for zero-downtime schema updates:
- Unngå kostbar full reindex av produksjonsindex
- Bygg ny index i parallell, swap alias når klar
4. Monitorér unused capacity:
- Hvis QPS konsistent < 50% av capacity → reduser replicas
- Hvis storage < 60% av partition size → reduser partitions
For arkitekten (Cosmo)
Spørsmål å stille kunden
- Volum og vekst: Hvor mange dokumenter har dere i dag? Forventet vekst de neste 12 månedene?
- Update-frekvens: Hvor ofte endres dokumentene? Real-time, hourly, daily, eller ukentlig?
- Indexing vindu: Har dere batch-vinduer (f.eks. natt) for initial loads? Eller kreves kontinuerlig indexing?
- Query load: Forventet queries per second i produksjon? Peak vs gjennomsnittlig?
- Latency-krav: Hva er akseptabel query response time? < 200ms, < 500ms, < 1s?
- High availability: Kreves read-only SLA (2 replicas) eller read/write SLA (3 replicas)?
- Disaster recovery: Trengs multi-region deployment? Eller er backup-og-restore tilstrekkelig?
- Budsjettramme: Hva er månedlig driftskostnadsramme for search-tjenesten?
Fallgruver å unngå
❌ Underestimere initial indexing tid: 10M dokumenter kan ta dager selv med høy capacity ❌ Ingen change detection: Full reindex hver gang er kostbart og unødvendig ❌ Over-parallelisering: Flere indexers enn search units gir ingen speedup ❌ Ingen monitoring: Throttling og failures kan gå ubemerket uten alerts ❌ Single region for kritiske tjenester: Ingen disaster recovery-plan
Anbefalinger per modenhetsnivå
Level 1 (Pilot/POC):
- Basic tier (1P × 1R)
- Push API med enkel batch-logikk
- Manual reindex ved behov
- Monitoring via Azure Portal
Level 2 (Produksjon, lav skala):
- Standard S1 (1P × 2R)
- Indexers med change detection
- Scheduled incremental updates
- Azure Monitor alerts for throttling
Level 3 (Enterprise, høy skala):
- Standard S2/S3 (multi-partition, 3+ replicas)
- Parallel indexers for bulk loads
- Multi-region deployment for DR
- Full observability stack (Azure Monitor, Log Analytics, Application Insights)
Level 4 (Mission-Critical, Global):
- Storage Optimized (L1/L2) eller Standard S3
- Active-active multi-region serving
- Automated failover med Azure Front Door
- Dedicated SRE team for capacity planning
Kilder og verifisering
Microsoft Learn (Verified)
- Index large data sets in Azure AI Search — Verified (Feb 2026)
- Tutorial: Optimize indexing using the push API — Verified (Feb 2026)
- Estimate and manage capacity of a search service — Verified (Feb 2026)
- Service limits in Azure AI Search — Verified (Feb 2026)
- Indexers in Azure AI Search — Verified (Feb 2026)
- Data platform for AI workloads on Azure — Verified (Feb 2026)
Code Samples (Verified)
- azure-search-dotnet-scale (optimize-data-indexing) — Official sample for batch optimization
- Azure SDK for .NET - IndexDocumentsBatch — Verified API reference
Konfidensnivå per Seksjon
| Seksjon | Konfidens | Kilde |
|---|---|---|
| Kjernekomponenter | Verified | Microsoft Learn + Code Samples |
| Arkitekturmønstre | Verified | Microsoft Learn (indexer patterns, multi-region) |
| Beslutningsveiledning | Verified | Service limits, tier comparison docs |
| Integrasjon med Microsoft-stakken | Verified | ADF, Azure Functions, Event Grid official docs |
| Offentlig sektor (Norge) | Baseline | Azure Pricing Calculator + region support (Norway East verified) |
| Kostnad og lisensiering | Verified | Azure Pricing page (updated Feb 2026) |
| For arkitekten | Baseline | Best practices synthesis from verified sources |