Turning Scattered Data Into Queryable Segments at Scale: How Razorpay Built Its Customer Data Platform
Author: Varun Meka (Razorpay) | Source: Razorpay Engineering Blog | Published: 2026-06-26
한 줄 요약
5억+ 사용자 프로필에서 audience segment를 30ms 미만으로 서빙하는 consent-native CDP — segment 재사용(deterministic hash), privacy-preserving 멤버십 체크(phone hash), Theta Sketch 기반 추정으로 freshness·latency·consent·cost·correctness를 동시에 균형.
핵심 주장/내용
- 문제: 한 고객이 여러 결제 수단·기기로 등장 → 같은 사람으로 묶는 entity resolution 필요. segment 요청이 과거엔 cross-team 데이터 요청 + 커스텀 Spark 잡으로 2-3일 → Diwali 세일 놓침. DPDPA(인도 개인정보법)로 consent-scoped 처리가 아키텍처에 baked-in
- Stage 1 Segmentation DAG: JSONB AND/OR/NOT 규칙 → Airflow DAG가 참조된 attribute만 추출(targeted load plan, naive join은 Spark 메모리 폭발) → Spark가 멤버십 리스트 생성 → S3(KMS 암호화). segment 재사용: deterministic hash로 의미 동일 규칙(A AND B = B AND A) 탐지 → 재계산 회피(“compute reuse beats compute optimization”)
- Stage 2 Ingestion: S3-backed(경량) vs DynamoDB-backed(Temporal workflow — event validation → import → version promotion → lineage, 독립 재시도). zero-downtime refresh: 각 refresh가 새 테이블 버전(vN), 검증 후 포인터 전환
- Stage 3 Serving: segment당 1 DynamoDB 테이블(traffic 격리). privacy-preserving: partition key가 phone의 SHA-256 hash, caller가 pre-hashed ID 전송 → boolean 응답. serving 레이어가 raw phone을 결코 받지 않음(“hash before you store” → serving을 PII blast radius에서 제거)
- Estimation Engine: 전체 파이프라인 실행 없이 segment 크기 추정. HLL은 union만 효율적이나 intersection/difference에서 오차 compound → Theta Sketch(set 연산 직접 지원, predictable error). attribute-value쌍마다 사전 생성 → 쿼리 시 set 연산으로 초 단위 추정
주요 수치 / 사실
- 5억+ 프로필, 30ms 미만 멤버십 체크, 1,500+ RPS, 1,200만+ merchant
- Theta Sketch k=4096 → relative SE ~1.56%, 수천 멤버 이상 segment는 ±3% 내 95% 신뢰
- 교훈: compute 재사용 > 최적화, hash before store, approximate(sketch)가 보통 충분(multi-hour → sub-second iteration)
관련 위키
Source: 원문 보기