실시간 피드 이벤트: 아키텍처 및 보안
실시간 이벤트 피드는 게임 화, 사기 방지, CRM 트리거 및 지불이있는 제품의 "순환 시스템" 입니다. 데이터 유출이 아닌 중복 상품이 아닌 정점에서 예측 가능하게 작동하려면 프로토콜 및 버스에서 시그니처, demotency, 예산 개인 및 관찰 성에 이르기까지 엄격한 아키텍처가 필요합니다.
1) 목표 및 요구 사항
신뢰성: 최소 지연이있는 이벤트 전달 (p95 λ250 ms 섭취, p95 소비자에게 1-2 초).
배송: 적어도 한 번은 전송을 통해 논리적으로 정확하게 한 번만 전송합니다.
주문: 창을 재정렬하여 키 (일반적으로 'user _ id') 로 주문합니다.
보안: MSL, HMAC/JWT, 키 회전, 재생/중복 보호, PII 최소화.
스케일: 수평 샤딩, 역압, 속도 제한, DLQ/재생.
관리 가능성: 다운 타임이없는 스키마 레지스트리, 버전 지정, 마이그레이션.
준수: 감사 (WORM), RG/KYC 게이트, 지리 정책, GDPR/익명화.
2) 참조 아키텍처 (계층 별)
1. 프로듀서 (소스): 게임 서버, 지갑/결제, KYC/AML, 클라이언트 SDK (웹/iOS/Android).
2. API 게이트웨이 (Ingress): TP/gRPC 수신, 스키마 검증, 인증, HMAC/MTLS, 시간 정규화.
3. 큐/스트림: Kafka/Rabbit/Cloud Pub/Sub-버퍼링, 'user _ id' 로 분할.
4. 스트림 프로세서: 정규화 기, 농축, 주제 라우팅, 이상/봇 방지 플래그, demotent 레코딩.
5. 소비자: 규칙/점수, 보상 오케스트레이터, CRM/CDP 커넥터, 사기 방지, 분석 싱크대 '및.
6. 스토리지: 불변의 이벤트, 상점, demempotency 지수, 감사 로그.
7. 관찰 가능성: 지표, 로그, 흔적, 경고; 패닉 → DLQ.
8. 관리 비행기: 스키마 레지스트리, 키/비밀, RBAC/ABAC, phicheflags, 재생 서비스.
3) 배송 프로토콜: 사용시기
TP/JSON (서버 간 웹 후크): 간단하고 호환되며 외부 파트너에게 적합합니다. HMAC + demempotency를 추가하십시오.
gRPC/원형: 낮은 대기 시간, 엄격한 체계, 내부 서비스를위한 비디 스트림.
웹 소켓/SSE: 클라이언트로 푸시하고 리더 보드에 대한 UI 구독 및 진행 상황.
CDC/Kafka Connect: 소스가 비즈니스 서비스가 아닌 데이터베이스/지갑 인 경우.
권장 사항: 외부 경계 - HTT + HMAC + MTLS; 내부-gRPC/프로토 파이.
4) 이벤트 및 컨벤션 모델
json
{
"이벤트 _ id": "e _ 01HF3Z8Z7Q8Q2K", "이벤트 _ 유형": "베팅", "스키마 _ 버전": "1. 3. 0, "" arched _ at ":" 2025-10-24T11: 37: 21Z "," inested _ at ":" 2025-10-24T11: 37:21. 183Z "," key ": {" user _ id ":" u _ 12345 "}," ctx ": {
"세션 _ id": "s _ 778", "플랫폼": "ios", "geo": "TR", "장치 _ fp": "fp _ 4a1"...
}, "페이로드": {
"game _ id": "slot _ wolf", "bet": 0. 5, "승리": 1. 25, "통화": "EUR", "제공자": "GameCo"
}, "sig": {
"algo": "HMAC-ș256", "kid": "k _ 2025 _ 10", "ts": 1730061441, "mac": "c7b7b3... f1"
}
}
규칙:
- 두 번은 'arched _ at' (소스) 및 'inested _ at' (게이트웨이) 입니다. 시계가 λ300 초로 표류하도록하십시오.
- 라우팅 키는 순서를 결정하는 것입니다 (일반적으로 'user _ id').
- 최소화 원칙에 따라 'ctx '/' 페이로드' 에서만 PII; 민감한 속성, 토큰 화.
5) 배달, 주문 및 demmpotence
최소한 한 번 전송 → 복제 및 재정렬이 가능합니다.
정확히 한 번의 논리: '(이벤트 _ id)' 및/또는 '(user _ id, source _ seq)' 에 고유 한 인덱스가있는 demmpotence 테이블을 유지하십시오. 반복-수술이 없습니다.
SQL 스케치:sql
CREATE TABLE 이벤트 _ log (
이벤트 _ id TEXT PRIMARY KEY, 사용자 _ id TEXT, 이벤트 _ 유형 TEXT, 발생 _ at TIMESTAMPTZ, 페이로드 JSONB
);
-이중 보호 인서트
INSERT INTO 이벤트 _ log (이벤트 _ id, 사용자 _ id, 이벤트 _ 유형, 발생 _ at, 페이로드)
VALUES (: 이벤트 _ id,: user _ id,: 이벤트 _ 유형,: 발생 _ at,: 페이로드)
CONFLICT (이벤트 _ id) 는 아무것도하지 않습니다.
주문: 프로세서에서 'user _ id' + 창 60-120 초를 재정렬하여 스트림을 분할합니다. 나중에 들어오는 이벤트는 시정 기능의 "재생" 에 속합니다.
6) 역압 및 최고 관리
토큰 버킷 속도 제한 не진입 (IP 당, 파트너 당, 키 당).
회로 차단기: 내부 소비자의 5xx, 저하 → (옵션 이벤트가 중단되면 대기열이 다시 트레이 간격을 증가시킵니다).
DLQ: 영구적으로 잘못된 메시지 (비트 맵, 서명 유효하지 않음, 서명 TTL이 초과 됨).
재생 서비스: '이벤트 _ id '/시간 범위별 선택적 DLQ 재생.
7) 계획과 진화: prod를 "파괴" 하지 않는 방법
스키마 등록 소: JSON 스키마/프로토 타입; 호환성 정책: 생산자를위한 후진, 소비자를위한 전진.
버전: 'skima _ version', 전공-ficheflag 및 이중 쓰기 (이중 쓰기) 를 통해서만 가능합니다.
계약: 카나리아 기간 이후의 계획 홍보 및 녹색 지표.
YAML 예제 검증 규칙:yaml 호환성:
시행: 실제 모드: 뒤로 차단 된 _ field:
- 페이로드. ssn
- 페이로드. (PHP 3 = 3.0.6, PHP 4)
-이벤트 _ id
- PHP 3, PHP 4
-발생 _ at
8) 위협 모델 및 보호
위협: 바디 스푸핑, 재생, PII 누출, 주요 타협, 스키마 중독, DoS, MITM, 시그니처 스트리핑.
보호:- 주변의 MTLS: 단기 클라이언트 인증서, CRL/OCSP.
- HMAC 본문 서명 + 'X-Timestamp' 및 TTL (λ300 s).
- JWT (클라이언트 자격 증명/OAuth2) -승인 및 범위 제한.
- 키 회전 (KMS): 헤더의 'kid'; 회전 계획 30-90 일; 마이그레이션 창을 다시 확인하십시오
- Nonce/idempotency: 부가 요청에 대한 'X-Request-ID' (지불, 보너스); 잠시 동안 TTL을 유지하십시오.
- 중요한 통합을위한 컨텐츠 유형 피닝, 최대 바디 크기, 허용 목록 IP/ASN.
- 들어오는 모든 원시 페이로드 + 헤더에 대한 WORM 감사 (변경 불가능한 스토리지).
파이썬 바디 = 요청. 원시 _ body ts = int (요청) 헤더 ["X-Timestamp"])
복근을 주장하십시오 (현재 () - ts) <= 300 # ант달러-재생 아동 = 요청. 헤더 ["X-Key-ID"]
비밀 = kms. 가져오기 (아이)
mac = hmac _ sha256 (비밀, 본문)
hmac _ eq (mac, 요청) 헤더 ["X-Signature"])
9) 개인 정보 보호, PII 및 RG/KYC
최소화: 인라인 대신 토큰 링크 (5-15 분) 로 PII 전송; 원시 로그의 편집/익명화는 금지됩니다. 별도의 PII 페이지를 사용하십시오.
액세스: 관할권 및 역할 속성에 따른 ABAC; 감사 로그에 대한 모든 읽기.
GDPR: 키 매핑을 통해 삭제하여 이벤트 사실을 깨뜨리지 않고 PII를 지울 권리를 행사하십시오.
RG/KYC: 귀중한 보상이 필요한 이벤트는 유효한 KYC 레벨 및 RG 플래그 "OK" 로만 건너 뛰십시오.
10) 관찰 및 SLO
SLO (예):- 섭취 p95 λ250 ms; 엔드-투-엔드 p95 0의 실패. 1 %/일.
- 오류 서명 (HMAC/JWT) 전체 흐름의 02%.
- DLQ 채우기 속도 1%; dempotency 방식으로 "복제" 합니다. 005%.
- 소스 별 RPS, p50/p95 대기 시간, 4xx/5xx, 오류 서명, 시간 왜곡.
- 파티, 처리/초, DLQ를 채우고, 다시 시도하고, 볼륨을 재생합니다.
- 계획: 버전 별 메시지 공유, 호환성 위반.
- 안전: rps 스로틀 속도, 회로 차단기, IP/ASN 이상.
- 흐름의 SRM (한 소스에서 트래픽의 급격한 왜곡).
- 대기 시간 p95> 대상 5 분 +, DLQ 성장> X/min.
- 오류 서명> Y ppm, 'X-Request-ID' 재생 스파이크.
- 소스에서 드리프트 시간> 120 초
11) 다중 지역 및 결함 허용
활성 활성 지역, 글로벌 라우팅 (GeoDNA/Anycast), 'user _ id' → 지역별 끈적 끈적한 키.
중요한 사건에 대한 지역 간 복제 주제 (통화, KYC).
폭발 반경: 세입자/브랜드, 개별 예산 및 키에 의한 격리.
DR 계획: RPO 정기적 인 리허설.
12) 유지 및 재생 정책
원시 이벤트: 7-30 일 (비용 별), 집계/쇼케이스-더 긴.
재생은 서명 된 런북 (누가, 왜, 시간 범위) 에서만 허용됩니다.
리플레이는 항상 분석 투명성을 위해 '재생 = 진정한' 플래그와 함께 새로운 스트림 버전으로 이동합니다.
13) 설정 예
Ingress (NGINX 스타일) 한계:(PHP 3 = 300r/s)
(PHP 3 = 3.0.6, PHP 4)
(PHP 3 = 3.0.6, PHP 4)
(PHP 3 = 3.0.6, PHP 4)
카프카 (예):
속성 번호. 파티션 = 64 분. 동기화되지 않습니다. replicas = 2 acks = 모든 보존. ms = 604800000 # 7 일 압축. 타입 = zstd
키 정책 (KMS):
yaml 회전 _ day: 45 grace _ grace _ day: 7 algos 허용: ["HMAC-SH256"]
(PHP 3 = 3.0.6, PHP 4)
-주제: "wallet _ events"
생산자: ["wallet-svc"]
소비자: ["ledger-svc", "risk-svc"]
14) 실시간 피드 런칭 체크리스트
- 주변의 MTLS, HMAC/JWT, 키 회전 ('kid').
- 논리에 대한 이데올로기 (고유 키, upsert/ON CONFLICT).
- 'user _ id' 로 분할, 창 재정렬, 서비스 재생.
- 스키마 레지스트리 + 호환성 정책; 주요 업데이트를위한 이중 쓰기.
- 속도 제한, 회로 차단기, DLQ + 수동 검토.
- 관찰 가능성: SLO, 서명/대기 시간/DLQ/지연에 의한 경고.
- PII/익명화 정책, ABAC, WORM 감사.
- DR/다중 지역, feilover 리허설.
- 런북: 사건, 재생, 스키마/키 롤백.
15) 미니 케이스 (합성)
상황: 토너먼트 피크, 120에서 RPS 진입, 64 게임, 2 개의 액티브 액티브 리전.
총 4 주 동안: 섭취 p95 210 ms, e2e p95 1. 6 초; DLQ 0. 05%; 오류 서명 0. 009%; dempotency 0 다음에 복제합니다. 003%.
사건: 파트너의 시계 드리프트 (-9 분) → 재생 방지 서지. 서킷 브레이커는 스트림을 "버퍼" 엔드 포인트, 파트너 건강 통지 CSM으로 옮겼습니다. NTP 타박상 후-창은 모든 소비자에게 12 분을 재생합니다. 손실과 이중 지불은 없습니다.
16) 요약
신뢰할 수있는 실시간 피드는 "웹 후크" 가 아닙니다. "이것은 명확한 계약을 맺은 계층 형 시스템입니다. 적어도 한 번 전송 + 논리 정확히 한 번, 레지스터 체계 및 버전 지정, MSL/HMAC/JWT 및 키 회전, 역압/DLQ/재생, PII 최소화 및 엄격한 감사. 이러한 관행을 따르면 게임 화, 사기 방지, CRM 및 지불을 자신있게 구축 할 수있는 빠르고 안전하며 예측 가능한 일련의 이벤트가 제공됩니다.