GH GambleHub

Bezserwerowe funkcje i zimny start

1) Co to jest zimny start i dlaczego występuje

Zimny start - dodatkowa opóźnienie podczas tworzenia nowej izolacji wykonania (piaskownica/kontener/mikro-VM) przed przetworzeniem zdarzenia. Typowy przenośnik:

1. Średni przydział (kontener/mikro-VM, załadunek runtime).

2. Priming VPC/ENI, sekrety, pliki, konfiguracja.

3. Inicjalizacja kodu (import modułów, podłączenie do bazy danych, załadunek modeli).

4. Egzekucja opiekuna.

Ciepły start (ponowne użycie) pomija kroki 1-3. Prawdopodobieństwo zimnego startu wzrasta w szczytach, po przestojach, wraz ze wzrostem paralelizmu i aktualizacjami kodu/konfiguracji.

2) Sposób pomiaru i celu (SLO)

Metryki: 'init _ duration' (inicjalizacja), 'duration _ total', 'share of cold starts', p95/p99 latency, error łączący się z zależnościami po przestoju.
Usuwanie telemetrii: dzienniki platformy + własne etykiety (na przykład 'cold = true/false', jeśli istnieje 'context. isColdStart 'lub własną flagę w zamknięciu statycznym).
Cele SLO (przykład): API „login” p95 ≤ 200 ms, udział chłodu ≤ 3%; praca w tle - p95 ≤ 1 s. Dla tras „pieniądze” - oddzielne, bardziej rygorystyczne.

3) Główne dźwignie redukcji zimnego rozruchu

3. 1 Kontrola konkarrencji i ogrzewanie

Rezerwy Równoległości/Min Instances: Trzyma N ciepłe środowiska. Użyj do krytycznych uchwytów.
Podgrzewacze/rozgrzewki: zaplanowane połączenia (cron/scheduler), aby utrzymać pracowników ciepło. Zrób to mądrze (region, czas, obciążenie).
Bufory wybuchowe: Podnieść limit współistnienia z góry przed oczekiwanymi szczytami.

3. 2 Opakowania i zależności

Mały deploy-artefact: drzewo-wstrząsające, '--ly prod' zależności, warstwy (AWS Layers) dla dużych libów.
Leniwy-init: importować ciężkie moduły wewnątrz obsługi przy pierwszym dostępie; leniwie otwarte połączenia.
Ciepłe zasoby: pamięć podręczna SDK/klienci połączeń w globalnym zakresie do ponownego wykorzystania na ciepłym początku.

3. 3 Sieć i VPC

Bez VPC dla funkcji, które nie wymagają prywatności (w przeciwnym razie ENI-attach dodaje dziesiątki do setek ms).
Jeśli VPC jest wymagane, należy użyć trybu ekonomii VPC dostawcy (puli ENI/optymalizacja), proxy do bazy danych (Proxy RDS/Cloud SQL Auth Proxy) i łączenia połączeń.

3. 4 Języki i runtimes

Węzeł. js/Go rozpocząć najszybciej; Python - zazwyczaj szybki, ale wrażliwy na duży import; Java/.NET jest cięższy bez GraalVM/AOT i profilowania.
W przypadku JVM należy rozważyć SnapStart/CRaC/Graal Native; dla. NET - przycięte samodzielnie.

3. 5 Inicjalizacja i stan

Umieść drogą inicjalizację w haczyku inicjalizacyjnym (faza init), a nie w ścieżce żądania.
Użyj na żądanie ładowania konfiguracji/tajemnic z lokalnym buforem (TTL).
Nie przechowywać stanu użytkownika w pamięci - tylko sygnały pamięci podręcznej/złącza.

4) Wzory architektoniczne, które zmniejszają wpływ zimnego rozruchu

4. 1 Asynchron i kolejki

Akceptujemy żądanie → validate → umieścić go w kolejce/autobusie (SQS/PubSub/Queue Storage) → odpowiedz na 202/Accepted → przetwarzaj go z tłem.
Nadaje się do operacji innych niż interaktywne (płatności, raporty, ciężkie obliczenia).

4. 2 Prekomput/pamięć podręczna

Generowanie wstępów/katalogów/flag funkcji z wyprzedzeniem przez wyzwalacze (CRON/events) i przechowywanie w KV/cache/edge.

4. 3 Wentylator/wentylator

Dzielimy długą operację na kilka krótkich funkcji (Mapa/Redukcja-jak) → mniejsze ryzyko czasu i powtarzające się zimno.

4. 4 Odciążenie krawędzi

Najprostsze kontrole (JWT/HMAC, geo-przekierowanie, antiboot) są wykonywane na krawędzi (Workers/Functions @ Edge) w celu zapisania RTT i rozładunku pochodzenia.

5) Praktyka: konfiguracje i techniki

5. 1 AWS Lambda (rezerwa + 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
}
Węzeł. js (leniwe inicjalizacja i ponowne użycie):
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 instancje)

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 funkcje lazurowe (Z/Prewarm)

Plany Premium/Sprężyste z On; wstępnie ocieplone przypadki ≥ współistnienie predykcyjne p95.

6) Terminy, rekolekcje, terminy

Przekazać ogólny termin (po stronie klienta) przez nagłówek („x-deadline-ms ”/„ grpc-timeout”), skrócić czas 'per-hop' wewnątrz funkcji.
Powtarza się tylko w przypadku operacji idempotentnych; Użyj Idempotency-Key i deduplikacji.
Dla przedniego interfejsu API - zabezpieczenie (duplikat żądanie po p90) i wyłącznik dla dalekobieżnych zależności.

7) Praca z bazami danych/pamięciami podręcznymi/tajemnicami

Puli/serwery proxy (RDS Proxy/Cloud SQL Proxy/pgBouncer) zamiast tysięcy krótkich połączeń.
Krótki sekret TTL + w pamięci podręcznej z aktualizacją tła.
Cache (Redis/Memcached/KV): ładowanie „ciężkich” katalogów na init, ale z limitem czasowym.

8) Organizacja i montaż kodu

Oddzielne urządzenia do obsługi wąskich przypadków użytkowania; jeden pakiet „gruby” = długi init.
ESBuild/Rollup: wyłączyć nieużywane, połączyć tylko krytyczne.
Warstwy/rozszerzenia - dla dużych libs (modele OpenSSL, SDK) do ponownego wykorzystania pamięci podręcznej dostawcy.

9) Badanie szczytowe i symulacja

Syntetyka „zimna” rozpoczyna się: przymusowo wyłączyć instancje min i prowadzić równoległy ruch w krokach.
A/B: porównaj udział zimna, p95, błąd połączenia z DB/tajemnice, koszty.
GameDay: obciążenie szczytowe × 2 od wszechczasów wysokich, rozgrzewka.

10) Koszt (FinOps)

Min instancje/rezerwa koszty jednoczesnego kosztu - włączyć tylko dla gorących tras.
Skrócenie czasu trwania: pamięć podręczna, krótkie czasy, unikanie zbędnych SDK.
Weź pod uwagę egress (połączenia do zewnętrznych API) i rejestrowanie (objętość kłód rośnie szybko na zimnych szczytach).

11) Antypattery

Jeden monolityczny handler z dziesiątkami megabajtów zależności.
Obowiązkowe połączenie z bazą danych przy każdym wywołaniu (bez ponownego użycia/serwera proxy).
VPC dla wszystkich funkcji „na wszelki wypadek”.
Długie czasy i ślepe rekolekcje → „ogony” i fantomowe odpisy.
Ogrzewanie „wszystko z rzędu” przez całą dobę.
Tajna inicjalizacja w ścieżce żądania (lentice init> 100 ms - transfer do init/cache).

12) Szczegóły dotyczące iGaming/Finance

Ścieżki pieniężne (depozyty/wypłaty): przechowywać rezerwy/min instancje, oddzielne SLO, ścisłe ograniczenie czasu i powtórzeń (idempotencja jest obowiązkowa).
KYC/PSP: niestabilne zewnętrzne API - owiń w kolejkę + pracownika, z przodu - 202/sondaż/webhook.
Regulacja i audyt: dzienniki niezmienne (WORM), dziennik zdarzeń przychodzących z 'Idempotence-Key', korelacja 'trace _ id'.
rezydencja danych: wdrożenie funkcji przetwarzających PII w rachunkach/projektach regionalnych; brak buforów krawędziowych z PII.

13) Lista kontrolna gotowości Prod

  • SLI/SLO zdefiniowane: p95/p99, frakcja zimna, cele trasy.
  • Włączone są zapasowe/min instancje dotyczące funkcji krytycznych; przepowiednia konkarrencji.
  • Pakiet zminimalizowany; ciężkie twarze są wykonywane na warstwy; leniwy import/inicjalizacja.
  • Ponowne wykorzystanie klientów SDK/DB; Serwer proxy RDS/SQL jest skonfigurowany; basen połączeniowy.
  • VPC tylko w razie potrzeby; ENI/proxy zoptymalizowane; sekrety za pośrednictwem menedżera + lokalnego pamięci podręcznej TTL.
  • Terminy/terminy/rekolekcje: backoff + jitter; Tylko idempotent powtarza.
  • Syntetyczne badania obciążenia „na zimno” +; wpisy na rzecz wzrostu udziału zimna i p99.
  • Książki startowe: jak zwiększyć rezerwy, jak zmienić minScale, jak włączyć degradację.
  • Dla iGaming: oddzielne SLO/deski rozdzielcze „sposoby pieniędzy”, Idempotency-Key, audyt WORM.

14) TL; DR

Zimny start jest nieunikniony, ale możliwy do opanowania: zachować ciepłe instancje, w których ma znaczenie, zmniejszyć pakiet, zastosować leniwe-init i ponownego użycia połączeń, uniknąć zbędnych VPC, podjąć ciężkie operacje w linii/pracowników i używać krawędzi dla łatwych zasad. Dla krytycznych ścieżek finansowych - oddzielne SLO, idempotencja i rygorystyczne terminy; zmierzyć udział zimna i włączyć ocieplenie tylko tam, gdzie się opłaca.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.