GH GambleHub

기술 및 인프라 → 캐시 계층 및 데이터 저장

캐시 계층 및 데이터 스토리지

1) 다중 계층 캐시가 필요한 이유

캐시는 "고가의" 서브 시스템 (데이터베이스, 외부 API, 네트워크) 으로 이동하지 않고 답변에 대한 짧은 경로입니다. Layering은로드를 분배합니다: 브라우저 → CNC/edge → 응용 프로그램 계층 → 분산 캐시 → 데이터베이스/스토리지 목표: P95/P99를 줄이고, 언로드 원점을 줄이고, 피크를보다 단단히 견딜 수 있으며 바이트 비용을 줄입니다.

2) 캐시 레벨 맵

1. 차량 제어: '캐시 컨트롤', 'ETag', '마지막 수정', '부실한 동안 수정'.
2. CDN/Edge: TTL/кл기호, Vary, 서명 된 TP, 이미지 크기; 계층/방패.
3. API 게이트웨이/서비스 메시: 보안 GET을위한 단기 응답 캐시.
4. 응용 프로그램 (프로세스 중): LRU/LFU, 핫 키 근처 캐시, 밀리 초.
5. 분산 캐시 (Redis/Memcashed): 역학의 기본 계층.
6. DB 캐시: Pg/Innodb 버퍼, PgBouncer 멀티플렉싱, 구체화 된 뷰.
7. 디스크/객체 저장소: 사전 계산 된 스냅 샷, 블롭 캐시 (예: S3 + CNC).

원칙: "사용자에게 더 가까울수록 TTL이 짧아지고 개인화가 줄어 듭니다. 데이터에 가까울수록 일관성 정책이 풍부해집니다. "

3) 캐시 패턴

Cache-Outside (게으른): 소스에서로드하는 MISS로 → 를 읽습니다. → 캐시에 넣습니다. 간단하고 TTL 제어를 제공합니다.
읽기: 응용 프로그램은 소스 자체에서 가져온 캐시를 통해 읽습니다. 정책을 중앙 집중화하는 것이 편리합니다.
쓰기: 녹음은 캐시와 소스로 즉시 이동합니다. 더 일관성이 있지만 기록상 더 비쌉니다.
Write-Back (Write-Behind): 캐시에 쓰고 소스가 비동기식으로 업데이트됩니다 (큐). 고속, 운송 보장 및 demmpotency가 필요합니다.
새로 고침: "상단" 키의 경우 TTL이 만료되기 전에 값을 업데이트하십시오.

어디에: 게임 카드/디렉토리-캐시 제외/읽기; 카운터/리더 보드-쓰기 + CRDT/집계; 통화/제한 디렉토리-제어 TTL을 사용한 읽기.

4) 키, 세분화 및 명명

지역: {R} | 통화 = {C} | lang = {L} '.
실제로 답변을 변경하는 항목 (지역, 통화, 언어, 스키마 버전) 만 키에 포함하십시오.
스키마 버전 지정: 호환되지 않는 변경을 위해-대량 퍼지를 피하면서 키에서 'vN' 을 올립니다.
제품/테넌트 별 네임 스페이싱: '테넌트: {t}:...' -다중 임차인에게 중요합니다.
"키 존재" 에 대한 블룸 필터는 소스로의 트립을 줄일 수 있습니다.

5) TTL, 신선도 및 장애

TTL- 행렬:
  • 정적 (해시 파일): 30-365 일 + '불변의';
  • 카탈로그/배너: 5-60 분 + '부실한 동안 계시';
  • 리드 보드/따옴표: 2-15 초;
  • 디렉토리 (통화/제한): 1-10 분
  • 장애 이벤트: '제품 게시. 업데이트 된 '→ dot key/접두사 장애.
  • 태그 기반 퍼지: 태그 별 그룹 퍼지 (프로모션/카탈로그 릴리스).
  • 소프트 만료: TTL이 만료 된 후 오래된 것을 '부실' 로 제공하고 병렬로 업데이트하십시오 (SWR/SIE).
  • Versioned Keys> 질량 퍼지: 저렴하고 안전합니다.

6) 스탬피드, 핫 키 및 경쟁

Dogpile/Stampede 보호:
  • 단일 비행 (요청 통합): 한 리더가 키를 업데이트하고 나머지는 기다립니다.
  • TTL 지터: 일회성 붕괴를 피하면서 유출을 흐리게합니다.
  • 로컬 SWR: 만료 된 값을 사용자에게 제공하고 백그라운드에서 업데이트합니다.
핫 키:
  • 여러 '키 # 1에 대한 핫 키 복제 읽기로 배포 된 N '슬롯
  • 프로세스 메모리의 니어 캐시;
  • 선택 전 미리/새로 고침 (토너먼트/경기).
  • 무거운 키에 대한 concarrency 업데이트 제한.

7) 일관성 및 교차 계층

쓰기 무효화: 소스에 쓸 때-해당 키 (펍/하위) 를 동기식으로 비활성화합니다.
읽기: 불일치 한 경우 캐시를 올바른 값으로 업데이트하십시오.
Eventual vs Strong: 중요한 현금 거래는 짧은 TTL로 직접 읽습니다. UI 쇼케이스 및 통계-최종.
CRDT/애그리 게이터: 분산 카운터/등급 - "병합 안전" 구조 (G-Counter, 스트림의 Top-K).
캐스케이딩 장애: "게임" 업데이트는 카드 + 목록 + 사용자 정의 추천 캐시를 비활성화합니다.

8) 직렬화, 압축 및 형식

형식: JSON보다 빠른 프로토 버프/메사지팩; CNC/브라우저 용-Brotli가있는 JSON.
Redis의 압축: 개체> 1-2 KB에 유리하지만 CPU를 주시하십시오.
부분 응답/주문형 필드: 적은 바이트 → 적은 TTFB 및 RAM.

9) 선점 정책 및 규모

LRU (기본값) -안전; LFU는 "인기있는" 콘텐츠에 더 좋습니다.
키/값 크기: 제어 상태를 유지하십시오 (메트릭 'avg 값 크기', 'max').
하나의 제품이 전체 캐시를 "먹지" 않도록 네임 스페이스/테넌트 할당량.

10) 보안 및 PII/PCI

개인/재무 데이터-CDNA/에지 및 공통 계층에 캐시하지 마십시오. 토큰/투영 사용.
클라이언트 측 암호화를 통한 Redis의 민감한 값 암호화 (TTL 제어 손실에주의).
엄격한 ACL 및 네트워크 격리; 공급자에게 전달하기 위해 고정 된 NAT/IP.

11) 관찰 및 캐시 SLO

메트릭:
  • 적중 비율 (계층 및 접두사로), Origin Offload.
  • 캐시 전/후 TTFB/P95/P99, Latency Redis.
  • 퇴거, OOM, 키 공간 적중/미스.
  • 스탬피드 속도, 새로 고침 시간.
  • 신선도 지연% 를 제공했습니다.
SLO 예:
  • 게임 카탈로그: 적중 비율 85%, TTFB P95 λ150 ms (가장자리).
  • API 디렉토리: Revalidation의 적중률은 60% 이상입니다.
  • Redis: P99 작동, 시간당 1% 이하의 퇴거.

12) FinOps: 캐시 값

$/GB 월 RAM vs $/RPS 원산지: 투자 회수 지점 계산.
오프로드 및 탈출: CNC + Redis는 지역 원산지의 아웃 바운드 트래픽을 줄입니다.
이미지/WebP/AVIF 및 비정규화는 가장 큰 바이트 절약을 제공합니다.
제한 "비싼 MISS": 분석 "바이트 × MISS × 영역".

13) 예 (조각)

13. 단일 비행이 포함 된 캐시 제외 1 개 (의사 코드)

python def get(key, ttl, loader):
val = redis. get(key)
if val: return val with single_flight (key): # only one updates val = redis. get (key) # double check if val: return val data = loader () # request to source redis. setex(key, ttl_with_jitter(ttl), serialize(data))
return data

13. 2 이벤트 별 장애 공개

json
{
"event": "game. updated",
"game_id": "g123",
"affected": ["catalog:list:region=TR", "game:card:g123:"]
}

소비자는 채널을 구독하고 'DEL '/' PUBLISH' 를 키/태그와 일치시킵니다.

13. 스키마 버전 및 로케일이있는 3 키


game:card:v2:id=g123    region=BR    currency=BRL    lang=pt-BR

14) 구현 점검표

1. 캐시 레벨 맵 및 TTL 행렬 (정적/반 정적/API).
2. 주요 이름: 도메인, 스키마 버전, 로컬/지역/통화, 테넌트.
3. 엔드 포인트 당 패턴을 선택하십시오 (문의/읽기/쓰기/뒤로).
4. SWR/SIE, 단일 비행 및 TTL 지터 대 스탬프.
5. 이벤트 (펍/서브), 그룹의 태그 퍼지 기능으로 비활성화됩니다.
6. 핫 키에 대한 근거리 캐시와 피크 전에 미리 따뜻합니다.
7. 형식 및 압축 (protoguy/MsgPack, Brotli), 크기 제어.
8. LRU/LFU 정책, 네임 스페이스/테넌트 할당량.
9. SLO/차이나, 대기 시간, 퇴거, 오래된%, 신선도 지연.
10. 보안: 개인, 토큰 화, 네트워크/ACL을위한 매장이 없습니다.

15) 반 패턴

'캐시 없음' "만일의 경우" 및 TTL 오류는 오프로드가 없습니다.
키에는 모든 쿼리/헤더 → 카디널리티 폭발이 포함됩니다.
각 릴리스에서 벌크 퍼지 "총 CDNA/Redis".
각인에 대한 보호 부족 및 "상단 키" 의 일회성 만료.
할당량/격리가없는 단일 공통 Redis; "핫" 테넌트는 전체 캐시를 먹습니다.
edge/CDN에 대한 개인 답변 캐싱.
신선도/퇴거 원격 측정 → 맹인 통제가 없습니다.

16) iGaming 컨텍스트/핀 테크: 실제 노트

리더 보드/등급: TTL 2-10 초, 집계 스트림 + CRDT, SWR 충돌.
게임 카탈로그/배너: CNC + Redis; 키: 지역/통화/언어; "프로모션: 업데이트" 태그로 인한 장애.
지불 상태: 쓰기 경로에 캐시가 없습니다. 읽기 - 짧은 TTL (보통 3-5 초) 또는 직접 요청.
KYC/AML 답변: 비 PII 파생 상품 (상태) 을 캐시하고 이미지/문서를 Redis에 저장하지 않습니다.
VIP 경로: 별도의 네임 스페이스/Redis 풀, 우선 순위 서비스.

합계

강력한 캐시 전략은 레벨 아키텍처, 올바른 업데이트 패턴, 사려 깊은 TTL/장애, 각인 저항, 깔끔한 키 및 버전, 관찰 성 및 FinOps입니다. 이러한 원칙을 따르면 P95/P99의 꼬리를 안정화하고 소스의 부하를 줄이며 밀리 초 당 예측 가능한 비용을 얻을 수 있습니다. 제품 및 비즈니스에 가장 중요한 위치입니다.

Contact

문의하기

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

통합 시작

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

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

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