GH GambleHub

서버리스 기능 및 콜드 스타트

1) 콜드 스타트 란 무엇이며 왜 발생하는지

콜드 스타트-이벤트를 처리하기 전에 새로운 실행 격리 (샌드 박스/컨테이너/마이크로 -VM) 를 만들 때 추가 대기 시간. 전형적인 컨베이어:

1. 중간 할당 (컨테이너/마이크로 VM, 런타임 로딩).

2. VPC/ENI 프라이밍, 비밀, 파일, 구성.

3. 코드 초기화 (모듈 가져오기, 데이터베이스 연결, 모델로드).

4. 핸들러 실행.

따뜻한 시작 (재사용) 은 단계 1-3을 건너 뛰고 있습니다. 다운 타임 후 병렬 처리가 증가하고 코드/설정 업데이트로 콜드 스타트 확률이 최고점에서 증가합니다.

2) 측정 및 대상 방법 (SLO)

메트릭: 'init _ 지속 시간' (초기화), '지속 시간 _ 전체', "콜드 스타트 공유", p95/p99 대기 시간, 다운 타임 후 종속성에 연결되는 오류.
원격 측정 제거: 플랫폼 로그 + 자체 레이블 (예: '컨텍스트가있는 경우' cold = 참/거짓 '). 정적 폐쇄시 isColdStart '또는 자체 플래그).
SLO 목표 (예): API "로그인" p95 λ200 ms, 콜드 쉐어 배경 작업 - p95 λ1. "돈" 경로의 경우-분리되고 더 엄격합니다.

3) 콜드 스타트 감소의 주요 레버

3. 1 컨카렌시 제어 및 난방

제공되는 동시성/최소 인스턴스: 따뜻한 환경을 유지합니다. 중요한 그립에 사용하십시오.
워머/워밍업: 근로자를 따뜻하게 유지하기 위해 예정된 전화 (크론/스케줄러). 현명하게하십시오 (지역, 시간, 하중).
버스트 버퍼: 예상되는 피크 전에 동시성 제한을 미리 올립니다.

3. 2 포장 및 종속성

작은 배치 아티팩트: 트리 흔들림, '-큰 라이브에 대한 종속성, 레이어 (AWS 레이어) 만 있습니다.
게으른 초기: 첫 번째 액세스시 핸들러 내부에 무거운 모듈을 가져옵니다. 게으른 연결을 엽니 다.
따뜻한 자원: 따뜻한 시작시 재사용 할 수 있도록 전 세계적으로 SDK/연결 클라이언트를 캐시하십시오.

3. 3 네트워크 및 VPC

프라이버시가 필요하지 않은 기능을위한 VPC가 없으면 (그렇지 않으면 ENI 부착은 수백 m를 추가합니다).
VPC가 필요한 경우 공급자의 VPC 이코노미 모드 (ENI 풀/최적화), 데이터베이스 프록시 (RDS Proxy/Cloud SQL Auth Proxy) 및 연결 풀링을 사용하십시오.

3. 4 개 언어 및 런타임

노드. js/Go 가장 빠른 시작; 파이썬-일반적으로 빠르지 만 대규모 수입에 민감합 Java/.NET은 GraalVM/AOT 및 프로파일 링없이 더 무겁습니다.
JVM의 경우 SnapStart/CRaC/Graal Native를 고려하십시오. 에. NET-손질 된 자체 구속.

3. 5 초기화 및 상태

요청 경로가 아닌 초기화 후크 (init 위상) 에 값 비싼 초기화를 넣습니다.
로컬 캐시 (TTL) 와 함께 주문형 컨피그/비밀로드를 사용하십시오.
사용자 상태를 메모리에 저장하지 않고 신호/커넥터 만 캐시합니다.

4) 콜드 스타트의 영향을 줄이는 건축 패턴

4. Asynchron 및 대기열 1 개

요청 → 유효성 → 대기열/버스 (SQS/PubSub/Queue Storage) 에 요청을 수락합니다. → 202/수락 → 백그라운드로 처리합니다.
비 대화식 운영 (지불, 보고서, 대량 계산) 에 적합합니다.

4. 2 사전 캐시/사전 캐시

KV/캐시/가장자리에 트리거 (CRON/이벤트) 및 저장에 의해 미리 액세스/디렉토리/기능 플래그 생성.

4. 팬 아웃/팬인 3 개

긴 작업을 몇 가지 짧은 기능 (맵/Reduce-Like) 으로 나눕니다. → 타임 아웃 및 반복적 인 감기 위험이 적습니다.

4. 4 엣지 오프로드

RTT 및 언로드 원점을 저장하기 위해 가장 간단한 검사 (JWT/HMAC, 지오 리디렉션, 안티 부팅) 가 엣지 (Workers/Functions @ Edge) 에서 수행됩니다.

5) 연습: 구성 요소와 기술

5. 1 AWS Lambda (프로비저닝 + RDS 프록시)

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
}
노드. js (게으른 초기화 및 재사용):
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. GCP 클라우드 실행/클라우드 함수 2 개 (최소 인스턴스)

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 개의 푸른 기능 (AlwaysOn/PreWarm)

AlwaysOn의 프리미엄/탄성 계획; 사전 예열 된 인스턴스 예측 p95 동시성.

6) 타임 아웃, 퇴각, 마감일

일반 마감일 (클라이언트 측) 을 헤더 ('x-daily-ms '/' grpc-Timeout') 를 통과하면 기능 내부의 '호프 당 타임 아웃' 이 단축됩니다.
dempotent 작업에 대해서만 반복; Idempotency 키 및 중복 제거 사용.
전면 API-헤징 (p90 후 중복 요청) 및 장거리 종속성을위한 회로 차단기.

7) 데이터베이스/캐시/비밀 작업

수천 개의 짧은 연결 대신 풀/프록시 (RDS 프록시/클라우드 SQL 프록시/pgBouncer).
배경 업데이트가있는 메모리 캐시에서 짧은 TTL 비밀 +.
캐시 (Redis/Memcashed/KV): init에 "무거운" 디렉토리를로드하지만 시간 제한이 있습니다.

8) 코드 조직 및 어셈블리

좁은 사용 사례를위한 별도의 핸들러; 하나의 "두꺼운" 번들 = 긴 init.
ESBuild/Rollup: 사용하지 않는 것을 제외하고 중요한 것만 결합하십시오.
레이어/확장-공급자의 캐시를 재사용하기위한 대형 라이브 (OpenSL 모델, SDK) 용.

9) 피크 테스트 및 시뮬레이션

"콜드" 의 합성이 시작됩니다. 최소 인스턴스를 강제로 끄고 병렬 트래픽을 단계적으로 유도하십시오.
A/B: 감기, p95, 연결 오류의 비율을 DB/비밀, 비용과 비교하십시오.
GameDay: 사상 최고 예열에서 피크로드 × 2.

10) 비용 (FinOps)

최소 인스턴스/프로비저닝 된 동시성 비용은 비용이 듭니다. 뜨거운 경로에서만 사용할 수 있습니다.
런타임 감소: 캐시, 짧은 타임 아웃, 불필요한 SDK 피하기.
탈출 (외부 API 호출) 및 로깅 (콜드 피크에서 로그의 양이 빠르게 증가) 을 고려하십시오.

11) 안티 패턴

수십 메가 바이트의 종속성을 가진 하나의 모 놀리 식 핸들러.
각 호출에서 데이터베이스에 필수 연결 (재사용/프록시 없음).
"경우에 따라" 모든 기능에 대한 VPC.
긴 타임 아웃과 블라인드 퇴각 → "꼬리" 및 팬텀 기록.
24 시간 내내 "모든 것을 연속으로" 예열합니다.
요청 경로에서 비밀 초기화 (lintenit> 100 ms-init/cash로 전송).

12) iGaming/Finance의 세부 사항

돈 경로 (예금/인출): 제공/최소 인스턴스 유지, 별도의 SLO, 엄격한 타임 아웃 및 반복 제한 (demotency는 필수 임).
KYC/PSP: 불안정한 외부 API-앞면의 대기열 + 작업자를 감싸십시오-202/폴링/웹 후크.
규제 및 감사: 불변의 로그 (WORM), 'Idempotency-Key' 가있는 인바운드 이벤트 로그, 상관 관계 'trace _ id'.
데이터 레지던트: 지역 계정/프로젝트에서 PII를 처리하는 기능을 배포합니다. PII의 가장자리 캐시가 없습니다.

13) Prod 준비 점검표

  • SLI/SLO 정의: p95/p99, 차가운 분수, 경로 목표.
  • 중요한 기능에 대한 제공/분 인스턴스가 활성화됩니다. concarrency 예측.
  • 번들 최소화; 무거운면이 층으로 수행됩니다. 게으른 가져 오기/초기화.
  • SDK/DB 클라이언트 재사용; RDS/SQL 프록시가 구성됩니다. 연결 풀.
  • 필요한 경우에만 VPC; ENI/프록시가 최적화되었습니다. 관리자 + 로컬 TTL 캐시를 통한 비밀.
  • 타임 아웃/마감일/퇴각: 백오프 + 지터; demempotent 반복 만.
  • 합성 "차가운" + 부하 테스트; 감기와 p99의 점유율 증가 경고.
  • 런북: 프로비저닝을 늘리는 방법, minScale을 변경하는 방법, 저하를 포함하는 방법.
  • iGaming의 경우: 별도의 SLO/대시 보드 "돈의 방법", Idempotency-Key, WORM 감사.

14) TL; DR

콜드 스타트는 불가피하지만 관리가 가능합니다. 따뜻한 사례를 중요한 곳에 유지하고, 번들을 줄이고, 게으른 연결을 적용하고, 연결을 재사용하고, 불필요한 VPC를 피하고, 라인/작업자에게 무거운 작업을 수행하고, 쉬운 규칙을 사용하십시오. 중요한 재정 경로의 경우-별도의 SLO, demempotency 및 엄격한 타임 아웃; 감기의 비율을 측정하고 지불하는 곳에서만 온난화를 켜십시오.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.