GH GambleHub

CDN캐싱 및 TTL 최적화

간략한 요약

CNC 캐시는 사용자와 원점 사이의 "가속기 + 방패" 입니다. 다음과 같은 경우 잘 작동합니다

1. 캐시 키는 안정적이며 "노이즈" 가 없습니다.
2. 하중을 받고있는 TTL 정책: 's-maxage '/' max-age' + '부실한 상승/if-orr'.
3. 태그/접두사 + "소프트" 퍼지로 장애가 관리됩니다.
4. 계층 형 캐시/원산지 차폐 및 음수 캐시가 포함되어 있습니다.
5. 관찰 가능성이 있습니다: 레이어 별 적중 비율, p95 TTFB, 반환 공유 304.

기본 헤더와 그 의미

'캐시 컨트롤':
  • 'max-age = ' -브라우저 용 TTL.
  • 's-maxage = ' - CDNA/프록시 용 TTL ('max-age' 와 겹침).
  • 'stale-while-revalidate = ' -구식으로 병렬로 업데이트하십시오.
  • 'stale-if-orr = ' -원점 오류가 발생하면 오래된 오류를 반환합니다.
  • '불변의' -자원이 변경되지 않습니다 (다양한 자산에 적합).
  • 'ETag '/' Last-Modified' -304 조건, 바이트/CPU 원본 저장.
  • 'Vary' - 캐시 키에 영향을 미치는 헤더 목록 (제한과 함께 사용).
  • CDN을위한 '대리 제어' - "확장 된" 캐시 제어 (지원되는 경우).
  • '만료' -더 이상 사용되지 않지만 여전히 고객이 설명합니다.
예 (통계, 연도):

Cache-Control: public, max-age=31536000, immutable
예 (안전한 노후화가있는 세미 스피커):

Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."

캐시 키 디자인 및 정규화

목표는 본질적으로 동일한 요청이 동일한 객체에 속하는 것입니다.

맵 정규화: 사례, 이중 슬래시, 후행 슬래시, 쿼리 매개 변수 순서.
"잡음": 'utm _', 'fbclid', 'gclid', 임의의 심판 태그를 무시하십시오.
제한된 Vary: 정말 중요한 타이틀 ('수락 인코딩', 때로는 '수락', '수락 언어' 로케일) 만 있습니다.
장치 클래스: 필요한 경우 끝없는 사용자 에이전트 분기가 아닌 2-3 클래스 (모바일/데스크톱/태블릿) 를 사용하십시오.
Auth 컨텍스트: 기본적으로 비공개로 캐시하지 마십시오. 서명 된 IM/쿠키 바이 패스 또는 별도의 공공/개인 경로를 사용하십시오.

빠른 스타일 (의사):

Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding

컨텐츠 유형별 TTL 전략

타입TTL CNC ('s-maxage')브라우저 ('max-age')또한
수정 된 자산 ('/app. a1b2. js ')1 년1 년'불변의'; 필요하지 않은 장애
카탈로그/랜딩 페이지1-10 분30-120 초'stale-while-revalidate = 10-30
이미지 (재생)10-60 분5-15 분바리 '수락' (webp/avif)
API를 가져옵니다 (캐시)10-120 초0-30 초이념 만; 'stale-if-orr' 5-60 분
500/타임 아웃 오류00네거티브 캐시 30-120 초 (CNC 레벨에서), 401/403/POST 캐시하지 않음

장애 정책

IM/접두어: "/static/2025-11-05/' 아래의 모든 것을 쓸어 내십시오 ".
태그/키 별: "모든 '카탈로그' 및 '제품: 123' 제거".
소프트 퍼지: 더 이상 사용되지 않는 것으로 표시하고 오브젝트를 지우지 마십시오.
이벤트 중심: CI/CD 또는 관리 이벤트는 웹 후크 "무효화 태그" 를 호출합니다.

권장 사항: 컨텐츠/페이지에 대한 자산 경로 및 태그 제거 경로를 결합하십시오.

계층 형 캐시, 원산지 차폐품... 프리 워름

계층 캐시: CDN의 영역 계층 → 더 적은 원점 요청.
원산지 방패: 하나의 "방패" POP에서 원산지-지역 및 적중 비율을 향상시킵니다.
Prewarm (사전 가져오기): 이벤트/릴리스 전에 핫 맵/캐시를 예열하십시오.
네거티브 캐시: 짧은 시간 (30-120 초) 동안 5xx/타임 아웃을 캐시하여 레트라의 폭풍으로 원점을 압도하지 마십시오.

API 캐시: 가능한 경우

GET/HEAD 및 demempotent 만 가능합니다.
키: 경로 + 필수 쿼리 (예: '? 카테고리 =... & 페이지 =... ').
검증: 'ETag '/' Last-Modified' 및 짧은 's-maxage'.
사용자 별 필터: 클라이언트/에지 기능을 개인화하거나 서명 된 요청 + "공개" 응답을 사용하십시오.

예 (API, 30 s + SWR):

Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"

캐시 중독 보호

하드 맵/헤더 정규화; 키에있는 매개 변수의 화이트리스트.
의심스러운 헤더/복제 ('X-Forwarded', 확장 된 '수락') 를 클립합니다.
'Vary' 를 제한하고 헤더의 크기/수를 제어하십시오.
도메인 분리: 캐시가없는 별도의 이름으로 개인/관리자.
응답 검증: 4xx를 캐시하지 말고 (정적의 경우 404 제외) 명시 적 정책없이 "사용자" 페이지를 캐시하지 마십시오.

압축 및 형식

텍스트 용 Brotli (js/css/json), gzip-폴백; 사전 압축 자산이 허용됩니다.
이미지: 지원이있는 웹/아비 프; 'Vary: Accept' + 파생 상품을 사용하십시오.
비디오/오디오에 대한 범위 요청: CDN은 덩어리를 캐시합니다.
컨텐츠 협상: 핵심 카디널리티를 낮게 유지하십시오 (원시 UA 대신 장치 클래스).

관찰 가능성 및 SLO

키 측정 항목

적중 비율 (바이트/요청 별) неedge/tier/shield.
지역 및 유형 별 p50/95/99 TTFB (정적/API).
충전 속도/원산지 탈출-원산지 정도.
304 속도 및 평균 응답 크기.
오류 예산: '오류 발생 '/' SWR' 문제의 비율; 퍼지 주파수.

SLO 예

'p95 TTFB' statics는 지역적으로 약 120-150ms, API는 200-250ms를 캐시했습니다.
가장자리 히트 비율 스테이틱은 90%, 세미 스피커는 60% 입니다.
오류가있는 오래된 지점의 응답 비율 30 일 만에 5%.

치트 시트 설정

Nginx (CDN보다 앞서 또는 자체 PoP에서 역 프록시)

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CDN:512m max_size=100g inactive=7d;

map $args $clean_args {
"~(^    &)(utm_    gclid    fbclid) """; # default $ args simplified example;
}

server {
listen 443 ssl http2;
set $cache_key "$scheme$request_method$host$uri?$clean_args    $http_accept    $http_accept_encoding";
location /static/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_ignore_headers Set-Cookie;
add_header Cache-Control "public, s-maxage=86400, max-age=3600, stale-while-revalidate=600" always;
proxy_pass https://origin_static;
}

location /api/public/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_cache_valid 200 30s;
add_header Cache-Control "public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600" always;
proxy_set_header If-None-Match $upstream_http_etag;
proxy_pass https://origin_api;
}
}

특사 (SWR + 음수 캐시, 개념)

yaml http_filters:
- name: envoy. filters. http. cache typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. cache. v3. CacheConfig typed_config:
"@type": type. googleapis. com/envoy. extensions. cache. simple_http_cache. v3. SimpleHttpCacheConfig
Cache-Control/Surrogate-Control Header Cache Policies
We cache 5xx errors briefly via route/retry policy + local_rate_limit

"빠른" 자산에 대한 <> 헤더


Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br

세미 스피커의 경우 <> 헤더 (카탈로그)


Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept

FinOps: 현금이 돈을 절약하는 방법

에그레스 원산지, 적은 CPU/DB 부하 → 인프라 비용 절감.
유료 백엔드 요청이 적습니다 (검색/색인/이미지).
목표 지표: p95의 $/감소 및 1GB의 출구 감소-출시 후 효과를 추적하십시오.

iGaming/fintech 특정

공급자 카탈로그/자산: 다양한 경로 + 연간 TTL.
이벤트/토너먼트 착륙: 10-30 분 동안 1-5 분 's-maxage' + 'SWR'; 업그레이드시 태그 퍼지.
Liv 페이지 (계수/테이블): 개인 블록을위한 짧은 TTL (5-30 초) 인 JSON 블록의 부분 캐시-클라이언트 렌더링.
PSP/결제 종점: 엄격한 '매장 없음' 을 캐시하지 마십시오. 캐시 전용 책 (BIN 테이블, 상태).
안티 봇: 정적/GET 캐싱, 의심스러운 ASN을위한 회색 경로; 시끄러운 헤드 라인에서 'Vary' 를 유지하십시오.

구현 체크리스트

  • 설명 된 캐시 키: IM 정규화, 허용 된 쿼리 목록, 원하는 것에 대해서만 'Vary'.
  • 공공/개인 경로가 분리되었습니다. 비공개- '매장 없음' 및 우회 CDN입니다.
  • 도입 된 컨텐츠 유형별 TTL 사다리; 'SWR/if-orr' 로 설정되었습니다.
  • 계층 형 캐시 + 원산지 쉴드 구성; 네거티브 캐시 5xx (짧음) 가 활성화되었습니다.
  • 태그/IM 퍼지, 소프트 퍼지가 있습니다. CI/CD와의 통합.
  • 압축 (극장/지퍼), 웹 이미지 형식 및 범위 응답이 포함됩니다.
  • 측정: 계층 별 적중 비율, p95 TTFB, 304 속도, 원점 출구; 실패에 대한 경고.
  • 플레이 북: 피크 전에 예열, 비상 퍼지, 원산지 저하.

공통 오류

사용자의 TTL → "고정" 번들이 큰 비 버전 자산.
과도한 'Vary' ('사용자 에이전트', 모든 헤더) → 카디널리티의 폭발과 낮은 적중 비율.
캐싱 4xx/401/403/개인 콘텐츠.
네거티브 캐시 부족 → 저하 된 원산지 요청 눈사태.
태그 퍼지 → 방대한 포인트 퍼지 및 폭풍 리필이 없습니다.
캐시 키에는 "잡음" UTM/ref 매개 변수가 포함됩니다.
스태틱스에 대한 TTL이 너무 짧으므로 CDN과 원점에 추가로드가 발생합니다.

미니 플레이 북

1) 이벤트 전에 캐시를 예열하십시오

1. 로그별로 상위 N 탭 수집 → 2) 영역별로 병렬 사전 가져 오기 (속도 제한) → 3) 적중 비율 인증서 및 p95 온도를 확인하십시오.

2) 비상 소프트 퍼지 카톨릭 학자

1. 'PURGE '/tag-clear → 2 보내기) CDN은 배경 → 3으로 오래되고 신선함을 제공합니다.) 원산지 스파이크가 없는지 확인하십시오.

3) 원산지 실패

1. 'stale-if-orr' 는 X 시간 → 2) 가장자리의 배너 "기술 작업" 활성화 → 3) 복구시 대상 예열.

결과

SWR/if-orr + 관리 장애 + 계층/쉴드 + 관찰 성을 갖춘 올바른 캐시 키 + 의미있는 TTL. 헤더와 IaC의 정책을 수정하고 히트 비율과 p95를 측정하고 최고점까지 예열 할 계획이며 사용자는 항상 빠른 답변을 받게되며 가장 뜨거운 시간에도 원산지가 남아 있습니다.

Contact

문의하기

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

Telegram
@Gamble_GC
통합 시작

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

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

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