CDN과 대기 시간 단축 최적화
1) 목표 및 지연 맵
Latency = DJP + TTFB (서버/원산지/캐시) + 컨텐츠 전달 (RTT × 볼륨) + 클라이언트 렌더링.
최적화 = RTT 수를 줄이고 바이트를 줄이며 계산/캐시를 사용자에게 더 가깝게 이동시킵니다.
2) CNC 아키텍처
Anycast POP는 근접 BGP 라우팅 노드입니다.
계층 형 캐싱/Origin Shield-원산지의 미스 스톰을 줄이는 "우산" 중간 층.
지리/지역 라우팅 - 세입자/관할권의 구속력 (데이터 주권, 라이센스).
실패-백업 원점/지역, 건강 샘플 및 빠른 스위치.
3) 캐시: 키, 헤더, 전략
3. 캐시 키 1 개
기본값은 'scheme + host + path + 입니까? 쿼리 '.
원하는 매개 변수 만 추가하십시오 ('? v = ','? lang = ','? 임차인 = '). 나머지는 무시 파람에 있습니다.
'Vary' - 최소: '수락 인코딩', '수락 언어' (필요한 경우), '승인' 은 일반적으로 캐시를 끊습니다.
3. 2 가지 정책
공공 통계: '캐시 제어: 공개, 최대 연령 = 31536000, 불변성' + rev (이름 해시).
반 역학 (디렉토리, 규칙, FAQ): 's-maxage = 300, 부실한 동안 계시 = 600, 부실한 경우 오류 = 86400'.
API-GET: ETag/Last-Modified, 'SWR/SIE' 를 사용하면 통합이 가능합니다 (핫 키에 대한 한 번의 요청).
개인: 개인 응답-에지 컴퓨팅 (ESI/kv) 또는 테넌트 당 캐시를 통해 주변에 있습니다.
3. 3 폭풍 방지
통합 요청-동시 누락 요청을 축소하십시오.
Serve-stale-원점이 실패하면 오래된 물체를 제공하십시오.
배경 재정의-배경 업데이트.
4) 상반기
TP/2: 멀티 플렉스, 헤더 압축; '최대 동시 스트림', 큰 헤더 제한.
TP/3 (QUIC): 모바일/고 손실 TTFB의 주요 감소; 초기 급류 및 재시도를 주시하십시오.
TLS 1. 3: 1-RTT 핸드 셰이크; OCSP 스테이플 링; HSTS.
0-RTT: demempotent 'GET' 및 재생 위험이 고려되는 경우에만 해당됩니다.
103 초기 힌트: 중요한 자원에 대한 초기 '링크: rel = preload'.
사전 연결/DNS- 사전 가져 오기: '<link rel = "사전 연결" href = "https ://cdn. 예 "> '.
5) 가장자리 계산 및 "미세 개인화"
가장자리: 타이틀 인구 조사, 지리/테넌트 고정, A/B 마킹, 원점을 요구하지 않고 쉬운 개인화.
규칙: POP 노드에 PII를 저장하지 마십시오. 캐시 집계/공개 데이터 만.
6) 미디어 및 형식 최적화
이미지: WebP/AVIF 로의 자동 변환, 가장자리 크기 조정, 'srcset/sizes', 'lazyload'.
압축: 텍스트 용 Brotli (HTM/CSS/JS/JSON), gzip 폴백.
비디오: HLS/DASH, CDN- 세그먼트 캐싱, '프리로드 = 메타 데이터', 포스터.
글꼴: 하위 집합 + '글꼴 표시: 교환'; 긴 캐시가있는 호스트.
중요한 CSS: 인라인 첫 번째 화면; 나머지는 async입니다.
7) API 패턴 및 캐싱
Idempotent GET-요청 키 (데이터 버전 포함) 별로 캐시합니다.
ETag: 강력한 페이로드 해시 + 'If-None-Match'.
'Cache-Control' 클라이언트와 구별하기위한 대리 제어 (CDN- 특정).
프라이빗 정적/미디어 용으로 서명 된 탭.
GraphQL: 작업/변수로 키 캐시를 정규화합니다. 부분 캐싱/리솔버 캐시를 사용하십시오.
웹 소켓: 실시간-메시지 단축, 압축 (퍼 메시지 수축), WS 샤드 위치 사용자에게 더 가깝습니다.
8) 설정 예
8. 1 NGINX (원본: API- GET 캐시)
nginx
We give SWR and ETag location/api/v1/catalog/{
proxy_cache api_cache;
proxy_cache_key "$scheme$request_method$host$uri$is_args$args";
proxy_cache_valid 200 5m;
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
add_header Cache-Control "public, s-maxage=300, stale-while-revalidate=600, stale-if-error=86400";
add_header ETag $upstream_http_etag;
proxy_ignore_headers Set-Cookie; # do not break the Set-Cookie proxy_hide_header cache;
proxy_pass http://catalog;
}
8. 2 가장 빠른 VCL (SWR, 합병, 쿠키 무시)
vcl sub vcl_recv {
set req. hash_ignore_busy = true; # coalescing if (req. url. qs ~ "^(?!.(lang v)=)") { remove req. url. qs; }
if (req. http. Cookie) { remove req. http. Cookie; }
}
sub vcl_backend_response {
set beresp. ttl = 300s;
set beresp. stale_if_error = 86400s;
set beresp. stale_while_revalidate = 600s;
if (beresp. http. Set-Cookie) { unset beresp. http. Set-Cookie; }
}
8. 3 Cloudflare (변형 규칙, 캐시 규칙, 초기 힌트-
json
{
"cache_rule": {
"if": "http. request. uri. path matches \"/assets/.\"",
"action": {"cache": {"eligibility":"eligible", "ttl": 31536000}}
},
"transform_rule": {
"set_headers": [{"name":"Cache-Control","value":"public, s-maxage=300, stale-while-revalidate=600"}]
},
"early_hints": {"enable": true}
}
9) 모바일 네트워크 및 "불안정한" 인터넷
HTT/3을 적극적으로 사용하십시오. 임계 경로의 크기를 줄입니다 (HTM + 임계 CSS <14K).
우선 순위 H2/H3: 우선 순위 지정 (HTM → CSS → JS → 미디어 나중에).
지터, API에 대한 demempotency를 사용하여 정책을 다시 트레이하십시오.
크기 예산 및 번들: 코드 분할, 지연된 JS, 미사용 CSS/JS 제거.
10) 관찰 및 SLO
RUM: 지역 별 TTFB, LCP, INP, CLS/ASN/테넌트; p95/p99 분포.
합성: POP에 의한 제어 경로 "/health/cdn ".
캐시 메트릭: 전체 및 키 당 적중 비율; 원산지 가져 오기 비율; 합병 절약.
경고: 적중 비율 하락, 원점 탈출 증가, H3 분율 저하, 쉴드 당 5xx.
11) iGaming/Finance의 세부 사항
게임 카탈로그/확률: 짧은 's-maxage' + SWR; 지역을 인식하는 кл기호 ('테넌트' 지역 'lang').
이벤트 피크 (일치, 추첨): 캐시 온난화 (사전 따뜻함), 무거운 개인화의 "동결", 거울 소스.
결제/캐비닛: 비공개로 캐시하지 말고 H3 + edge-TLS 및 가까운 영역을 통해 가속하십시오.
관할권: 지역당 분할 도메인/경로; '바리: X- 리전' 컨트롤.
12) 안티 패턴
'Vary:' 모든 것; 캐시 키는 불필요한 쿠키/헤더에 따라 다릅니다.
짧은 원점 오류에 대한 SWR/SIE → 검은 색 화면 부족.
태그/키로 포인트 장애 대신 "전체" 캐시를 지우십시오.
이름이 수정되지 않고 'max-age = 0' 인 리소스.
대중이 제공되는 경우에도 '승인' 에 대한 글로벌 거부 캐시.
합병 부족 → 원점에 대한 폭풍.
POP에서 조기 "무거운" 개인화.
13) Prod 준비 점검표
- 애니 캐스트 팝 + 계층/쉴드; 건강 검진 및 원산지 장애.
- 캐시 키는 최소입니다. 불필요한 쿼리/쿠키는 무시하십시오. '대리 통제'.
- SWR/SIE 활성화, 통합 활성; 오류에 대한 부실.
- TP/3 활성화; TLS 1. 3; 103 Early Hints는 중요한 리소스를 위해 구성되었습니
- 이미지: AVIF/WebP, 크기 조정 에지; 가사를위한 Brotli.
- API- GET 이태그/마지막 수정; demempotency/retreats; 개인 프로필을 캐시하지 않습니다.
- 정적 도메인에 사전 연결; 중요한 CSS 인라인.
- 메트릭: 지역/테넌트 별 적중률, 원산지 탈출, TTFB/LCP p95, H3-share.
- 이벤트 전에 캐시 예열 계획; 포인트 장애 (태그).
- Vary/keys/TTL 문서; 사건의 플레이 북 (히트 비율 하락).
14) TL; DR
계층/쉴드 + 적절한 캐시 키 + SWR/SIE + 통합. 모든 편지 선택 (c) 3, 103 Early Hints를 사용하고 사전 연결하십시오. 인라인 크리티컬 CSS의 가장자리에서 미디어를 압축하고 변환합니 API - ETag, 깔끔한 'Vary', demempotency 및 합리적인 캐싱 'GET'. 측정 히트 비율, TTFB/LCP p95는 원점에서 빠져 나와 캐시를 최고점에서 미리 예열합니다.