Սխեմաների իրականացումը և տվյալների էվոլյուցիան
Ինչու՞ պետք է համապատասխան սխեմաներ
Սխեմաների իրականացումը ճշմարտության կենտրոնացված աղբյուրն է տվյալների տեղադրման համար (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
}
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 կարգապահությունը, և ձեր պայմանագրերը արագ կզարգանան, առանց կոտրվածքների և գիշերային պայմանագրերի։