Sunucusuz fonksiyonlar ve soğuk başlangıç
1) Soğuk başlangıç nedir ve neden oluşur
Soğuk başlangıç - olayı işlemeden önce yeni bir yürütme yalıtımı (sandbox/container/micro-VM) oluştururken ek gecikme. Tipik konveyör:1. Orta ayırma (konteyner/mikro VM, çalışma zamanı yükleme).
2. VPC/ENI hazırlama, sırlar, dosyalar, yapılandırma.
3. Kod başlatma (modüllerin içe aktarılması, veritabanına bağlantı, modellerin yüklenmesi).
4. Denetleyici infazı.
Sıcak başlangıç (yeniden kullanım) 1-3 adımlarını atlar. Soğuk başlangıç olasılığı, aksama süresinden sonra, artan paralellik ve kod/yapılandırma güncellemeleri ile zirvelerde artar.
2) Nasıl ölçülür ve hedeflenir (SLO)
Metrikler: 'Init _ duration' (başlatma), 'duration _ total', "share of cold starts", p95/p99 gecikme, kapalı kalma süresinden sonra bağımlılıklara bağlanma hatası.
Telemetri kaldırma: platform günlükleri + kendi etiketleri (örneğin, 'cold = true/false' eğer bir 'context' varsa. IsColdStart 'veya statik kapanışta kendi bayrağı).
SLO hedefleri (örnek): API "oturum açma" p95 ≤ 200 ms, soğuk pay ≤ %3; Arka plan işleri - p95 ≤ 1. "Para" yolları için - ayrı, daha sıkı.
3) Soğuk başlangıç indiriminin ana kolları
3. 1 Concarrency kontrolü ve ısıtma
Sağlanan Eşzamanlılık/Min Örnekleri: N sıcak ortamları tutar. Kritik tutamaklar için kullanın.
Isınma/ısınma: Çalışanları sıcak tutmak için zamanlanmış çağrılar (cron/scheduler). Akıllıca yapın (bölge, zaman, yük).
Patlama arabellekleri: Beklenen zirvelerden önce eşzamanlılık sınırını önceden yükseltin.
3. 2 Paketleme ve bağımlılıklar
Small deploy-artifact: tree-shaking, '-only prod' dependencies, layers (AWS Layers) for large libs.
Lazy-init: ilk erişimde işleyicinin içindeki ağır modülleri içe aktarın; tembel açık bağlantılar.
Sıcak kaynaklar: Sıcak başlangıçta yeniden kullanmak için global kapsamdaki SDK/bağlantı istemcilerini önbelleğe alın.
3. 3 Ağ ve VPC
Gizliliğe ihtiyaç duymayan işlevler için VPC olmadan (aksi takdirde ENI-attach yüzlerce ms'ye onlarca ekler).
VPC gerekiyorsa, sağlayıcının VPC ekonomi modunu (ENI havuzları/optimizasyonu), veritabanına proxy'yi (RDS Proxy/Cloud SQL Auth Proxy) ve bağlantı havuzunu kullanın.
3. 4 Diller ve Çalışma Zamanları
Düğüm noktası. js/En hızlı başla; Python - genellikle hızlı ancak büyük ithalatlara duyarlı; Java/.NET, GraalVM/AOT ve profilleme olmadan daha ağırdır.
JVM için, SnapStart/CRaC/Graal Native'i düşünün; için. NET - kesilmiş Kendi Kendine Yeten.
3. 5 Başlatma ve durum
Başlatma kancasına (init aşaması) pahalı başlatma koyun ve istek yoluna değil.
Yerel önbellek (TTL) ile yapılandırmaların/sırların isteğe bağlı yüklenmesini kullanın.
Kullanıcı durumunu bellekte saklamayın - yalnızca önbellek sinyalleri/konektörleri.
4) Soğuk başlangıcın etkisini azaltan mimari desenler
4. 1 Asynchron ve kuyruklar
İsteği kabul ediyoruz - onaylayın - sıraya/veri yoluna koyun (SQS/PubSub/Queue Storage) - 202/Accepted cevaplayın - arka planla işleyin.
Etkileşimli olmayan işlemler için uygundur (ödemeler, raporlar, ağır hesaplamalar).
4. 2 Ön hesaplama/Ön önbellek
Tetikleyicilere (CRON/events) ve KV/cache/edge'de depolamaya göre önceden erişim/dizin/özellik bayraklarının oluşturulması.
4. 3 Fan çıkışı/Fan girişi
Uzun bir işlemi birkaç kısa fonksiyona bölüyoruz (Map/Reduce benzeri) - daha az zaman aşımı ve tekrarlanan soğuk riski.
4. 4 Kenar aktarımı
En basit kontroller (JWT/HMAC, geo-yönlendirme, antiboot), RTT'yi kaydetmek ve kaynağı boşaltmak için kenarda (Workers/Functions @ Edge) gerçekleştirilir.
5) Uygulama: yapılandırmalar ve teknikler
5. 1 AWS Lambda (sağlanan + 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
}
Düğüm noktası. js (tembel başlatma ve yeniden kullanma):
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 Bulut Çalıştırma/Bulut İşlevleri (en az örnek)
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 İşlevleri (AlwaysOn/PreWarm)
AlwaysOn ile Premium/Elastic planlar; Önceden ısıtılmış örnekler ≥ öngörücü p95 eşzamanlılığı.
6) Zaman aşımları, geri çekilmeler, son tarihler
Genel son teslim tarihini (istemci tarafı) başlıktan ('x-deadline-ms'/' grpc-timeout') geçirin, işlevin içindeki 'per-hop timeout'u kısaltın.
Sadece idempotent işlemler için tekrarlar; Idempotency-Key ve veri tekilleştirme kullanın.
Ön API için - hedging (p90'dan sonra yinelenen istek) ve uzun mesafeli bağımlılıklar için devre kesici.
7) Veritabanları/önbellekler/sırlarla çalışmak
Binlerce kısa bağlantı yerine havuzlar/proxy'ler (RDS Proxy/Cloud SQL Proxy/pgBouncer).
Arka plan güncellemesi ile bellek önbelleğinde kısa TTL gizli +.
Önbellek (Redis/Memcached/KV): init'e'ağır "dizinler yükleniyor, ancak zaman sınırı var.
8) Kod organizasyonu ve montajı
Dar kullanım durumları için ayrı işleyiciler; Bir "kalın" demet = long init.
ESBuild/Rollup: Kullanılmayanları hariç tutar, yalnızca kritik olanları birleştirir.
Katmanlar/Uzantılar - sağlayıcının önbelleğini yeniden kullanmak için büyük libs (OpenSSL modelleri, SDK) için.
9) Tepe test ve simülasyon
"Soğuk" sentetikleri başlar: min örneklerini zorla kapatın ve paralel trafiği adımlar halinde sürün.
A/B: soğuk, p95, bağlantı hatası payını DB/sırlar, maliyetler ile karşılaştırın.
GameDay: Pik yük × 2 tüm zamanların en yüksek, ısınma kapalı.
10) Maliyet (FinOps)
Min örnekleri/sağlanan eşzamanlılık maliyet parası - yalnızca sıcak rotalar için etkinleştirin.
Çalışma süresini azaltın: önbellek, kısa zaman aşımları, gereksiz SDK'lerden kaçınma.
Çıkış (harici API'lere yapılan çağrılar) ve günlüğü (günlüklerin hacmi soğuk zirvelerde hızla büyür) düşünün.
11) Antipatterns
Onlarca megabayt bağımlılığa sahip tek bir monolitik işleyici.
Her çağrıda veritabanına zorunlu bağlantı (yeniden kullanım/proxy olmadan).
Tüm fonksiyonlar için VPC "sadece durumda".
Uzun zaman aşımları ve kör geri çekilmeler - "kuyruklar've hayalet yazmalar.
"Üst üste her şeyi" 24 saat ısıtmak.
İstek yolunda gizli başlatma (lentice init> 100 ms - init/cache'e aktarma).
12) iGaming/Finansın Özellikleri
Para yolları (para yatırma/çekme): sağlanan/min örneklerini, ayrı SLO'ları, zaman aşımlarının ve tekrarların katı bir şekilde sınırlandırılmasını (idempotency zorunludur) tutar.
KYC/PSP: kararsız harici API'ler - kuyruğa sarın + işçi, önde - 202/yoklama/webhook.
Düzenleyici ve denetim: değişmez günlükler (WORM), 'Idempotency-Key'ile gelen olay günlüğü, korelasyon' trace _ id '.
Veri ikametgahı: PII'yi bölgesel hesaplarda/projelerde işleyen işlevleri dağıtmak; PII ile kenar önbelleği yok.
13) Prod Hazırlık Kontrol Listesi
- SLI/SLO tanımlı: p95/p99, soğuk fraksiyon, rota hedefleri.
- Kritik fonksiyonlarda provizyon/min örnekleri etkinleştirildi; Concarrency tahmin.
- Paket minimize edildi; Ağır yüzler katmanlar halinde gerçekleştirilir; lazy-import/initialization.
- SDK/DB istemcilerini yeniden kullanın; RDS/SQL Proxy yapılandırılmıştır; bağlantı havuzu.
- VPC sadece gerektiğinde; ENI/proxy'ler optimize edilmiştir; Yönetici + yerel TTL önbelleği aracılığıyla sırlar.
- Zaman aşımları/son tarihler/geri çekilmeler: backoff + jitter; Sadece idempotent tekrarlar.
- Sentetikler "soğuk" + yük testleri; Soğuk ve p99 payında büyüme için uyarılar.
- Runbooks: provisioned nasıl artırılır, minScale nasıl değiştirilir, degradasyon nasıl dahil edilir.
- iGaming için: ayrı SLO/gösterge panoları "para yolları", Idempotency-Key, WORM denetimi.
14) TL; DR
Soğuk başlangıç kaçınılmazdır, ancak yönetilebilir: Önemli olan sıcak örnekleri tutun, paketi azaltın, tembel-init uygulayın ve bağlantıları yeniden kullanın, gereksiz VPC'den kaçının, hat/işçilerdeki ağır işlemleri çıkarın ve kolay kurallar için kenar kullanın. Kritik finansal yollar için - ayrı SLO'lar, idempotency ve katı zaman aşımları; Soğuğun payını ölçün ve ısınmayı yalnızca ödediği yerde açın.