What is a data contract & why is it important?

Datakontrakter: Nøglen til Pålidelige Data

04/08/2017

Rating: 3.93 (6465 votes)

I en verden, der i stigende grad er drevet af data, er kvaliteten og pålideligheden af disse data altafgørende. Alt for mange organisationer kæmper med et kaotisk datalandskab, hvor data er upålidelige, inkonsistente og svære at stole på. Dette fører til forkerte forretningsbeslutninger, ineffektive processer og en generel mistillid til data-teams. Løsningen på dette udbredte problem kan findes i et koncept, der vinder mere og mere frem: datakontrakter. Forestil dig en formel aftale, der sikrer, at de data, der produceres af et system, altid er præcis, som forbrugerne forventer. Det er essensen af en datakontrakt – en bro af tillid mellem dataleverandører og dataforbrugere.

How do data contracts work?
Data contracts apply to both entities & application-level events, and while conceptually contracts work the same way for both, the implementation differs. Implementation of entity contracts is powered by a process called Change Data Capture which has become a popular method of syncing data from production systems to the data warehouse.
Indholdsfortegnelse

Hvad er en Datakontrakt?

En datakontrakt er i sin kerne en formel, API-baseret aftale mellem en dataleverandør (typisk softwareingeniører, der ejer en service) og en dataforbruger (f.eks. dataanalytikere, data scientists eller andre services). Denne aftale definerer strukturen (skemaet), betydningen (semantikken) og service-niveauet for de data, der udveksles. Man kan tænke på det som en API for data. Ligesom softwareudviklere er vant til at definere og overholde API-kontrakter for, hvordan systemer interagerer med hinanden, introducerer datakontrakter den samme disciplin og formalitet til dataverdenen.

Ofte opstår problemer, fordi applikationsudviklere har meget lidt indsigt i, hvordan de data, deres systemer producerer, rent faktisk bliver brugt downstream. For dem er dataplatformen ofte en 'sort boks'. Omvendt ser dataforbrugerne dataleverandørerne som værende for langt væk og for svære at påvirke. Datakontrakter formaliserer dette forhold og skaber et fælles sprog og et sæt forventninger, som begge parter kan forholde sig til.

Hvorfor er Datakontrakter så Vigtige?

Implementeringen af datakontrakter er mere end blot en teknisk øvelse; det er en kulturel ændring, der fremmer samarbejde og ejerskab over data. Fordelene er mange:

  • Højere Datakvalitet og Pålidelighed: Ved at håndhæve aftaler om skema og semantik ved kilden, reduceres risikoen for fejl, inkonsistens og 'brudte' data markant.
  • Større Tillid til Data: Når forbrugere ved, at der findes en formel kontrakt, der garanterer dataenes integritet, stiger tilliden, og data bliver brugt med større sikkerhed i kritiske forretningsprocesser.
  • Øget Udviklingshastighed (på lang sigt): Selvom det kan virke som en ekstra byrde i starten, reducerer datakontrakter teknisk gæld og den tid, der bruges på fejlfinding og datarensning. Dette frigør tid for både ingeniører og data scientists.
  • Klarhed og Dokumentation: Kontrakterne fungerer som levende dokumentation for, hvilke data der er tilgængelige, hvad de betyder, og hvem der ejer dem.

Fundamentet: Change Data Capture (CDC)

En populær teknologi til at drive implementeringen af datakontrakter for forretningsenheder (entities) er Change Data Capture (CDC). CDC er en proces, der fanger alle ændringer på rækkeniveau i en database (f.eks. `INSERT`, `UPDATE`, `DELETE`) og streamer dem som hændelser. Dette giver en komplet og detaljeret revisionslog over alle ændringer i en enheds tilstand.

CDC er utroligt kraftfuldt, men at bruge rå CDC-hændelser direkte som en integrationsmekanisme er en dårlig ingeniørpraksis. Hvorfor? Fordi det eksponerer den interne datamodel for en service direkte til alle forbrugere. Dette bryder princippet om indkapsling. Hvis en udvikler ønsker at omdøbe en kolonne eller omstrukturere en tabel, vil det øjeblikkeligt ødelægge alle downstream-systemer, der er afhængige af den gamle struktur. Det skaber en ekstremt skrøbelig arkitektur.

Her kommer datakontrakter ind i billedet. De fungerer som et abstraktionslag oven på CDC. I stedet for at forbrugerne lytter direkte til de rå databaseændringer, lytter de til et veldefineret, stabilt og versioneret 'kontrakt-emne' (topic), som er formet i henhold til aftalen.

Krav til en Robust Datakontrakt-implementering

For at datakontrakter skal være effektive og fremme den ønskede kulturelle ændring, skal den tekniske implementering opfylde flere grundlæggende krav:

  1. Håndhævelse hos Producenten: En kontrakt er værdiløs, hvis den ikke håndhæves. Håndhævelsen skal ske hos dataleverandøren, før data overhovedet forlader systemet. En mundtlig aftale er ikke nok.
  2. Offentlige og Versionerede Kontrakter: Kontrakterne skal være tilgængelige for alle og underlagt versionskontrol. Dette muliggør styret udvikling over tid uden at ødelægge eksisterende integrationer.
  3. Dækning af Skemaer: Som et minimum skal kontrakten definere dataenes struktur – felternes navne, datatyper, og om de er påkrævede. Bagudkompatible ændringer (som at tilføje et valgfrit felt) skal være mulige, mens destruktive ændringer (som at fjerne et felt) skal forhindres.
  4. Dækning af Semantik: En kontrakt skal også dække dataenes betydning. En ændring fra at gemme en længde i tommer til centimeter er en semantisk ændring, der bryder kontrakten, selvom skemaet (f.eks. et numerisk felt) er det samme. Dette kan omfatte beskrivelser, værdibegrænsninger og forretningsregler.
  5. Må ikke Bremse Udviklere: Processen for at definere og implementere kontrakter skal være integreret i udviklernes eksisterende værktøjer og CI/CD-pipelines for at minimere friktion.
  6. Må ikke Bremse Data Scientists: Data scientists skal stadig have adgang til rå data i et begrænset 'sandkassemiljø' til eksploration. Når en prototype skal i produktion, skal den dog baseres på en formel datakontrakt.

Implementeringens Fire Faser

En fuld implementering af datakontrakter kan opdeles i fire hovedfaser: Definition, Håndhævelse, Opfyldelse og Overvågning.

1. Definition

Kontrakter skal defineres som kode og gemmes i et versionskontrolsystem (f.eks. Git). Dette gøres typisk ved hjælp af et Interface Definition Language (IDL) som Googles Protocol Buffers (Protobuf) eller Apache Avro. Disse værktøjer giver mulighed for at definere et sprog-agnostisk skema, som derefter kan bruges til at generere kode til serialisering og deserialisering af data. Her kan man også tilføje metadata som ejerskab, beskrivelser og valideringsregler.

How do data contracts work?
Data contracts apply to both entities & application-level events, and while conceptually contracts work the same way for both, the implementation differs. Implementation of entity contracts is powered by a process called Change Data Capture which has become a popular method of syncing data from production systems to the data warehouse.

2. Håndhævelse

Dette er den kritiske fase, hvor kontrakten valideres. Det sker typisk automatisk som en del af en CI/CD-pipeline:

  • Integrationstests: Automatiserede tests verificerer, at den kode, udvikleren har skrevet, rent faktisk producerer data, der overholder det definerede skema.
  • Skemakompatibilitet: Før en ny version af en kontrakt godkendes, tjekkes den mod den eksisterende version i et skemaregister (f.eks. Confluent Schema Registry). For producenter skal kompatibilitetstilstanden typisk være `FORWARD`, hvilket betyder, at nye felter kan tilføjes, og valgfrie felter kan fjernes, uden at det ødelægger for eksisterende forbrugere.

3. Opfyldelse

Når koden er implementeret, skal kontrakten opfyldes. Som nævnt er det her, vi bygger et abstraktionslag oven på CDC. Dette gøres ved hjælp af stream processing-teknologier som kSQL eller Apache Flink. En stream processing-opgave lytter til de rå CDC-hændelser fra en eller flere databasetabeller og transformerer dem i realtid for at matche det aftalte kontraktskema. For eksempel kan man `JOIN`e flere tabeller for at skabe en denormaliseret visning af en enhed, eller man kan udelade følsomme PII-felter (personligt identificerbare oplysninger) fra den offentlige kontrakt.

4. Overvågning

Selv med grundig testning kan fejl snige sig ind, især semantiske fejl. Derfor er det afgørende at have god overvågning på plads. Dette indebærer at monitorere data-strømmene for uventede ændringer i statistiske egenskaber, distributioner eller værdier, der kan indikere, at den underliggende betydning af dataene har ændret sig. Dette er et avanceret emne, der kræver dedikerede værktøjer og processer.

Sammenligning: Direkte CDC vs. CDC med Datakontrakt

For at illustrere fordelene er her en tabel, der sammenligner de to tilgange.

AspektDirekte CDCCDC med Datakontrakt
AbstraktionIngen. Intern datamodel eksponeres.Høj. Et stabilt, offentligt interface beskytter forbrugerne.
PålidelighedSkrøbelig. Små ændringer hos producenten kan bryde alt.Robust. Kontrakten garanterer stabilitet og bagudkompatibilitet.
UdviklerfrihedLav. Udviklere er bange for at ændre databasen.Høj. Intern refaktorering er mulig, så længe kontrakten overholdes.
Sikkerhed & GovernanceSvært at styre. Alle data eksponeres som standard.Stærk. Kontrakten definerer præcist, hvilke data der deles.

Ofte Stillede Spørgsmål (FAQ)

Er en datakontrakt bare et smart ord for en API?

Ja og nej. Konceptuelt er de meget ens, da de begge er formelle aftaler om, hvordan to systemer interagerer. Udtrykket 'datakontrakt' bruges dog specifikt til at fremhæve behovet for en formel aftale mellem dataleverandører og -forbrugere – et område, der historisk set har været forsømt. Implementeringen er også ofte anderledes, idet den fokuserer på asynkrone data-strømme snarere end synkrone anmodning/svar-mønstre.

Hvem er ansvarlig for at oprette datakontrakter?

Det er et samarbejde. Dataleverandøren (softwareingeniøren) er typisk ansvarlig for den tekniske implementering og vedligeholdelse af kontrakten. Men definitionen af, hvad kontrakten skal indeholde, bør ske i tæt dialog med dataforbrugerne, der har forretningsforståelsen og ved, hvad dataene skal bruges til.

Bremser datakontrakter ikke udviklingen?

På kort sigt kan det introducere et ekstra trin i udviklingsprocessen. Men på mellemlangt og langt sigt har det en markant positiv effekt på den samlede udviklingshastighed. Ved at investere i stabile, pålidelige data i starten undgår man utallige timer med fejlfinding, datarensning og koordinering af destruktive ændringer senere. Det reducerer teknisk gæld og skaber et mere effektivt og skalerbart datamiljø.

Konklusion

Datakontrakter repræsenterer et afgørende skift fra et reaktivt til et proaktivt syn på datakvalitet. Ved at implementere formelle, håndhævede aftaler ved datakilden flytter vi ansvaret for datakvalitet derhen, hvor det hører hjemme: hos producenten. Selvom den tekniske implementering kræver en investering i infrastruktur og processer, er gevinsten enorm. Det resulterer i et datalandskab præget af pålidelighed, tillid og samarbejde. Det er ikke bare en teknisk løsning, men en fundamental ændring i organisationskulturen, der gør det muligt for virksomheder at udnytte det fulde potentiale af deres data.

Hvis du vil læse andre artikler, der ligner Datakontrakter: Nøglen til Pålidelige Data, kan du besøge kategorien Sundhed.

Go up