Bounded Disext և տիրույթի սահմանները
Bounded Disext-ը (BC) հստակ սահմանն է, որի ներսում գործում է միասնական Ubiquitous Language, ռուսական մոդելներ և invariants։ Սահմանների ներսում տերմինները միանշանակ են («Շտաբը», «Հաճախորդը», «Լիմիթ»), իսկ ենթատեքստը հաղորդակցվում է պայմանագրերով (իրադարձություններով/թիմերով) և չի քաշում ուրիշի իմաստալից «պոչերը»։ Ճիշտ ընտրված սահմանները նվազեցնում են կապը, պարզեցնում են մեծացումը և արագացնում ապրանքի էվոլյուցիան։
1) Ինչո՞ ւ սահմաններ են անհրաժեշտ
Կոգնիտիվ բեռի նվազումը։ Թիմը աշխատում է մեկ մոդելի և մեկ լեզվի հետ, ոչ թե «բոլոր բիզնեսի հետ անմիջապես»։
Ինվարանտների մեկուսացումը։ Կրիտիկական կանոնները (հավասարակշռություն 240, լոգինի յուրահատուկ) ապրում են նույն վայրում և պաշտպանված են ագրեգատներով։
Փոփոխությունների կառավարումը։ BC-ի ներսում սխեմայի/կանոնների էվոլյուցիան չի կոտրում հարևանը, հստակ պայմանագրեր կան։
Արտադրողականությունը և արտադրողականությունը։ BC-ի ներսում դուք կարող եք ընտրել համապատասխան մոդելը ստանդարտ և պահեստ։ դրսում ասինխրոն պրոյեկտներ են։
2) Ինչպե՞ ս բացահայտել Bounded Prodext-ը
Արագ մեթոդը (workshop 2-4 ժամ)
1. Event Storming: գրեք «ինչ է պատահել», ապա «ինչ ենք խնդրում անել», ապա ագրեգատները «ովքեր երաշխավորում են կանոնը»։
2. Լեզվի կլաստերները 'որտեղ բառերը և կանոնները կայուն համընկնում են, պոտենցիալ BC-ն։ Որտեղ «Հաճախորդ» բառը նշանակում է տարբեր (vs խաղացողի վճարողը), այնտեղ հստակ տարբեր համատեքստեր կան։
3. Invariants և ownership: Ի՞ նչ չի կարելի խախտել և ո՞ վ է պատասխանում։ Invariant-ը տեղադրված է այն BC-ի ներսում, որը կարող է երաշխավորել այն։
4. Արժեքի հոսքը 'խմբավորել քայլերը, որոնք հաճախ փոխվում են միասին, մեկ BC թեկնածուներ են։
5. Նախկին կառուցվածքը 'եթե մի մասը առանձին թիմ է անում առանձին KPI-ով, հավանաբար սա առանձին BC (բայց ոչ հակառակը, օրգանական կառուցվածքը չպետք է կույր թելադրի մոդելը)։
Սահմանի ազդանշանները
Տերմինների մասին բանավեճը («դրույքաչափը», «տոմս», «շրջանակը» տարբեր իմաստներ են)։
Ամենաթեժ ինվարանտը «հոսում է» ծառայությունների միջոցով։
Տարբեր SLO-ն և փոփոխությունների տեմպը։
«Dance-write» -ը ատոմային մոդուլների միջև։
3) Տիպիկ ենթատեքստեր (առարկայական ոլորտի օրինակ)
Identity/KYC-ը ստանդարտ է, ստուգման մակարդակները, սահմանափակումների արձանները։
Wallet/Ledger-ը հավասարակշռություններ, կայունություններ, պահուստներ, արժույթներ է։
Betting/Orders - ընդունելություն, գնանշումներ, հաշվարկներ։
Game/Round-ը մրցույթի կյանքի ցիկլ է, արդյունքները։
Bonus/Promo - հաշվարկներ, վեյջեր, հակադարձում։
Payments - դեպոզիտներ/եզրակացություններ, արբիտրաժային դռների արձաններ։
Compliance/Reporting - հաշվետվություններ, աուդիտ, կարգավորող վիտրիններ։
Catalog/Provider Integration - խաղեր, տարբերակներ, պրովայդերների արձաններ։
Anront.ru/Read Models - պրոյեկտներ և նյութականացված ներկայացումներ։
4) Intext Map: Ինչպես BC-ն փոխազդում են
Համատեքստի քարտեզը նկարագրում է հարաբերությունների տեսակը
Customer–Supplier. Մեկ BC (Supplier) տալիս է իրադարձություններ/տվյալներ, մյուսը (Customer) հարմարեցնում է իր մոդելները։
Conformist. Customer-ը ընդունում է լեզուն և մոդելը Supplier-ը, ինչպես կա (օրինակ, ստանդարտ ստանդարտը)։
Partnership. Երկու BC-ն սինխրոնորեն զարգացնում է լեզուն և պայմանագրերը (հաճախ մեկ թիմ/roadmap)։
Shared Kernel. Ընդհանուր նվազագույն բարձրացում/գրադարան, տարբերակվում է միասին։ օգտագործել զգույշ։
Anti-Corruption Layer (ACL). Պաշտպանիչ շերտը, որը ուրիշի մոդելները թարգմանում է իր լեզուն։
Open Host Service / Published Language. Հանրային արձանագրություններ/սխեմաներ, տարբերակված և փաստաթղթավորված։
Պրակտիկա 'լռելյայն օգտագործեք ACL-ը և ասինխրոն իրադարձությունները։ Noormist-ը միայն այն դեպքում, եթե պրովայդերը թելադրում է արտադրանքը, Shared Kernel-ը նվազագույն և գիտակցված է։
5) Սահմանը = լեզուն + մոդել + ինվարանտներ + պահեստ
BC-ի ներսում նշվում է
Ubiquitous Language. Տերմինների բառարանը օրինակով։
Ագրեգատները և ինվարանտները։ Ո՞ վ է «պահում» կանոնները և ինչ վիրահատություններ թույլատրված։
Կոդավորման մոդելը։ Strong/CP փողի համար, EC/causal վիտրինի համար։
Պահեստ և ինդեքսներ։ Ընտրվում են ինվարանտների և SLO-ի տակ։
Ելքի պայմանագրերը։ Իրադարձությունները/թիմերը, սխեմաների տարբերակները, SLO առաքումը։
Դրսում, ոչ մի ուղղակի SQL/պլաստիկ կախվածություն։ Հաղորդակցումը պայմանագրի միջոցով է։
6) Սահմանները և համաձայնությունը (PACELC)
BC-ի ներսում ընտրեք մոդելը ինվարանտների տակ (Wallet-Strong, Betting-Strong)։
BC-ի միջև, առավել հաճախ eventium-ը իրադարձությունների և կանխատեսումների միջոցով։ Եթե անհրաժեշտ է սինխրոն ստուգում, ակնհայտ թիմը և ձախողումը անհասանելիության դեպքում (ոչ թե «թաքնված» REST-zov)։
7) Հակակոռուպցիոն շերտը (ACL)
ACL-ի առաջադրանքը 'չթողնել օտար լեզուն և «կեղտոտ» տվյալները BC-ի ներսում։
Mapping-ը ՝ արտաքին "Payte Status = SETTLED" -ը ներքին "LedgerEntry" (type = Credit, reason = PSSettle) "։
Վալիդացիան և հարստացումը 'ինվարանտների ստուգումը, թայմզոնի նորմալացումը, արժույթը։
Տարբերակումը '«schema _ version» արտաքին պայմանագրի աջակցությունը, հակառակը։
Idempotention: «external _ id »/« operation _ id»։
Դիտարկումը '«source», «schema _ version», «mapping _ id», DLQ «թունավոր» հաղորդագրությունների համար։
8) Սահմաններն ու տվյալները 'սեփականություն, պրոյեկցիաներ, API, API
Ownership: Ո՞ վ է պատկանում «ճշմարտությունը»։ Միայն սեփականատերը փոխում է ձայնագրությունը։ Մնացած BC-ը read մոդելն է և հղումները։
Պրոյեկտներ 'կարդալու համար դենորմալիզացված սեղաններ; նորարարվում են իրադարձություններից։
API 'թիմերը (դիմում են սեփականատիրոջը) և հարցումները (կարդում են պրոյեկտները)։ Ոչ մի «օտար տվյալների» միջով։
9) Էվոլյուցիան և տարբերակները
Իրադարձությունները և API-ը '«schema _ version» և ինտեգրման քաղաքականությունը (diitive + fallback)։
Blue/Green BC-ով. Նոր պայմանագիրը 'v2 "հրապարակվում է զուգահեռ" v1 ", ռուսական թարգմանվում է աստիճանաբար։
Տե՛ ս ՝ լուրջ փոփոխությունների համար 'նոր պրոյեկցիա/ծառայություն, «երկչափ սվիտչ» ընթերցանության համար։
10) Սահմանների փորձարկումը
Euract tes.ru: Ստուգումը, որ BC-ն հետևում է հրատարակված պայմանագիրը (www.er tes.ru) և ճիշտ հասկանում է օտար (consumer tes.ru)։
Property-based: BC-ի ներսում ագրեգատների ինվարանտներ (հավասարակշռություն, սահմաններ, յուրահատուկ)։
Chaos ինտեգրման վրա 'ուշացում, out-of-order, կրկնօրինակներ, schema-evolution; DLQ-ի և անվտանգ ռեդրեյվայի առկայությունը։
NFR թեստերը ՝ r95/PIX-ը սահմանին (իրադարձությունների սերվեր/ACL)։
11) Դիտարկումը և SLO սահմանները
Metriks: throughput իրադարձություններ/թիմեր, «project _ lag _ 24»,« dlq _ rate », mapping սխալներ, p95 API։
Թրեյսինգը 'պարտադիր թեգեր' bc ', «tenium _ id», «event _ id», «operation _ id», «schema _ version»։
Ալբերտները 'պրոյեկտների ճամբարի ավելցուկը, թիմերի ձախողումների աճը, սխեմայի «ֆայլ» (շատ «շեմա _ mismatch»)։
12) Multi-tenant և տարածաշրջանները
«tenrone _ id» - բոլոր իրադարձությունների և կանխատեսումների բաներում սահմանին։
Fairness: Հրապարակման/per ten.ru-ի սահմանները, որպեսզի «աղմուկը» չփչացնի SLO հարևաններին։
Residency: BC տվյալները ապրում են «տնային» տարածաշրջանում։ Քրոս-ստալինոն - ագրեգատներ/հաշվետվություններ։
13) Anti-patterns (որին հանգեցնում է հանքային սահմանը)
Հսկա «71-71»։ Ամեն ինչ մեկ վայրում կատարվում է գործարքների համար պայքարը, երկար կիսագնդերը, ցածր ինքնավարությունը։
Պլաստիկ կոմպոզիցիաներ։ Ուղիղ XXIII-ը օտար սեղաններում ցույց է տալիս փխրունություն և coupling սխեմա։
Dual-write. Միևնույն ժամանակ գրել երկու BC-ում «հարմարավետության համար» ռուսական տարբերությունները և ինվարանտների սաբոտաժը։
Diormist լռելյայն։ «Ընդունեցինք օտար մոդել, ինչպես կա» օտար իմաստների արտահոսքը, էվոլյուցիայի անհնարինությունը։
Թաքնված սինխրոն զանգեր։ REST-zov «ինչ-որ տեղ ներսում» առանց ակնհայտ պայմանագրի և Dedline-ը անսպասելի կախվածություն է։
14) Կոնտուրների օրինակը (բանավոր սխեմա)
[Wallet/Ledger] <--CP, Leader, Transactions-->
publishes: WalletReserved/Committed v
[Betting] <--CP on bid taking-->
events: BetPlaced/Settled v
[Read Models/Analytics] <--EC projection-->
[Payments] --ACL--> [Wallet/Ledger]
[Provider Integration] --ACL--> [Game/Round]
[Compliance] <-events - [KYC/Identity], -> reports [Reporting]
15) Մինի-դելդ սահմանների ընտրության համար
1. Կազմեք ինվարանտներ և չափանիշներ, որոնք կարող են երաշխավորել նրանց։
2. Գրեք բառարանը (10-20 տերմինալներ) և նշելով, որ թիմը մեկ հասկացողություն ունի։
3. Narisuext Map-ը և հարաբերությունների տեսակները։
4. Որոշեք մոդելը ներսում և հանգույցներում։
5. Նախագծեք պայմանագրերը (իրադարձություններ/թիմեր) և ACL-ը։
6. Տեղադրեք դիտարկումը (չափումներ/թրեյսինգ/ալտերտեր) և DLQ/redraiv։
7. Իրականացրեք www.ract-tes.ru և «փոթորիկ» (chaos) ինտեգրման համար։
8. Ամրագրեք governae: Ով խոսում է լեզուն/սխեման, ինչպես են փոփոխվում։
16) Չեկ թուղթ մինչև վաճառելը
- Յուրաքանչյուր BC-ն ունի բառարան, ագրեգատներ և ինվարանտներ։
- Որոշվում են հարաբերությունները Dirext Map-ի և փաստաթղթավորված պայմանագրերի վրա։
- Մոսկվան իրադարձությունների/թիմի և ACL-ի միջոցով չկա ուղղակի SQL կախվածություն։
- Թիմերի/իրադարձությունների համադրելիությունը. կա box/inbox և DLQ։
- Կոդավորման մոդելը (ներսում/BC-ի միջև) գրված է և փորձարկվել։
- Սխեմաների տարբերակումը և ինտեգրման ռազմավարությունը (v1/v2)։
- Լագայի/սխալների/արտադրողականության և ալտերտայի մետրերը տրամադրված են։
- Մուլտֆիլմի-տենանտիզմի և տեղեկատվական-ռեզիդենցիայի քաղաքականությունները պահպանված են։
- Վիրահատական պլեյբուսներ 'schema-mismatch, redrive, rebuild պրոյեկտներ։
17) Արագ բաղադրատոմսեր
Փողը և լիմիտները 'առանձին BC-ը CP-ի և գործարքների հետ, API-ը միայն թիմերով, իրադարձությունները որպես ընթերցանության ճշմարտության արդյունք։
Ֆիդա/108 և ՝ BC EC, պրոյեկտներ և քեշներ, ակնհայտ «freshness»։
Ֆորումը արտաքին պրովայդերների հետ 'միշտ ACL-ի, իրադարձությունների/թիմի, սխեմաների տարբերակման միջոցով։
Թիմի աճը 'մեկ BC, թիմը ունի «լեզվի սեփականատեր» և «ինվարանտների պահապան»։
Մոնոլիտի ռեֆակտորինգը 'սկզբում պայմանագրերը և ACL-ը, հետո ֆիզիկական բաժանումը։
Եզրակացություն
Bounded Disext-ը ոչ միայն դիագրամ է, այլ լեզվի, կանոնների և էվոլյուցիայի մեթոդների աշխատանքային պայմանագիրը։ Հստակ սահմանները նվազեցնում են կապը, արագացնում են փոփոխությունները և ստեղծում են կանխատեսելի համակարգ շահագործման մեջ։ Բաժանեք իմաստը և ինվարանտները, պաշտպանեք ACL-ի սահմանները պայմանագրերով, չափեք բոլոր չափումները, և ձեր ճարտարապետությունը կմնա ճկուն և հուսալի, նույնիսկ երբ արագորեն աճում է տիրույթն ու թիմը։