GH GambleHub

Scheme-Register und Datenentwicklung

Warum eine Schemaregistrierung erforderlich ist

Das Scheme-Register ist eine zentrale Quelle der Wahrheit für Datenverträge (APIs, Ereignisse, Threads, Nachrichten, Speicher), die Folgendes bietet:
  • Vorhersehbare Entwicklung: Kompatibilitätsregeln und automatische Überprüfung des „Abbruchs“.
  • Wiederholbarkeit und Transparenz: Versionsgeschichte, wer/wann/warum geändert.
  • Standardisierung: einheitliche Namen, Fehlerformate, Trace-Felder, PII-Tags.
  • Integration mit CI/CD: Blockierung von Breaking-Änderungen vor der Produktion.

Das Register verbindet Protocol-first und vertragliche Kompatibilität und macht Änderungen schnell und sicher.

Formate und Anwendungen

JSON Schema: REST/HTTP-Payloads, Dokumente, Konfigurationen.
Avro: Event-Busse (Kafka/Pulsar), kompakt/Evolution über Feld-ID.
Protobuf: gRPC/RPC, binär-effizient, strenge Tags.
GraphQL SDL: Schema der Typen und Direktiven, Evolution durch'@ deprecated'.
SQL DDL als Artefakt: Wir erfassen vereinbarte Darstellungen (z.B. externe Vitrinen) - mit Vorsicht.

💡 Eine Registry kann mehrere Artefakttypen gleichzeitig speichern, jedoch mit separaten Kompatibilitätsrichtlinien.

Kompatibilitätsmodi

BACKWARD: Neue Schaltungen lesen alte Daten/Nachrichten. Geeignet für einen Produzenten, der Payload additiv erweitert.
VORWÄRTS: Alte Verbraucher lesen neue Daten korrekt (erfordert einen toleranten Leser).
FULL: kombiniert beides (strenger, bequemer für öffentliche Aufträge).
KEINE: keine Kontrollen - nur für Sandkästen.

Empfehlungen:
  • Events: häufiger BACKWARD (der Produzent erweitert payload optional).
  • Öffentliche APIs: FULL oder BACKWARD + strenger toleranter Leser auf Clients.
  • Interne Prototypen: vorübergehend NONE, aber nicht auf trunk.

Sichere (additive) vs. gefährliche Änderungen

Additiv (OK):
  • Fügen Sie ein optionales Feld/Typ hinzu.
  • enum mit neuen Werten erweitern (bei tolerantem Reader).
  • Hinzufügen einer alternativen Projektion/eines alternativen Ereignisses ('.enriched').
  • Lockerung der Beschränkungen ('minLength', 'maximum' ↑, aber nicht ↓).
Gefährlich (gebrochen):
  • Löschen/Umbenennen von Feldern oder Ändern des Feldtyps/der Pflichtfelder.
  • Änderung der Semantik von Status/Codecs/Reihenfolge in Threads.
  • Neuverwendung von Protobuf-Tags.
  • Änderung des Partitionierungsschlüssels in Ereignissen.

Registrierung organisieren

Namensgebung und Adressierung

Gruppen/Räume: 'payments', 'kyc', 'audit'.
Namen: "Zahlung. authorized. v1` (events), `payments. v1. CaptureRequest` (gRPC), `orders. v1. Order` (JSON Schema).
Dur im Namen, Moll in Metadaten/Version des Schemas.

Metadaten

'owner' (Befehl), 'domain', 'slas' (SLO/SLA), 'security. tier` (PII/PCI), `retention`, `compatibility_mode`, `sunset`, `changelog`.

Lebenszyklusmanagement

Draft → Review → Approved → Released → Deprecated → Sunset.
Automatische Validatoren/Linter, manuelle Design-Überprüfung (API Guild), Release Notes.

Integration in CI/CD

1. Pre-commit: lokale Linter (Spectral/Buf/Avro Tools).
2. PR-Pipeline: schema-diff → Überprüfung des Kompatibilitätsmodus; Wir blockieren das Breaking.
3. Artifact publish: Push eines konsistenten Schemas in die Registry + Generierung von SDKs/Modellen.
4. Runtime-guard (optional): Das Gateway/der Produzent validiert payload gegen das aktuelle Schema.

Beispiel für PR-Schritte:
  • `openapi-diff --fail-on-breaking`
  • `buf breaking --against
    `
  • `avro-compat --mode BACKWARD`
  • Erzeugung von goldenen Proben und Ausführung von CDC-Tests.

Entwicklung der Systeme: Praktiken

Additive-first: новые поля — `optional/nullable` (JSON), `optional` (proto3), default в Avro.
Umgekehrtes Pyramidenmodell: Der Kern ist stabil, die Anreicherungen sind nebeneinander und optional.
Dual-emit/dual-write für major: parallel veröffentlichen wir 'v1' und 'v2'.
Sunset-Plan: Termine, Nutzung, Warnungen, Adapter.
Tolerant reader: Kunden ignorieren unbekannte Felder und verarbeiten neue enum korrekt.

Beispiele für Diagramme und Prüfungen

JSON-Schema (Fragment, additives Feld)

json
{
"$id": "orders. v1. Order",
"type": "object",
"required": ["id", "status"],
"properties": {
"id": { "type": "string", "format": "uuid" },
"status": { "type": "string", "enum": ["created", "paid", "shipped"] },
"risk_score": { "type": "number", "minimum": 0, "maximum": 1 }
},
"additionalProperties": true
}
💡 Hinzugefügt 'risk _ score' als optional → BACKWARD kompatibel.

Avro (Standard für Kompatibilität)

json
{
"type": "record",
"name": "PaymentAuthorized",
"namespace": "payment. v1",
"fields": [
{ "name": "payment_id", "type": "string" },
{ "name": "amount", "type": "long" },
{ "name": "currency", "type": "string" },
{ "name": "risk_score", "type": ["null", "double"], "default": null }
]
}

Protobuf (Tags nicht überbeanspruchen)

proto syntax = "proto3";
package payments. v1;

message CaptureRequest {
string payment_id = 1;
int64 amount = 2;
string currency = 3;
optional double risk_score = 4; // additive
}
//tag = 4 is reserved for risk_score and cannot be changed/deleted without v2

Ereignisregister und Partitionierung

Benennung der Ereignisse: 'Domäne. action. v{major}` (`payment. captured. v1`).
Der Partitionierungsschlüssel ist Bestandteil des Vertrages ('payment _ id', 'user _ id').
Core vs Enriched: ".v1" (Kernel) und ".enriched. v1'(Einzelheiten).
Kompatibilität im Register: Modi auf Themen-/Typebene; CI lehnt inkompatible Änderungen ab.

Migrationen verwalten

Expand → Migrate → Contract (REST/gRPC):

1. Felder/Tabellen hinzufügen; 2) beginnen, neue Felder zu schreiben/zu lesen; 3) entfernen Sie das alte nach Sonnenuntergang.

  • Dual-emit (Events): parallel zu 'v1 '/' v2', Migration von Consumern/Projektionen, dann Rückzug 'v1'.
  • Replay: Neuzusammenstellen von Projektionen aus dem Protokoll in ein neues Schema (nur mit Kompatibilität und Migratoren).
  • Adapter: Gateway/Proxy, die „v1↔v2“ für komplexe Clients übersetzen.

Sicherheit und Compliance

PII/PCI-Tags im Schema: „x-pii: true“, „x-sensitivity: high“.
Zugriffsrichtlinien: Wer kann Diagramme (RBACs) veröffentlichen/ändern, um Releases zu signieren.
Kryptographie: Signieren von Schemaversionen, unveränderliche Prüfprotokolle (WORM).
Recht auf Vergessenwerden: Geben Sie die Felder an, die Verschlüsselung/Krypto-Löschung erfordern; Führung im Register.

Überwachbarkeit und Audit

Dashboards: Anzahl der Änderungen, Typen (minor/major), Anteil der abgelehnten PRs, Versionsverwendung.
Audit-Trail: Wer hat das Schema geändert, Links zu PR/ADR, Related Release.
Laufzeitmetriken: Prozentsatz der nicht validierten Nachrichten; Kompatibilitätsvorfälle.

Werkzeuge (Beispielstapel)

OpenAPI/JSON Schema: Spectral, OpenAPI Diff, Schemathesis.
Protobuf/gRPC: Buf, buf-breaking, protoc linters.
Avro/Events: Confluent/Redpanda Schema Registry, Avro-tools, Karapace.
GraphQL: GraphQL Inspector, GraphQL Codegen.
Register/Verzeichnisse: Artifact Registry, Git-basierte Registry, Backstage-Katalog, benutzerdefinierte Benutzeroberfläche.
Dokumentation: Redocly/Stoplight, Swagger-UI, GraphiQL.

Anti-Pattern

Swagger-wash: Das Schema spiegelt nicht die Realität des Dienstes wider (oder umgekehrt).
Deaktivierte Kompatibilitätsprüfung: „muss dringend sein“ → die Lücke bricht.
Überverwendung von Protobuf-Tags: Leiser Datenverderb.
Ein einziger Kompatibilitätsmodus „für alles“: Verschiedene Domains erfordern unterschiedliche Modi.
Rohe CDCs als öffentliche Schemata: Leck des OBD-Modells nach außen, Unmöglichkeit der Evolution.

Checkliste für die Implementierung

  • Artefaktformat und Kompatibilitätsmodus nach Domäne definiert.
  • Linters und Schema-Diff in CI sind konfiguriert, PR wird beim Breaking blockiert.
  • Toleranter Reader bei Kunden aktiviert; 'additionalProperties = true' (falls zutreffend).
  • Die großen Änderungen laufen über RFC/ADR, es gibt einen Sunset-Plan und Dual-Emit/Dual-Write.
  • Die Systeme sind mit PII/PCI und Zugriffsebenen gekennzeichnet. Audit ist aktiviert.
  • Dashboards für Versionsverwendung und Kompatibilitätsfehler.
  • Die Generierung von SDKs/Modellen aus dem Register ist Teil der Pipeline.
  • Dokumentation und goldene Proben werden automatisch aktualisiert.

FAQ

Ist es möglich, ohne Registrierung - Diagramme in Git zu speichern?
Ja, aber die Registry fügt Kompatibilitäts-APIs, Suche, Metadaten, zentrale Richtlinien und „On-the-fly“ -Validierung hinzu. Die beste Option ist Git als Speicher + UI/Richtlinien oben.

Wie wähle ich den Kompatibilitätsmodus?
Schauen Sie sich die Richtung des Wandels an: Wenn der Produzent payload erweitert - BACKWARD. Für öffentliche API/SDK - FULL. Für schnelle Prototypen - vorübergehend NONE (nicht auf trunk).

Was tun, wenn ein Bruch notwendig ist?
Wir bereiten v2 vor: Dual-Emit/Dual-Run, Sunset-Dates, Adapter, Nutzungstelemetrie, Migrations-Guids.

Muss ich payload in rantayme validieren?
Für kritische Domains ja: Es verhindert Junk-Nachrichten und beschleunigt die Diagnose.

Summe

Das Scheme-Register verwandelt die Entwicklung von Daten von riskanter Improvisation in einen überschaubaren Prozess: einheitliche Kompatibilitätsregeln, automatische Überprüfungen, verständliche Versionen und eine transparente Historie. Fügen Sie die Disziplin additive-first, tolerant reader, dual-emit und sunset hinzu - und Ihre Verträge werden sich schnell entwickeln, ohne Entzugserscheinungen oder nächtliche Zwischenfälle.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Telegram
@Gamble_GC
Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.