자가 치유 데이터
1) 정의와 목표
자가 치유 데이터는 결함이 자동으로 감지되는 데이터 엔지니어링에 대한 접근 방식이며 수정 조치 (복구, 재전달, 롤백, 재 통합, 재 인덱싱) 는 사람의 개입없이 또는 최소한의 개입없이 수행됩니다 (민감한 경우 루프).
목표: 데이터 MTTR 감소, 신뢰 증가, 드리프트 및 실패에 대한 탄력성, 예측 가능한 소유 비용.
2) 치료할 전형적인 결함
계획 및 계약: 호환되지 않는 변경, 누락 된 열, 유형 충돌.
품질/무결성: 중복, 누락, 고유성/참조 무결성 위반.
시간과 신선도: 주입 지연, 창문의 "구멍", TZ/로케일의 비 동기화.
식별자 및 키: ID 생성기 변경, 충돌, 부유 자연 키.
이벤트 순서: 늦은 이벤트, 재정렬, 재전달 (적어도 한 번).
스토리: 배치 저하, 파일/블록 파손, 샤딩 왜곡.
권한/보안: 잘못된 마스크/암호화, PII 누출 업로드
3) 자기 치유의 기둥
1. 자동 테스트로 데이터 계약 (스키마 + 규칙).
2. 이데올로기 파이프 라인 (이중 효과없이 다시 시작).
3. 저널 및 재현성 (원시/청동 변경 불가능, 계보).
4. 수리 메커니즘 (재생, 백필, 압축, 병합 수리, 재건).
5. 관찰 및 SLO (신선도, 완전성, 독창성, 대기 시간).
6. 의사 결정 정책 (자동 수정 할 때, 확대 될 때).
4) 계약 및 품질 테스트
계약서에는 체계, 허용 가능한 범위, 고유성, RLS/마스킹, SLA 신선도가 설명되어 있습니다.
예 (YAML 스타일):yaml dataset: payments schema:
- name: txn_id; type: string; unique: true
- name: user_id; type: string; not_null: true
- name: amount; type: decimal(18,2); min: 0
- name: created_at; type: timestamp; tz: UTC freshness_sla: 15m constraints:
- "count(distinct txn_id) = count()"
- "pct_null(user_id) < 0. 1%"
privacy:
- mask: card_pan -> BIN6LAST4 actions_on_violation:
- auto_quarantine_partition
- backfill_missing_window
- notify_owner_and_open_ticket
테스트는 모든 단계에서 실행됩니다: 주입 → 준비 → 쇼케이스. 규칙 위반은 자동 수리 (아래 참조) 및/또는 검역을 활성화합니다.
5) 이념과 결정론
안정적인 키 (역사의 경우 SCD2, 슬라이스의 경우 SCD1) 에 의한 Upsert/Merge.
결정 론적 변환: 동일한 매개 변수를 가진 하나의 입력 → 하나의 출력.
Versioning-코드/스키마/계층 버전 및 데이터 레이블 (워터 마크) 을 수정합니다.
이데올로기 싱크: 스테이징 + 원자 스왑/이름 변경을 통한 기록.
정확히 한 번의 의미: 허용 가능한 "적어도 한 번" 전송 + dempotent 수신기.
6) 수리 툴킷
재생/백필: 변경할 수없는 로그 (원시) 에서 창 [T0, T1] 에 대한 재전송.
조정: 레이어 간의 집계/키 (원시 선별 됨 마트) 와 시스템 (소스 DWH) 간의 비교.
중복 제거: 키 별 창 제거 (txn _ id, 이벤트 _ id) + 거리 휴리스틱 (더러운 키의 경우 퍼지).
압축: 작은 파일을 큰 당사자 (Parquet/ORC) 로 전송, 재 색인.
병합 수리: 레코드가 충돌하면 우선 순위가 결정됩니다 (소스/시간/버전별).
인덱스/재구성: 집계/큐브/롤업 재 계산.
검역/그림자: 의심스러운 당사자들은 스스로를 격리시 소비자는 "깨끗한" 스레드를 읽습니다.
스키마 중재: 사소한 변경에 대한 자동 투영 선택기 (채우기 불이행, 계산 가능한 열).
7) 저장 보호 및 무결성
금액 및 차단 유효성 검사 (CRC, 패리티).
쿼럼 스토리지 (RAFT/Paxos 호환 시스템, 쿼럼 읽기/쓰기).
비용 효율적인 중복성을위한 지연 코딩.
오브젝트 저장 버전 (삭제되지 않음).
원자 커밋 온라인 레이크 하우스 (트랜잭션 로그, ACID-та따라서: Delta/Iceberg/Hudi).
8) 사건의 순서와 "더러운 현실"
늦은 이벤트: 지연 시간을 유지하고 워터 마크를 사용하십시오 '및; 창문을 다시 계산합니다.
재배송: 글로벌 '이벤트 _ id', demempotency 키 테이블에 의한 디드 업.
오프셋 시간: TZ 정규화, 'ingested _ at' 및 'event _ time' 저장.
순서가 맞지 않음: 워터 마크 조정이있는 이벤트 _ time 기반 집계.
9) 의사 결정 논리 (정책 엔진)
규칙: "어떤 이상 → 어떤 행동 → 임계 값 → 누가 소유자인가".
예 (의사):yaml policy: payments_freshness detect: freshness_delay > 15m auto_actions:
- trigger: backfill(last_60m)
- if: gap_persisted > 30m then: quarantine_partition(date=today, hour=current_hour)
escalate:
- if: gap_persisted > 60m -> page_oncall:data guardrails:
- do_not_expose_unverified_to_marts
10) 데이터에 대한 관찰 및 SLO
SLO 세트:- 디스플레이 케이스의 신선도
- 완전성> 99. 주요 분야에서 5%.
- 독창성: 중복 <0. 01%.
- 계산 대기 시간: p95 <5 분
- 수리 안정성: MTTR- 데이터 <30 분.
측정 및 경고: Prometheus/Grafana에 전시; 데이터 사고의 우선 순위 테이프를 작성하십
11) 화해 (관행)
집계 확인: 슬라이딩 창의 레이어/시스템 간의 'count/sum/min/max'.
주요 조정: 집합의 대칭 차이 '
정기적 인 "감사 작업": 소스와의 비교, 소스에서의 선택적 점검.
지불/금융: 이중 입장, 일일 차단 조정, 조정 로그.
12) 서킷 관리 및 진화
체계에 대한 SemVer: MAJOR (break )/MINOR (add )/PATCH (fixes).
CI/CD 계약: 스키마-디프, 호환성, 마이그레이션 자동 생성.
백필 후크: MINOR를 사용하면 기본값/계산 된 필드를 추가하고 쇼케이스를 다시 계산하십시오.
유연한 프로젝션: 독자는 열의 하위 집합을 읽습니다. "SELECT" 금지.
13) 보안, 개인 정보 보호, 규정 준수
RLS/CLS: 행/열 필터, 특히 수리 지점 및 수출에서.
지속 가능한 중복 제거를위한 PII 기반 토큰 화.
액세스/내보내기 감사: 누가 수출했는지, 어디로 보냈는지 확인했습니다.
DSAR/보존: 수리 프로세스에서의 자동 삭제/익명화; 리베이트는 법적 요구 사항을 고려합니다.
14) 비용과 성능
비용 인식 백필: 창문 너비 제한 (예: 3-7 일 슬라이딩).
재료 및 캐시: 변경된 배치 만 다시 계산합니다 (증분).
우선 순위: 첫 번째 중요한 쇼케이스 (금융, 위험), 분석.
피크가 아닌 수리: 스케줄러의 야간 창/낮은 우선 순위.
15) 테스트 및 사고 시뮬레이션
혼돈 데이터 테스트: 무대에서 파티션/회로를 고의로 중단하십시오.
가짜 지연: 가짜 배치, 고장 난, 복제.
황금 데이터 세트: 수리 후 조정을위한 벤치 마크.
게임 데이: 런북에 대한 정기적 인 팀 교육.
16) 안티 패턴
"보이지 않는" 수정: 감사 나보고없이 자동 편집.
테스트되지 않은 백필: 진실 소스/수식 버전 없음.
수리하는 동안 OLTP에 대한 실시간 요청: prod를 완료합니다.
소비자의 SELECT: MINOR 변경으로 중단됩니다.
중복의 유일한 키는 폴백 키/해시 서명이 없다는 것입니다.
17) 구현 로드맵
1. 발견: 중요한 세트/메트릭, 위험, 소유자; 종속성 맵.
2. 계약 및 테스트: CI의 체계/규칙을 공식화; 용어집을 게시합니다.
3. 이데올로기: 주요 파이프 라인을 업 세트/병합, 원자 싱크로 다시 작성하십시오.
4. 원시 로그 및 계보: 불변의 레이어, 전체 메타 데이터, 워터 마크 '및.
5. 수리 역학: 백필/리플레이, 디드 업, 압축, 검역; 정책 엔진.
6. 관찰 및 SLO: 고품질 대시 보드, 경고, 우선 순위 테이프.
7. 혼돈 데이터 및 교육: 정기적 인 운동 + 런북 '및.
8. 비용 최적화: 증분 재계산, 창 우선 순위.
18) 시험판 점검표
- 데이터 계약 및 품질 테스트는 중요한 세트를 다룹니다.
- 파이프 라인은 demmpotent입니다. 원자 커밋과 풀백이 있습니다.
- 백필/재생 및 검역이 구성되고 에스컬레이션 정책이 설명됩니다.
- Freshness/Completeness/Uniqueness/Latency 메트릭 및 경고.
- 편집/수리에 대한 감사 포함; 공식 및 상점 버전을 저장합니다.
- 수리 및 롤백을 위해 DSAR/유지가 수행됩니다.
- 런북이 있으며 연습을 수행하면 MTTR 대상이 고정됩니다.
- 백필 비용은 예산 담당자에 의해 제한됩니다.
19) 자동 동작의 예 (템플릿)
"창 신선도 실패 X" → 백필 (마지막 _ 2h) → 30 분 안에 괜찮지 않으면 → 검역 + 통화 페이지.
"중복 txn _ id 스파이크" → 는 엄격한 dedup + 소스 조정 → 원인 보고서를 포함합니다.
"MINOR 스키마 변경" → 계산 된 기본 필드 → 재구성 집계를 생성합니다.
"배치 손실" → 버전이있는 객체에서 체크 금액의 → 검증을 복원합니다.
결론: 자체 치유 데이터는 하나의 "수리 스크립트" 가 아니라 공식 계약, dempotent 파이프 라인, 안정적인 로깅, 자동 수리 메커니즘 및 엄격한 SLO의 투명한 관찰 가능성과 같은 시스템 아키텍처입니다. 이러한 시스템은 스스로 수리 할뿐만 아니라 이해할 수있는 비용과 복구 시간으로 사고를 관리 가능한 이벤트로 전환합니다.