GH GambleHub

Սխեմաների իրականացումը և տվյալների էվոլյուցիան

Ինչու՞ պետք է համապատասխան սխեմաներ

Սխեմաների իրականացումը ճշմարտության կենտրոնացված աղբյուրն է տվյալների տեղադրման համար (API, իրադարձություններ, հոսքեր, հաղորդագրություններ, հաղորդագրություններ), որն ապահովում է

Կանխատեսելի էվոլյուցիա 'կոդավորման կանոնները և «կոտրվածքների» ավտոմատ ստուգումը։

Կրկնությունը և թափանցիկությունը 'տարբերակների պատմությունը, ով/երբ/ինչու է փոխվել։

Ստանդարտիզացիա 'միասնական անուններ, սխալներ, ուղեղի դաշտեր, PII-2019։

Ինտեգրումը CI/CD-ի հետ 'breaking-փոփոխությունների արգելափակում մինչև երկարացումը։

Մոսկվան կապում է Delocol-first-ը և պայմանագրային համատեղելիությունը, փոփոխելով արագ և անվտանգ։


Պիտերբուրգը և օգտագործման ոլորտները

JSON Schema: REST/HTTP օգտակար բեռներ, փաստաթղթեր, կազմաձևեր։

Avro: Իրադարձական անվադողեր (Kafka/Pulsar), compact/էվոլյուցիա ID դաշտերի միջոցով։

Eurobuf: gRPC/RPC, երկուական արդյունավետ, խիստ թեգեր։

GraphQL SYL-ը տեսակների և պարամետրերի սխեմա է, էվոլյուցիան '@ deprecated "միջոցով։

SQL DDL-ն որպես արտեֆակտ է, մենք արձանագրում ենք պայմանագրային ներկայացումներ (օրինակ արտաքին վիտրինները) 'զգուշությամբ։

💡 Մեկ կոմպոզիցիա կարող է միանգամից մի քանի տեսակի արտեֆակտներ պահել, բայց առանձին քաղաքական գործիչների հետ միասին։

Միգրանտների ռեժիմները

BACKWARD: նոր սխեմաները կարդում են հին տվյալները/հաղորդագրությունները։ Հարմար է արտադրողի համար, որը ընդլայնում է payload addiment։

FORWARD: Հին սպառողները ճիշտ կարդում են նոր տվյալները (պահանջում է toler.ru reader)։

FOX 'համատեղում է երկուսն էլ (ավելի խիստ, ավելի հարմար է հանրային տարածքների համար)։

NONE 'առանց ստուգման' միայն ավազի համար։

Առաջարկություններ

Events: ավելի հաճախ BACKWARD (արտադրողը ընդլայնում է payload oporation)։

Հանրային API: FOX կամ BACKWARD + հաճախորդների վրա խիստ toler.ru rader։

Ներքին նախատիպերը 'ժամանակավորապես NONE, բայց ոչ trunk։


Ապահով (ադիդիտիվ) vs. վտանգավոր փոփոխություններ

Ադիտիվ (OK)

Միգրացիոն դաշտի ավելացումը/տեսակի։

Enum-ի ընդլայնումը նոր արժեքներով (toler.reader-ով)։

Այլընտրանքային պրոյեկցիայի/իրադարձությունների ավելացումը («.enriched»)։

Սահմանափակումների թուլացումը («minLength», «maximum»), բայց ոչ ռուսական)։

Վտանգավոր (կոտրում)

Դաշտերի հեռացումը/վերանվանելը կամ դրանց տեսակի/պարտավորության փոփոխությունը։

Ստատուսի/սուլֆերի/կարգի սեմանտիկայի փոփոխությունը հոսքերում։

Probuf-tegs-ի վերարտադրումը։

Կուսակցության ստեղնաշարի փոփոխությունը իրադարձությունների մեջ։


Մրցույթի կազմակերպություն

Նեյմինգը և հասցեները

Խմբեր/տարածություններ ՝ «payments», «kyc», «audit»։

Անուններ ՝ "pay.ru. authorized. v1` (events), `payments. v1. CaptureRequest` (gRPC), `orders. v1. Order` (JSON Schema).

Մաժորը անունով, մինորները 'մետատվյալներում/սխեմայի տարբերակում։

Մետատվյալներ

«owner» (թիմ), «domain», «slas» (SLO/SLA), «07»։ tier` (PII/PCI), `retention`, `compatibility_mode`, `sunset`, `changelog`.

Կառավարել կյանքի ցիկլը

Draft → Review → Approved → Released → Deprecated → Sunset.

Ավտոմատ վալիդատորներ/ոսպնյակներ, ձեռքով design-review (API Guild), rele.notes։


Ինտեգրումը CI/CD

1. Pre-commit: տեղական ոսպնյակները (Spectral/Buf/Avro toope)։

2. PR-intpline: schema-diff ստանդարտ compatibility mode ստուգում; արգելափակում ենք breaking-ը։

3. Artifact publish: Ստանդարտ համակարգված սխեմայի բանաձևում + DPK/մոդելների արտադրությունը։

4. Runtime-guard (oporational) 'դարպասը/արտադրողը առաջնորդում է payload դեմ իրական սխեմայի դեմ։

PR քայլերի օրինակ

`openapi-diff --fail-on-breaking`

`buf breaking --against

`

`avro-compat --mode BACKWARD`

golden samples և progon CDC թեստեր։


Սխեմաների էվոլյուցիա 'պրակտիկա

Հետադարձ բուրգի մոդելը 'կորիզը կայուն է, հարստացումը' մոտավոր և օբյեկտիվ։

Additive-first: новые поля — `optional/nullable` (JSON), `optional` (proto3), default в Avro.

Dance-emit/dult-write major-ի համար 'զուգահեռ հրապարակում ենք «v1» և «v2»։

Sunset-պլանը 'ամսաթվերը, օգտագործումը, նախազգուշացումները, ադապտերները։

Tolerae reader: հաճախորդները անտեսում են անհայտ դաշտերը և ճիշտ մշակում նոր enum։


Սխեմաների և ստուգումների օրինակներ

JSON Schema (հատված, ադիտիվ դաշտ)

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
}
💡 ավելացված է «risk _ score» որպես BACKWARD-ի կոորդինատիվ ստանդարտ համատեղելի է։

Avro (Avro)

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 }
]
}

Eurobuf (մի օգտագործեք թեգերը)

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 зарезервирован под risk_score, его нельзя менять/удалять без v2

Իրադարձությունների գրանցումը և կուսակցությունը

Կուսակցության բանալին պայմանագրի մի մասն է («payme _ id», «user _ id»)։

Իրադարձությունների անվանումը '"domain. action. v{major}` (`payment. captured. v1`).

Disvs Enriched: ".v1" (միջուկը) և ".enrichede. v1 '(մանրամասները)։

Համատեղելիությունը խմբագրության մեջ 'ռեժիմներ թեմայի/տեսակի մակարդակում։ CI-ն հրաժարվում է անհամատեղելի փոփոխություններից։


Միգրացիաների կառավարում

Expand → Migrate → Contract (REST/gRPC):

1. ավելացնել դաշտերը/աղյուսակները; 2) սկսել գրել/կարդալ նոր դաշտեր. 3) հեռացնել հինը sunset-ից հետո։

  • Dance-emit (Events): զուգահեռ «v1 »/« v2», վահանակների/պրոյեկտների խմբակցություն, ապա «v1»։
  • Replay 'հատակից պրոյեկցիաների փոխպատվաստումը նոր սխեմայի վրա (միայն դեղորայքների և ֆոսֆորների դեպքում)։
  • Ադապտերներ 'խաղացողներ/105, որոնք թարգմանում են «v1 71 v2» բարդ հաճախորդների համար։

Անվտանգություն և ընկերակցություն

PII/PCI-ն տեղադրված է սխեմայում '«x-pii: 108», «x-sensitivity: high»։

Հասանելիության քաղաքականություն. Ով կարող է հրապարակել/փոխել սխեմաները (RBAC), ստորագրել օրինագծերը։

Կրիպտոգրաֆիա 'սխեմաների տարբերակների ստորագրություն, անփոփոխ տերմինալի ամսագրեր (WORM)։

Մոռանալու իրավունք 'նշեք այն դաշտերը, որոնք պահանջում են բանաձև/ծպտյալ լվացում։ guidae-ում։


Դիտարկումը և աուդիտը

Դաշբորդները 'փոփոխությունների քանակը, տեսակները (minor/major), PR-ի շեղված մասը, տարբերակների օգտագործումը։

Աուդիտ-թրեյլ 'ով փոխեց սխեման, հղում PR/ADR-ին, որը կապված է թողարկման հետ։

Runtime-metriks: հաղորդագրությունների տոկոսը, ովքեր չեն անցել վալիդացիան։ պատահականներն են։


Գործիքներ (մոտավոր թուղթ)

Artifact Registry, Git-based registry, Backstage Catalog, custics UI։

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.

Մոսկվա: Redocly/Stoplight, Swagger-UI, GraphiQL։


Antipatterns

Swagger-wash: սխեման չի արտացոլում միգրանցների իրականությունը (կամ հակառակը)։

Անջատված ստուգումը կատարվում է. «Մենք պետք է անհապաղ»։

Winobuf-tegs-ի օգտագործումը 'տվյալների հանգիստ պատկեր։

«Ամեն ինչի համար» ինտեգրման միասնական ռեժիմը, տարբեր օրինագծեր պահանջում են տարբեր ռեժիմներ։

Հում CDC-ն որպես հանրային սխեմաներ 'BD-մոդելի արտահոսքը արտաքին, էվոլյուցիայի անհնարինությունը։


Ներդրման չեկի ցուցակ

  • Artefacts-ի և compatibility mode-ի ձևաչափը։
  • Ոսպնյակները և շեմա-դիֆը CI-ում, PR-ն արգելափակվում է breaking-ում։
  • Միացված է toler.reader հաճախորդների մոտ; «wwww.itionalProperties = 108» (որտեղ տեղին է)։
  • Մաժորային փոփոխությունները տեղի են ունենում RFC/ADR-ի միջոցով, կան sunset պլան և dult-emit/dig-write։
  • Սխեմաները նշված են PII/PCI և հասանելիության մակարդակներում։ ներառում է աուդիտ։
  • Dashbords օգտագործելու տարբերակները և ծածկագրերը։
  • MSK/մոդելների գեներացիան կոմպոզիցիաներից մի մասն է։
  • Մոսկվան և golden samples ինքնաբերաբար նորարարված են։

FAQ

Հնարավո՞ ր է պահել Գիտի սխեմաները։

Այո, բայց ավելացնում է API-ը, որոնումը, մետատվությունը, կենտրոնացված քաղաքականությունը և «on-the-fly» վալիդացիան։ Լավագույն տարբերակը Git-ն է որպես storage + UI/քաղաքականություն վերևում։

Ինչպե՞ ս ընտրել միգրացիայի ռեժիմը։

Նայեք փոփոխության ուղղությանը, եթե արտադրողը ընդլայնում է payload-BACKWARD-ը։ Հանրային API/MSK-FLS-ի համար։ Արագ նախատիպերի համար ժամանակավորապես NONE (ոչ trunk)։

Ի՞ նչ պետք է անենք կոտրելու անհրաժեշտության դեպքում։

Մենք պատրաստում ենք v2: drum-emit/dult-run, sunset-ամսաթվերը, հարմարվողները, օգտագործման հեռուստաչափը, միգրացիոն մրցույթները։

Արդյո՞ ք պետք է առաջնորդենք payload-ը rantaime-ում։

Քննադատական օրինագծերի համար, այո, դա կանխում է «աղբի» հաղորդագրությունները և արագացնում ախտորոշումը։


Արդյունքը

Սխեմաների իրականացումը վերափոխում է տվյալների էվոլյուցիան ռիսկային իմպրովիզացիայից դեպի կառավարվող գործընթաց 'մեկ ստանդարտ կանոններ, ավտոմատ ստուգումներ, հասկանալի տարբերակներ և թափանցիկ պատմություն։ Ավելացրեք նրա համար coritive-first, toler.reader, dult-emit և sunset կարգապահությունը, և ձեր պայմանագրերը արագ կզարգանան, առանց կոտրվածքների և գիշերային պայմանագրերի։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։