Dane dotyczące samouzdrawiania
1) Definicja i cele
Samouzdrowienie danych jest podejściem do inżynierii danych, w którym wady są wykrywane automatycznie, a działania naprawcze (naprawa, ponowne dostarczenie, odwrócenie, ponowna konsolidacja, ponowne indeksowanie) są wykonywane bez interwencji człowieka lub przy minimalnej interwencji (człowiek w pętli w przypadku przypadków wrażliwych).
Cele: MTTR niższe dane, zwiększone zaufanie, odporność na dryfowanie i awarię, przewidywalny koszt własności.
2) Typowe usterki, które należy leczyć
Programy i umowy: niezgodne ze wspólnym rynkiem zmiany, brakujące kolumny, konflikty typów.
Jakość/integralność: duplikaty, zaniechania, wyjątkowość/naruszenia integralności odniesienia.
Czas i świeżość: opóźnienia wtrysku, „otwory” w oknach, desynchronizacja TZ/locales.
Identyfikatory i klucze: zmiana generatora ID, kolizje, pływające klucze naturalne.
Kolejność wydarzeń: późne wydarzenia, ponowne zamawianie, ponowna dostawa (co najmniej raz).
Przechowywanie: degradacja partii, uszkodzone pliki/bloki, zniekształcenie odłamków.
Prawa/bezpieczeństwo: nieprawidłowe maski/szyfrowanie, wycieki PII w przesyłkach.
3) Filary samouzdrawiania
1. Kontrakty na dane (schematy + zasady) z automatycznymi testami.
2. Rurociągi idempotentne (uruchom ponownie bez podwójnego działania).
3. Dziennik i odtwarzalność (surowy/brąz niezmienny, rodowód).
4. Mechanizmy naprawcze (powtórka, zasypka, zagęszczanie, fuzja-naprawa, przebudowa).
5. Obserwowalność i SLO (świeżość, kompletność, wyjątkowość, opóźnienie).
6. Polityka decyzyjna (kiedy automatycznie naprawiamy, kiedy eskalujemy).
4) Kontrakty i testy jakości
Umowa opisuje: schemat, dopuszczalne zakresy, wyjątkowość, RLS/maskowanie, świeżość SLA.
Przykład (styl 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
Testy są wykonywane na każdym kroku: wtrysk → ustawianie → prezentacja. Naruszenie zasad aktywuje automatyczną naprawę (patrz poniżej) i/lub kwarantannę.
5) Idempotencja i determinizm
Upsert/Merge za pomocą stabilnych klawiszy (SCD2 dla historii, SCD1 dla plasterków).
Transformacje deterministyczne: jedno wejście → jedno wyjście o tych samych parametrach.
Wersioning - Napraw wersję kodu/schematu/warstwy oraz etykietę danych (znak wodny).
Zlewozmywak idempotentny: nagrywanie poprzez ustawianie + wymiana atomowa/przemiana.
Dokładnie raz w znaczeniu: akceptowalny transport „przynajmniej raz” + odbiornik idempotent.
6) Zestaw narzędzi naprawczych
Replay/Backfill: redelivery for window's not, [T0, T1] 'from unalterable log (raw).
Uzgadnianie: porównanie kruszyw/kluczy między warstwami (surowe, kurczone, krawędziowe) i pomiędzy systemami (źródło, DWH).
Deduplication: window-dedup by key (txn_id, event_id) + distance heuristic (fuzzy for dirty keys).
Zagęszczenie: przeniesienie małych plików do dużych stron (Parkiet/ORC), ponowne indeksowanie.
Merge-repair: w przypadku konfliktu rekordów priorytet przewiduje (według źródła/czasu/wersji).
Indeksy/materializacje przebudowy: kruszywa przeliczające/sześcian/roll-up.
kwarantanna/cień: podejrzane strony izolują się; konsumenci czytają „czysty” wątek.
Schemat mediacji: automatyczny selektor projekcji (domyślne wypełnienia, kolumny obliczeniowe) dla drobnych zmian.
7) Ochrona i integralność składowania
Sprawdź kwoty i zatwierdzenie blokowe (CRC, parytet).
Przechowywanie kworum (systemy kompatybilne z RAFT/Paxos, kworum czyta/pisze).
Kodowanie kasowania pod kątem opłacalnej redundancji.
Versioning obiektu (undelete).
Atomic commit й Lakehouse (dziennik transakcji, ACID-таблина: Delta/Iceberg/Hudi).
8) Porządek wydarzeń i „brudna rzeczywistość”
Późne wydarzenia: zachować opóźnienie-okno, używać znaku wodnego "i; przeliczanie okien.
Redelivery: dedup by global 'event _ id', idempotence-keys tables.
Czas przesunięcia: normalizacja TZ, przechowywanie 'ingested _ at' i 'event _ time'.
Brak zamówienia: kruszywa event_time-based z regulacją znaku wodnego.
9) Logika decyzji (silnik polityki)
Zasada: „jaka anomalia → jakie działanie → jakie progi → kto jest właścicielem”.
Przykład (pseudo):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) Obserwowalność i SLO dla danych
Zestaw SLO:- Świeżość wyświetlaczy ≤ 15 min.
- Kompletność> 99. 5% na kluczowych polach.
- Unikalność: duplikaty <0. 01%.
- Opóźnienie obliczeniowe: p95 <5 min.
- Stabilność naprawy: Dane MTTR <30 min.
Mierniki i wpisy: eksponat w Prometeuszu/Grafanie; Zbuduj priorytetową taśmę incydentów danych.
11) Pojednanie (praktyki)
Kruszywa kontrolne: 'count/sum/min/max' pomiędzy warstwami/systemami na oknie przesuwnym.
Pojednanie klucza: symetryczna różnica zestawów „,”, „,” (A\B) „(B\A)”.
Okresowe „zadanie audytu”: porównanie ze źródłem, selektywne sprawdzenie u źródła.
Płatności/finansowanie: podwójne wejście, dzienne uzgodnienia graniczne, dziennik korekt.
12) Zarządzanie obwodami i ewolucja
SemVer dla programów: MAJOR (breaks )/MINOR (add )/PATCH (fixes).
Umowy w CI/CD: schemat-diff, kompatybilność, autogeneracja migracji.
Hak zasypki: z MINOR dodać domyślne/obliczone pola, przeliczyć prezentacje.
Elastyczne projekcje: Czytelnicy czytają podzbiory kolumn; zakazać „SELECT”.
13) Bezpieczeństwo, prywatność, zgodność
RLS/CLS: filtry wiersza/kolumny, zwłaszcza w gałęziach naprawy i eksportu.
Tokenizacja oparta na PII w celu zrównoważonej deduplikacji.
Kontrola dostępu/eksportu: kto widział, co eksportował, gdzie wysłał.
DSAR/Retention: automatyczne usuwanie/anonimizacja w procesach naprawy; kickbacks uwzględniają wymogi prawne.
14) Koszt i wydajność
Zasypka kosztowa: ograniczenie szerokości okien (na przykład przesuwanie 3-7 dni).
Materializacje i bufory: ponowne obliczenie tylko zmienionych partii (przyrostowych).
Priorytety: najpierw krytyczne prezentacje (finanse, ryzyko), a następnie analityczne.
Naprawy poza szczytem: okna nocne/niski priorytet w harmonogramie.
15) Symulacje testów i incydentów
Chaos-data-testing: Celowo złamać przegrody/obwody na scenie.
Fałszywe opóźnienia: fałszywe partie, nieporządek, duplikaty.
Złote zbiory danych: poziomy odniesienia dla uzgadniania po naprawie.
GameDays: regularne szkolenie zespołu na bieżących książkach.
16) Antypattery
Poprawki „niewidzialne”: ciche edycje bez audytu lub raportowania.
Niewypełnione zasypki: brak źródła prawdy/wersji formuły.
Ciężkie życzenia na żywo do OLTP podczas napraw: kończysz prod.
WYBIERZ u konsumentów: przerwa z każdą drobną zmianą.
Jedynym kluczem do deduplikacji jest brak kluczy awaryjnych/podpisów hash.
17) Plan działania w zakresie wdrażania
1. Odkrycie: zestawy/mierniki krytyczne, ryzyko, właściciele; mapa zależności.
2. Umowy i testy: sformalizowanie systemów/zasad w CI; publikuje glosariusz.
3. Idempotencja: przepisać rurociągi klucza w upsert/fuzji, zlewozmywak atomowy.
4. Surowy log i rodowód: warstwa niezmienna, pełne metadane, znak wodny "i.
5. Mechanika naprawy: zasypka/powtórka, odpływ, zagęszczenie, kwarantanna; silnik polityczny.
6. Obserwowalność i SLO: wysokiej jakości deski rozdzielcze, alerty, taśma priorytetowa.
7. Chaos-dane i szkolenia: regularne ćwiczenia + runbook'i.
8. Optymalizacja kosztów: ponowne obliczenia przyrostowe, priorytetyzacja okien.
18) Lista kontrolna przed zwolnieniem
- Umowy na dane i testy jakości obejmują zestawy krytyczne.
- Rurociągi są idempotentne; są atomowe przymierze i pullbacks.
- Konfiguracja zasypki/powtórki i kwarantanny, zasady eskalacji są wypisywane.
- Świeżość/Kompletność/Wyjątkowość/Wskaźniki opóźnień i wpisy w prod.
- W tym audyt edycji/napraw; przechowuje wersje formuł i sklepów.
- DSAR/Retention jest przestrzegany do naprawy i rolki.
- Istnieje książka startowa "i, przeprowadzone ćwiczenia, MTTR-target stała.
- Koszty zasypek są ograniczone przez straż budżetową.
19) Przykłady akcji automatycznych (szablony)
„Awaria świeżości okna X” → zasypka (last_2h) → jeśli nie ok w 30 minut → kwarantanna + strona dyżuru.
„Duplikat txn_id spike” → include strict dedup + source reconciliation → cause report.
„DROBNA zmiana schematu” → wygenerować obliczone domyślne pole → odbudować agregaty.
„Utrata partii” → przywrócenie → weryfikacja kwoty kontrolnej z zmienionego obiektu.
Linia końcowa: samouzdrawiające się dane to nie jeden „skrypt naprawczy”, ale architektura systemu: formalne kontrakty, idempotentne rurociągi, niezawodne rejestrowanie, zautomatyzowana mechanika naprawy i przejrzysta obserwowalność przy ścisłych SLO. Taki system nie tylko naprawia się sam, ale także przekształca incydenty w zdarzenia zarządzalne o zrozumiałym czasie kosztów i odzyskiwania.