Serverless funksiyaları və cold start
1) cold start nədir və niyə yaranır
Cold start - hadisəni emal etməzdən əvvəl yeni bir performans izolyasiyası (sandbox/konteyner/mikro-VM) yaradarkən əlavə gizlilik. Tipik konveyer:1. Allocation mühit (konteyner/mikro-VM, yükləmə runtime).
2. VPC/ENI, sirləri, faylları, konfiqurasiyaları birləşdirin.
3. Kodun başlanğıcı (modulların idxalı, DB-yə qoşulma, modellərin yüklənməsi).
4. Handler icrası.
Warm start (reuse) 1-3 addımlarını qaçırır. cold start ehtimalı pik, fasilədən sonra, paralellik artdıqda və kod/konfiqurasiyalar yeniləndikdə artır.
2) Ölçmək və məqsəd qoymaq (SLO)
Metriklər: 'init _ duration' (başlanğıc), 'duration _ total', «soyuq başlanğıc payı», p95/p99 latency, fasilədən sonra asılılıq xətaları.
Telemetriya çıxarılması: platforma qeydləri + öz etiketləri (məsələn, 'context' varsa 'cold = true/false'. isColdStart 'və ya statik qapalı öz bayrağı).
SLO hədəfləri (nümunə): API «giriş» p95 ≤ 200 ms, cold payı ≤ 3%; fon tapşırıqları - p95 ≤ 1 s. «Pul» marşrutları üçün - ayrı-ayrılıqda, daha sərt.
3) cold start aşağı əsas qolları
3. 1 Konkarrensi və qızdırma nəzarəti
Provisioned Concurrency/Min Instances: N isti mühit saxlayır. Kritik qələmlər üçün istifadə edin.
Warmers/Isınma: planlı zənglər (cron/scheduler) workers isti saxlamaq üçün. Bunu ağıllı edin (region, vaxt, yük).
Burst Buferlər: Gözlənilən zirvələrdən əvvəl əvvəlcədən paralellik limitini artırın.
3. 2 Qablaşdırma və asılılıq
Kiçik deploy-artefakt: tree-shaking, '--only prod' asılılığı, böyük lib üçün qatlar (AWS Layers).
Lazy-init: ilk girişdə handler daxilində ağır modulları idxal edin; əlaqələri tənbəlliklə açın.
Heat Resources: warm start reuse-it qlobal sahədə SDK/Connection müştəriləri cache.
3. 3 Şəbəkə və VPC
VPC olmadan, özəlliyə ehtiyacı olmayan funksiyalar üçün (əks halda ENI-attach onlarla və yüzlərlə ms əlavə edir).
VPC tələb olunursa - VPC-ekonom provayder rejimi (ENI-pullar/optimizasiya), DB-yə proxy (RDS Proxy/Cloud SQL Auth Proxy) və connection pooling istifadə edin.
3. 4 Dillər və rantaylar
Node. js/Go ən sürətli başlayır; Python - adətən sürətli, lakin böyük idxallara həssasdır; Java/.NET - GraalVM/AOT və profil olmadan daha çətindir.
JVM üçün SnapStart/CRaC/Graal Native; üçün. NET — trimmed Self-Contained.
3. 5 Başlanğıc və state
Bahalı başlanğıc huk (init phase), sorğu yolu deyil.
Yerli cache (TTL) ilə on-demand konfiqurasiya/secrets download tətbiq edin.
Xüsusi state yaddaşda saxlamayın - yalnız cash siqnalları/konnektorlar.
4) cold start təsirini azaldan memarlıq nümunələri
4. 1 Asinxron və növbələr
Sorğunu qəbul edin → doğrulayın → növbəyə/şinə qoyun (SQS/PubSub/Queue Storage) → cavab verin 202/Accepted → arxa planda işləyin.
Qeyri-aktiv əməliyyatlar (ödənişlər, hesablamalar, ağır hesablamalar) üçün uyğundur.
4. 2 Precompute/Pre-cache
Tetik (CRON/hadisə) və KV/cache/edge saxlama üçün əvvəlcədən giriş/kataloq/fich bayraq Generation.
4. 3 Fan-out/Fan-in
Uzun əməliyyatı bir neçə qısa funksiyaya bölürük (Map/Reduce kimi) → daha az vaxt və təkrar cold riski.
4. 4 Edge-offload
Sadə yoxlamalar (JWT/HMAC, geo-redirect, antibot) RTT-yə qənaət etmək və origin-i boşaltmaq üçün edge-də (Workers/Functions @Edge) həyata keçirilir.
5) Təcrübə: konfiqlər və üsullar
5. 1 AWS Lambda (provisioned + RDS Proxy)
hcl
Terraform sketch: enable provisioned concurrency on the sales version of the resource "aws_lambda_provisioned_concurrency_config" "api" {
function_name = aws_lambda_function. api. function_name qualifier = aws_lambda_alias. prod. name provisioned_concurrent_executions = 20
}
RDS Proxy for connection pool "aws_db_proxy" "rds_proxy" {
name = "pg-proxy"
engine_family = "POSTGRESQL"
idle_client_timeout = 1800 require_tls = true
}
Node. js (tənbəl başlanğıc və reuse):
js let pgClient ;//reuse between warm runs let cold = true;
exports. handler = async (event, ctx) => {
const isCold = cold; cold = false;
if (!pgClient) {
const { Client } = await import('pg'); // lazy import pgClient = new Client({ host: process. env. PG_PROXY, ssl: true });
await pgClient. connect();
}
const t0 = Date. now();
const data = await pgClient. query('select 1');
return {
statusCode: 200,
headers: { 'x-cold-start': String(isCold), 'x-elapsed-ms': String(Date. now()-t0) },
body: JSON. stringify({ ok: true })
};
};
5. 2 GCP Cloud Run / Cloud Functions (min instances)
yaml
Cloud Run service. yaml apiVersion: serving. knative. dev/v1 kind: Service metadata: { name: api }
spec:
template:
metadata:
annotations:
autoscaling. knative. dev/minScale: "5" # keep warm run containers. googleapis. com/cpu-throttling: "false"
spec:
containerConcurrency: 80 containers:
- image: gcr. io/proj/api:latest env:
- { name: DB_HOST, value: "10. 0. 0. 5" }
5. 3 Azure Functions (AlwaysOn/PreWarm)
AlwaysOn ilə Premium/Elastic planları; pre-warmed instances ≥ proqnoz p95 paralellik.
6) Taymaut, retraj, son tarix
Ümumi son tarix (client-side) başlıq ('x-deadline-ms '/' grpc-timeout') vasitəsilə ötürülür, funksiya daxilində 'per-hop timeout' qısaldılır.
Yalnız idempotent əməliyyatlar üçün təkrar; Idempotency-Key və duplication istifadə edin.
Ön API üçün - hedging (p90-dan sonra təkrarlanan sorğu) və uzun müddətli asılılıqlar üçün circuit breaker.
7) DB/Caches/Secrets ilə işləmək
Pool/proxy (RDS Proxy/Cloud SQL Proxy/pgBouncer) əvəzinə minlərlə qısa konnektlər.
Qısa TTL Secret + fon yeniləmə ilə yaddaş cache.
Cache (Redis/Memcached/KV): init üçün «ağır» qovluqları əlavə, lakin vaxt məhdudiyyəti ilə.
8) Kodun təşkili və yığılması
Dar use case üçün ayrı-ayrı hendlerlər; bir «qalın» bandl = uzun init.
ESBuild/Rollup: istifadə olunmayan istisna, yalnız kritik birləşdirin.
Layers/Extensions (Layers/Extensions) - böyük lib (OpenSSL modelləri, SDK) üçün provayder cache yenidən istifadə.
9) Test və simulyasiya zirvələri
«Soyuq» başlanğıc sintetikası: min instances-i zorla söndürün və paralel trafiki addımlarla idarə edin.
A/B: cold, p95 payını, DB/Secrets üçün konnect səhvini, xərcləri müqayisə edin.
GameDay: pik yük × 2 tarixi maksimum, isitmə dayandırılması.
10) Qiymət (FinOps)
Min instances/provisioned concurrency pula başa gəlir - yalnız isti marşrutlar üçün daxil edin.
Yerinə yetirmə müddətini azaltın: cache, qısa vaxt, lazımsız SDK-dan imtina.
Egress (xarici API çağırışlar) və log (log həcmi cold zirvələrində sürətlə artır) nəzərə alın.
11) Antipattern
Bir meqabayt asılılığı ilə bir monolit handler.
Hər çağırışda məcburi DB bağlantısı (reuse/proxy olmadan).
Bütün funksiyalar üçün VPC «hər halda».
Uzun taymautlar və kor retrasiyalar → «quyruqlar» və fantom yazılar.
Gecə-gündüz «hər şeyi» qızdırmaq.
Sorğu yolunda gizli başlanğıc (lent init> 100 ms - init/cache çıxarın).
12) iGaming/Maliyyə Xüsusiyyətləri
Pul yolları (depozitlər/nəticələr): provisioned/min instances saxlamaq, ayrı SLO, ciddi vaxt və təkrarlama məhdudlaşdırılması (idempotentlik tələb olunur).
KYC/PSP: Qeyri-sabit xarici API - queue + worker, ön - 202/polling/webhook.
Tənzimləyici və audit: dəyişməz qeydlər (WORM), 'Idempotency-Key' daxil olan hadisələr jurnalı, 'trace _ id' korrelyasiyası.
Data residency: PII emal funksiyaları regional hesablarda/layihələrdə yerləşdirilir; PII ilə heç bir edge cache.
13) Prod hazırlıq yoxlama siyahısı
- SLI/SLO müəyyən: p95/p99, cold payı, marşrutlar üzrə hədəf dəyərləri.
- Kritik funksiyalarda provisioned/min instances daxildir; konkarrensi proqnozu.
- Bandle minimuma endirilib; ağır liblər qatlara çıxarılır; lazy-import/başlanğıc.
- SDK/DB müştərilərin Reuse; RDS/SQL Proxy; qoşulma hovuzu.
- VPC yalnız lazım olan yerdə; ENI/proxy optimallaşdırılmışdır; menecer vasitəsilə sirləri + TTL yerli cache.
- Taymauts/deadline/retrains: backoff + jitter; yalnız idempotent təkrarlamalar.
- Sintetik «cold» + yük testləri; cold və p99 payının böyüməsi üçün risklər.
- Runbooks: provisioned artırmaq üçün necə, minScale dəyişdirmək üçün necə, deqradasiya daxil necə.
- iGaming üçün: ayrı SLO/dashboard «pul yolları», Idempotency-Key, WORM audit.
14) TL; DR
Cold start qaçılmazdır, amma idarə edin: isti instansiyaları vacib olduğu yerdə saxlayın, bandlları azaltın, lazy-init və reuse bağlantılarını tətbiq edin, lazımsız VPC-dən qaçın, ağır növbə əməliyyatlarını/işçiləri çıxarın və yüngül qaydalar üçün edge istifadə edin. Kritik maliyyə yolları üçün - ayrı-ayrı SLO, idempotentlik və ciddi taymautlar; cold payını ölçün və isitməni yalnız ödədiyi yerdə yandırın.