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.
598 lines
18 KiB
Markdown
598 lines
18 KiB
Markdown
# Auto-Scaling AI Infrastructure
|
|
|
|
**Last updated:** 2026-02
|
|
**Status:** GA
|
|
**Category:** Performance & Scalability
|
|
**Type:** reference
|
|
|
|
---
|
|
|
|
## Innhold
|
|
|
|
- [Introduksjon](#introduksjon)
|
|
- [Grunnleggende skaleringstyper](#grunnleggende-skaleringstyper)
|
|
- [Azure Container Apps for AI-arbeidslaster](#azure-container-apps-for-ai-arbeidslaster)
|
|
- [Skaleringsmetrikker og triggere](#skaleringsmetrikker-og-triggere)
|
|
- [Cooldown-perioder og stabilisering](#cooldown-perioder-og-stabilisering)
|
|
- [Kapasitetsplanlegging](#kapasitetsplanlegging)
|
|
- [Kostnadsoptimalisering gjennom skalering](#kostnadsoptimalisering-gjennom-skalering)
|
|
- [Azure OpenAI-spesifikk skalering](#azure-openai-spesifikk-skalering)
|
|
- [Overvaking av skalering](#overvaking-av-skalering)
|
|
- [Sjekkliste for auto-scaling](#sjekkliste-for-auto-scaling)
|
|
- [For Cosmo](#for-cosmo)
|
|
|
|
## Introduksjon
|
|
|
|
Auto-scaling er en fundamental kapabilitet for AI-infrastruktur i Azure, der arbeidslaster kan variere dramatisk basert pa brukertrafikk, batch-prosessering og hendelsesdrevne triggere. For norsk offentlig sektor er auto-scaling spesielt viktig fordi trafikkmonstre er svart forutsigbare (arbeidstid, sesongvariasjon) men ogsaa kan ha uforutsigbare topper (hoeringsfrister, mediadekning).
|
|
|
|
Azure tilbyr auto-scaling pa flere nivaer: fra Azure Container Apps med KEDA for mikrotjenester, via Azure Kubernetes Service for komplekse orkestreringer, til VM Scale Sets for GPU-tunge arbeidslaster. Valget avhenger av arbeidslastens natur, latenskrav og kostnadsbudsjett.
|
|
|
|
Denne referansen dekker skaleringsstrategier for AI-infrastruktur med fokus pa Azure-tjenester som er relevante for norsk offentlig sektor, inkludert metrikkvalg, cooldown-perioder, kapasitetsplanlegging og kostnadsoptimalisering gjennom intelligent skalering.
|
|
|
|
## Grunnleggende skaleringstyper
|
|
|
|
### Horisontal vs. vertikal skalering
|
|
|
|
| Aspekt | Horisontal (scale out/in) | Vertikal (scale up/down) |
|
|
|--------|--------------------------|--------------------------|
|
|
| Metode | Legge til/fjerne instanser | Endre storrelse pa instans |
|
|
| Nedetid | Ingen | Ofte nodvendig |
|
|
| Grense | Tilnaermet ubegrenset | Storste tilgjengelige VM |
|
|
| Automatisering | Fullt automatisert | Vanskelig a automatisere |
|
|
| Anbefalt for AI | Ja (foretrekkes) | Kun initiell sizing |
|
|
|
|
**Anbefaling:** Bruk horisontal skalering for alle AI-arbeidslaster. Vertikal skalering bor kun brukes for initial sizing eller der applikasjonen ikke stotter flere instanser.
|
|
|
|
### Azure-tjenester med auto-scaling
|
|
|
|
| Tjeneste | Skaleringsmekanisme | Skaler til null | Maks instanser |
|
|
|----------|---------------------|-----------------|----------------|
|
|
| Azure Container Apps | KEDA (hendelsesdrevet) | Ja | 1000 |
|
|
| Azure Kubernetes Service | HPA/KEDA + Cluster Autoscaler | Nei (min 1 node) | 5000 noder |
|
|
| Azure Functions | Innebygd auto-scale | Ja (Consumption) | 200 (Consumption) |
|
|
| Azure App Service | Azure Monitor autoscale | Nei | 30 (Standard) |
|
|
| VM Scale Sets | Azure Monitor autoscale | Nei | 1000 |
|
|
|
|
## Azure Container Apps for AI-arbeidslaster
|
|
|
|
### KEDA-basert skalering
|
|
|
|
Azure Container Apps bruker KEDA (Kubernetes Event-driven Autoscaling) for deklarativ, hendelsesdrevet skalering:
|
|
|
|
```json
|
|
{
|
|
"properties": {
|
|
"template": {
|
|
"containers": [
|
|
{
|
|
"name": "ai-inference-service",
|
|
"image": "myregistry.azurecr.io/ai-inference:latest",
|
|
"resources": {
|
|
"cpu": 2.0,
|
|
"memory": "4Gi"
|
|
}
|
|
}
|
|
],
|
|
"scale": {
|
|
"minReplicas": 1,
|
|
"maxReplicas": 50,
|
|
"rules": [
|
|
{
|
|
"name": "http-scaling",
|
|
"http": {
|
|
"metadata": {
|
|
"concurrentRequests": "10"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "queue-scaling",
|
|
"custom": {
|
|
"type": "azure-servicebus",
|
|
"metadata": {
|
|
"queueName": "ai-processing-queue",
|
|
"namespace": "ddt-ai-servicebus",
|
|
"messageCount": "5"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Skaleringsoppforsel
|
|
|
|
Container Apps folger disse standardverdiene:
|
|
|
|
| Parameter | Verdi | Beskrivelse |
|
|
|-----------|-------|-------------|
|
|
| Polling interval | 30 sekunder | Hvor ofte KEDA spoerrer hendelseskilder |
|
|
| Cool down period | 300 sekunder | Ventetid for nedskalering til minimum etter siste hendelse |
|
|
| Scale up stabilization | 0 sekunder | Ingen ventetid for oppskalering |
|
|
| Scale down stabilization | 300 sekunder | Ventetid for nedskalering |
|
|
| Scale up step | 1, 4, 8, 16, 32... | Eksponentiell oppskalering |
|
|
| Scale down step | 100% | Alle unodvendige replikaer fjernes |
|
|
| Skaleringsalgoritme | `ceil(currentMetric / targetMetric)` | Beregner onskede replikaer |
|
|
|
|
### Skaleringseksempel
|
|
|
|
Med regelen `messageCount: 5` og 20 meldinger i ko:
|
|
|
|
```
|
|
desiredReplicas = ceil(20 / 5) = 4 replikaer
|
|
```
|
|
|
|
Tidslinje for oppskalering:
|
|
```
|
|
T+0s: 0 replikaer (idle)
|
|
T+30s: KEDA oppdager 20 meldinger -> starter 1 replika
|
|
T+60s: Fortsatt meldinger -> skalerer til 4
|
|
T+90s: Flere meldinger -> skalerer til 8
|
|
T+120s: Ytterligere -> skalerer til 16 (om nodvendig)
|
|
...
|
|
T+N: Koen er tom
|
|
T+N+300s: Cool down utloper -> skalerer ned til minReplicas
|
|
```
|
|
|
|
### HTTP-basert skalering for AI API
|
|
|
|
```json
|
|
{
|
|
"scale": {
|
|
"minReplicas": 2,
|
|
"maxReplicas": 100,
|
|
"rules": [
|
|
{
|
|
"name": "ai-api-http",
|
|
"http": {
|
|
"metadata": {
|
|
"concurrentRequests": "5"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
**Viktig for AI-tjenester:** Sett `concurrentRequests` lavt (3-10) fordi AI-inferens er CPU/GPU-intensivt. Standard web-applikasjoner taler 50-100 samtidige requests, men AI-endepunkter overbelastes raskt.
|
|
|
|
### Bicep-mal for AI Container App
|
|
|
|
```bicep
|
|
resource aiService 'Microsoft.App/containerApps@2023-05-01' = {
|
|
name: 'ai-inference-service'
|
|
location: 'swedencentral'
|
|
properties: {
|
|
environmentId: containerAppEnv.id
|
|
configuration: {
|
|
ingress: {
|
|
external: true
|
|
targetPort: 8000
|
|
transport: 'http'
|
|
}
|
|
}
|
|
template: {
|
|
containers: [
|
|
{
|
|
name: 'inference'
|
|
image: '${acrName}.azurecr.io/ai-inference:latest'
|
|
resources: {
|
|
cpu: json('2.0')
|
|
memory: '4Gi'
|
|
}
|
|
probes: [
|
|
{
|
|
type: 'Readiness'
|
|
httpGet: {
|
|
path: '/health'
|
|
port: 8000
|
|
}
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 5
|
|
}
|
|
]
|
|
}
|
|
]
|
|
scale: {
|
|
minReplicas: 2 // Alltid minst 2 for HA
|
|
maxReplicas: 50
|
|
rules: [
|
|
{
|
|
name: 'http-rule'
|
|
http: {
|
|
metadata: {
|
|
concurrentRequests: '8'
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Skaleringsmetrikker og triggere
|
|
|
|
### Valg av riktige metrikker
|
|
|
|
| Metrikk | Best for | Fordeler | Ulemper |
|
|
|---------|---------|----------|---------|
|
|
| HTTP concurrent requests | API-endepunkter | Direkte relatert til last | Skalerer ikke for bakgrunnsoppgaver |
|
|
| Ko-lengde (Service Bus) | Asynkron prosessering | Presist for batch | Kan ikke fange CPU-belastning |
|
|
| CPU-bruk | Generelt | Universelt | Reaktivt, ikke proaktivt |
|
|
| Minne-bruk | ML-modeller | Fanger OOM-risiko | Sent signal |
|
|
| Tilpasset metrikk | Spesifikke behov | Presist for brukstilfelle | Krever instrumentering |
|
|
|
|
### Hendelsesdrevne triggere for AI
|
|
|
|
```json
|
|
{
|
|
"scale": {
|
|
"minReplicas": 0,
|
|
"maxReplicas": 100,
|
|
"rules": [
|
|
{
|
|
"name": "servicebus-trigger",
|
|
"custom": {
|
|
"type": "azure-servicebus",
|
|
"metadata": {
|
|
"queueName": "document-analysis",
|
|
"namespace": "ddt-ai-bus",
|
|
"messageCount": "3"
|
|
},
|
|
"auth": [
|
|
{
|
|
"secretRef": "servicebus-connection",
|
|
"triggerParameter": "connection"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "storage-queue-trigger",
|
|
"custom": {
|
|
"type": "azure-queue",
|
|
"metadata": {
|
|
"queueName": "image-processing",
|
|
"accountName": "svvaistorage",
|
|
"queueLength": "5"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Azure Monitor Autoscale for VM Scale Sets
|
|
|
|
For GPU-baserte AI-arbeidslaster pa VM Scale Sets:
|
|
|
|
```json
|
|
{
|
|
"properties": {
|
|
"profiles": [
|
|
{
|
|
"name": "AI-Inference-Profile",
|
|
"capacity": {
|
|
"minimum": "2",
|
|
"maximum": "20",
|
|
"default": "2"
|
|
},
|
|
"rules": [
|
|
{
|
|
"metricTrigger": {
|
|
"metricName": "Percentage CPU",
|
|
"metricResourceUri": "/subscriptions/.../vmScaleSets/ai-gpu-cluster",
|
|
"timeGrain": "PT1M",
|
|
"statistic": "Average",
|
|
"timeWindow": "PT5M",
|
|
"timeAggregation": "Average",
|
|
"operator": "GreaterThan",
|
|
"threshold": 70
|
|
},
|
|
"scaleAction": {
|
|
"direction": "Increase",
|
|
"type": "ChangeCount",
|
|
"value": "2",
|
|
"cooldown": "PT5M"
|
|
}
|
|
},
|
|
{
|
|
"metricTrigger": {
|
|
"metricName": "Percentage CPU",
|
|
"metricResourceUri": "/subscriptions/.../vmScaleSets/ai-gpu-cluster",
|
|
"timeGrain": "PT1M",
|
|
"statistic": "Average",
|
|
"timeWindow": "PT10M",
|
|
"timeAggregation": "Average",
|
|
"operator": "LessThan",
|
|
"threshold": 30
|
|
},
|
|
"scaleAction": {
|
|
"direction": "Decrease",
|
|
"type": "ChangeCount",
|
|
"value": "1",
|
|
"cooldown": "PT10M"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Cooldown-perioder og stabilisering
|
|
|
|
### Forstaa cooldown
|
|
|
|
Cooldown-perioder forhindrer "flapping" (rask opp- og nedskalering):
|
|
|
|
| Scenario | Anbefalt cooldown | Begrunnelse |
|
|
|----------|-------------------|-------------|
|
|
| AI-chatbot API | 3-5 min oppskalering, 10 min nedskalering | Rask respons pa trafikk, langsom nedtrapping |
|
|
| Batch-prosessering | 1 min oppskalering, 5 min nedskalering | Rask oppskalering for koproseering |
|
|
| GPU-inferens | 5-10 min oppskalering, 15-30 min nedskalering | VM-oppstart tar tid |
|
|
| RAG-pipeline | 3 min oppskalering, 10 min nedskalering | Balanse mellom respons og kostnad |
|
|
|
|
### Tidsbasert skalering (schedule)
|
|
|
|
For forutsigbare trafikkmonstre i offentlig sektor:
|
|
|
|
```json
|
|
{
|
|
"profiles": [
|
|
{
|
|
"name": "Arbeidstid",
|
|
"capacity": {
|
|
"minimum": "5",
|
|
"maximum": "50",
|
|
"default": "10"
|
|
},
|
|
"recurrence": {
|
|
"frequency": "Week",
|
|
"schedule": {
|
|
"timeZone": "W. Europe Standard Time",
|
|
"days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
|
"hours": [7],
|
|
"minutes": [0]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "Kveld-og-helg",
|
|
"capacity": {
|
|
"minimum": "1",
|
|
"maximum": "10",
|
|
"default": "2"
|
|
},
|
|
"recurrence": {
|
|
"frequency": "Week",
|
|
"schedule": {
|
|
"timeZone": "W. Europe Standard Time",
|
|
"days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
|
"hours": [17],
|
|
"minutes": [0]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Kombinert tidsbasert + reaktiv skalering
|
|
|
|
Den mest effektive strategien kombinerer begge:
|
|
|
|
```
|
|
Arbeidstid (07-17):
|
|
Baseline: 10 instanser (schedule)
|
|
Reaktiv: Skaler til 50 ved CPU > 70% (auto)
|
|
|
|
Kveld (17-07):
|
|
Baseline: 2 instanser (schedule)
|
|
Reaktiv: Skaler til 10 ved CPU > 70% (auto)
|
|
|
|
Spesielle perioder (hoeringsfrister, arsoppgjor):
|
|
Baseline: 20 instanser (manuelt justert schedule)
|
|
Reaktiv: Skaler til 100 ved behov (auto)
|
|
```
|
|
|
|
## Kapasitetsplanlegging
|
|
|
|
### Dimensjonering av AI-arbeidslaster
|
|
|
|
For a dimensjonere riktig, kartlegg disse parameterne:
|
|
|
|
| Parameter | Metode | Eksempel |
|
|
|-----------|--------|---------|
|
|
| Gjennomsnittlig requests/sek | Historisk data, Azure Monitor | 50 req/s i arbeidstid |
|
|
| Topp-requests/sek | P99 fra historisk data | 200 req/s (4x gjennomsnitt) |
|
|
| Request-varighet | Application Insights | 2-5 sek per AI-kall |
|
|
| Concurrent users | Estimat basert pa ansatte/innbyggere | 500 samtidige |
|
|
| Token throughput | Azure OpenAI-metrikker | 100K TPM |
|
|
|
|
### Kapasitetsformel
|
|
|
|
```
|
|
Nodvendige instanser = ceil(
|
|
(topp_requests_per_sekund * gjennomsnittlig_request_tid) /
|
|
concurrent_capacity_per_instans
|
|
)
|
|
|
|
Eksempel:
|
|
200 req/s * 3 sek = 600 samtidige requests
|
|
Hver instans handterer 10 samtidige = 60 instanser
|
|
+ 20% buffer = 72 instanser (maks)
|
|
Baseline: 20 instanser (gjennomsnittlig last)
|
|
```
|
|
|
|
### Azure Load Testing for AI-endepunkter
|
|
|
|
```yaml
|
|
# Azure Load Testing konfigurasjon
|
|
version: v0.1
|
|
testId: ai-endpoint-load-test
|
|
testPlan: ai-load-test.jmx
|
|
engineInstances: 5
|
|
configuration:
|
|
env:
|
|
- name: ENDPOINT_URL
|
|
value: https://ai-service.swedencentral.azurecontainerapps.io
|
|
- name: CONCURRENT_USERS
|
|
value: "100"
|
|
- name: RAMP_UP_SECONDS
|
|
value: "60"
|
|
- name: TEST_DURATION_SECONDS
|
|
value: "300"
|
|
failureCriteria:
|
|
- avg(response_time_ms) > 5000
|
|
- percentage(error) > 5
|
|
- p99(response_time_ms) > 15000
|
|
```
|
|
|
|
## Kostnadsoptimalisering gjennom skalering
|
|
|
|
### Strategier for kostnadskontroll
|
|
|
|
| Strategi | Beskrivelse | Besparelse |
|
|
|----------|-------------|-----------|
|
|
| Scale to zero | Sett minReplicas=0 for ikke-kritiske tjenester | 100% i tomgangstid |
|
|
| Spot/Preemptible VMs | Bruk for batch-prosessering og trening | 60-90% |
|
|
| Reserved Instances | 1- eller 3-ars commitment for baseline | 30-60% |
|
|
| Scheduling | Reduser kapasitet utenfor arbeidstid | 40-60% |
|
|
| Right-sizing | Bruk minste nodvendige VM-storrelse | 20-40% |
|
|
| GPU-deling | Dele GPU mellom flere tjenester | 50-70% |
|
|
|
|
### Container Apps kostnadskontroll
|
|
|
|
```json
|
|
{
|
|
"scale": {
|
|
"minReplicas": 0,
|
|
"maxReplicas": 20,
|
|
"rules": [
|
|
{
|
|
"name": "cost-optimized-http",
|
|
"http": {
|
|
"metadata": {
|
|
"concurrentRequests": "15"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
**Faktureringsregler for Container Apps:**
|
|
- **0 replikaer:** Ingen fakturering
|
|
- **Idle replikaer (i minne, ingen prosessering):** Lavere "idle"-sats
|
|
- **Aktive replikaer:** Full fakturering
|
|
|
|
### Azure Savings Plans
|
|
|
|
For forutsigbar baseline-bruk:
|
|
|
|
```
|
|
Eksempel: AI-tjeneste med 10 instanser baseline
|
|
- Pay-as-you-go: 10 * $0.50/time = $120/dag
|
|
- 1-ars Savings Plan: 10 * $0.35/time = $84/dag (30% besparelse)
|
|
- 3-ars Savings Plan: 10 * $0.25/time = $60/dag (50% besparelse)
|
|
```
|
|
|
|
## Azure OpenAI-spesifikk skalering
|
|
|
|
### PTU vs. Standard for variabel last
|
|
|
|
For Azure OpenAI er skaleringsmodellen annerledes enn tradisjonell infrastruktur:
|
|
|
|
| Lastprofil | Anbefalt deployment | Begrunnelse |
|
|
|-----------|-------------------|-------------|
|
|
| Stabil, forutsigbar | PTU (100% baseline) | Lavest kostnad og latens |
|
|
| Variabel med kjent baseline | PTU + Standard spillover | PTU for baseline, Standard for topper |
|
|
| Svart variabel | Standard | Betal kun for bruk |
|
|
| Batch-prosessering | Global Batch | 50% rabatt, separat kvote |
|
|
|
|
### Smart load balancing med prioriteter
|
|
|
|
```python
|
|
# Arkitektur: PTU som primar, Standard som fallback
|
|
BACKENDS = [
|
|
{
|
|
"name": "ptu-sweden",
|
|
"url": "https://aoai-ptu-sweden.openai.azure.com/",
|
|
"priority": 1, # Forst: Bruk PTU-kapasitet
|
|
"type": "ptu"
|
|
},
|
|
{
|
|
"name": "standard-sweden",
|
|
"url": "https://aoai-std-sweden.openai.azure.com/",
|
|
"priority": 2, # Fallback: Standard i samme region
|
|
"type": "standard"
|
|
},
|
|
{
|
|
"name": "standard-northeurope",
|
|
"url": "https://aoai-std-ne.openai.azure.com/",
|
|
"priority": 3, # Siste utvei: Annen region
|
|
"type": "standard"
|
|
}
|
|
]
|
|
```
|
|
|
|
## Overvaking av skalering
|
|
|
|
### Viktige metrikker
|
|
|
|
| Metrikk | Kilde | Terskel |
|
|
|---------|-------|---------|
|
|
| Replica count | Container Apps metrics | Varsle ved >80% av maks |
|
|
| CPU utilization per replica | Container Apps metrics | Varsle ved >80% |
|
|
| Request queue length | Service Bus metrics | Varsle ved >100 meldinger |
|
|
| Scale events | Activity Log | Spoer frekvens |
|
|
| Failed scale operations | Activity Log | Varsle umiddelbart |
|
|
| Cost per day | Cost Management | Varsle ved budsjettgrense |
|
|
|
|
### KQL for skaleringsanalyse
|
|
|
|
```kusto
|
|
// Analyse av skaleringsaktivitet
|
|
ContainerAppSystemLogs
|
|
| where RevisionName contains "ai-inference"
|
|
| where Log contains "Scaling"
|
|
| summarize
|
|
scale_up_events = countif(Log contains "scaling up"),
|
|
scale_down_events = countif(Log contains "scaling down"),
|
|
max_replicas = max(toint(extract("replicas=(\\d+)", 1, Log)))
|
|
by bin(TimeGenerated, 1h)
|
|
| order by TimeGenerated desc
|
|
```
|
|
|
|
## Sjekkliste for auto-scaling
|
|
|
|
| Nr | Tiltak | Prioritet |
|
|
|----|--------|-----------|
|
|
| 1 | Definer SLA/SLO for responstid | Kritisk |
|
|
| 2 | Velg riktig skaleringsmetrikk for arbeidslast | Kritisk |
|
|
| 3 | Sett fornuftig minReplicas (0 for ikke-kritisk, 2+ for HA) | Hoy |
|
|
| 4 | Konfigurer cooldown-perioder for a unnga flapping | Hoy |
|
|
| 5 | Implementer tidsbasert skalering for kjente monstre | Medium |
|
|
| 6 | Last-test for a validere skaleringsparametere | Medium |
|
|
| 7 | Sett opp kostnadsalarmer for a fange runaway-skalering | Medium |
|
|
| 8 | Bruk readiness probes for a sikre healthy instanser | Medium |
|
|
| 9 | Implementer graceful shutdown for lange AI-operasjoner | Medium |
|
|
| 10 | Dokumenter skaleringslogikk i ADR | Anbefalt |
|
|
|
|
## For Cosmo
|
|
|
|
- **Horisontal skalering er standard** for AI-arbeidslaster. Azure Container Apps med KEDA er forstevalgdet for mikrotjenester og API-lag. VM Scale Sets for GPU-tunge arbeidslaster.
|
|
- **Kombinert schedule + reaktiv skalering** gir best resultat for offentlig sektor: forutsigbar baseline i arbeidstid, lav kapasitet pa kveld/helg, med reaktiv oppskalering for uforutsette topper.
|
|
- **Scale to zero reduserer kostnader dramatisk** for utviklings- og testmiljoer. I produksjon, hold minimum 2 replikaer for hoy tilgjengelighet.
|
|
- **AI-endepunkter krever lavere concurrency-terskel** enn vanlige web-APIer. Sett concurrentRequests til 3-10, ikke 50-100 som for tradisjonelle tjenester.
|
|
- **PTU + Standard spillover** er den mest kostnadseffektive arkitekturen for Azure OpenAI med variabel last. PTU for baseline, Standard for topper, Global Batch for asynkron prosessering.
|