Հետադարձ բուրգի մոդել
Ի՞ նչ է «հետադարձ բուրգի մոդելը» ճարտարապետության մեջ
Հետադարձ բուրգի մոդելը համակարգերի և պարամետրերի նախագծման միջոց է, որտեղ ամենակարևոր և նվազագույն անհրաժեշտ տեղեկատվությունը/ֆունկցիոնալությունը փոխանցվում է առաջին և երաշխավորված, իսկ ավելի քիչ քննադատական մանրամասները ավելացվում են առաջադեմ և օբյեկտիվ։ Տերմինը փոխառում է գաղափարը լրագրությունից (ամենակարևորը 'սկզբում), բայց հարմարեցված է ինժեներական խնդիրներին' կրիտիկական ճանապարհը աշխատում է ցանկացած պայմաններում, մնացած ամեն ինչ «հարստացման շերտեր»։
Ինտուիտիվ նկարը 'վերևի նեղ գագաթը «նվազագույն երաշխիքային պայմանագիր» է (MGC), ներքևում' ընդարձակումը, օպտիմիզացումը և հարուստ գործառույթները, որոնք համակարգը օգտագործում է, եթե կան ռեսուրսներ/համատեղելիություն։
Որտե՞ ղ է այն օգտագործվում
Ցանցային արձանագրություններ և API: REST/gRPC/GraphQL, webhuks, բրոքերներ։
Հոսքային ջրանցքները ՝ WindSocket, SSE, Kafka/NATS, RTC։
Ծառայությունների ճարտարապետությունը 'կրիտիկական ուղի vs. կողմնակի էֆեկտներ (աուդիտ, վերլուծություն, քեշ-տաքացում)։
Altail/վեբ հաճախորդները 'սկզբում UI-ի «կմախքը» և հիմնական տվյալները, ապա ծույլ են լրատվամիջոցների և գործընկերների բեռնումը։
Հիբրիդային և ռիսկային շղթաներ 'հեղինակային իրավունքի/պահեստավորման, առաջնահերթության մեջ։ հակաֆրոդ/վերլուծություն - ասինխրոն, dedlines։
Դիտարկումը 'միշտ լոգ/մետրիկ աշխատանքային մակարդակ; Թրեյս/ավելացում - սեմպլինգով։
Մոդելի սկզբունքները
1. Նվազագույն երաշխիքային պայմանագիր (MGC)
Դաշտերի և վիրահատությունների մի շարք, առանց որի սցենարը իմաստ չունի։ Այն ֆոսֆիլեն է, միասին և անցնում է առաջինը։
2. Առաջադիմական հարստացում
Ավելացված դաշտերը/գործառույթները տեղադրվում են որպես oporaties (capabilities/feature flags/Negotiation)։
3. Քայքայումը առանց մերժման
Բեռնման կամ մասնակի անհասանելիության դեպքում համակարգը արտանետվում է ալյումինե շերտերով 'պահպանելով MGC հզորությունը։
4. Ակնհայտ գերակայություն և SLA
Յուրաքանչյուր շերտի համար 'իր SLO (լատենտ, հասանելիություն), հերթեր և ծառայության դասարաններ (QoS)։
5. Սխեմաների ադիտիվ էվոլյուցիան
Նոր դաշտերը ավելացվում են որպես nullable/optional, չեն կոտրում հաճախորդներին։ կոշտ փոփոխությունները միայն նոր տարբերակի միջոցով են։
6. Դիտարկումը շերտերի վրա
Պիտակներն ու լոգները նշվում են քննադատությամբ '<<, <<, <, "batch!>, որպեսզի տեսնեն, թե ինչպես է համակարգը զոհաբերում բեռի տակ։
Համեմատություն «դասական» բուրգերի հետ
Դասական ճարտարապետությունը (ցածր - հիմքը, գագաթները - UI) շեշտում է կախվածությունը։
Հակառակ բուրգը շեշտում է առաքման կարևորությունը և կարգը 'սկզբում «ստանդարտ», ապա «nice-to-have»։
Մոդելի վրա կոդավորման նախագծումը
1) REST/HTTP
MGC 'նվազագույն ռեսուրս/endpoint և պարտադիր դաշտեր։
Ընդլայնումներ
Բովանդակություն-նեգացիացիա («Accept», «Corfer»),
Պարամետրեր ', include = '/'? fields =' ընտրովի մանրամասների համար,
Հղում «ծանր» ներդրումներին (pre-signed SNS) փոխարենը։
Դեգրադացիա: Թայմաուտում MGC-ին տալ առանց ներդրված հավաքածուների։ 206 Partial Content մեծ հեռուստացույցի համար։
Տարբերակումը 'ադիդիտիվ դաշտերը առանց հին մետաղների փոփոխության; մաժորի տարբերակը միայն կոտրող փոփոխությունների համար է։
2) gRPC
ww.o: նոր «optional» դաշտեր, որոնք ունեն թեգերի անվտանգ համարակալում։ չօգտագործել հեռավոր թեգերը։
Server-side deadlines և per-method QoS (կրիտիկական RPC գերակայությունից բարձր)։
Streaming: առաջին հաղորդագրությունները վերնագրեր/արդյունքներ են, ապա մանրամասները չաններով։
3) Իրադարձական անվադողերը (Kafka/NATS)
Իրադարձություն '«event _ type», «id», «occurred _ at», նվազագույն բիզնես դաշտեր։
Հարստացում 'վերցնենք box/CDC և առանձին թեմաներ' -enriched "։
Առաջին հերթին, մանրամասները, սպառողները կարող են ավարտել բիզնես գործընթացը միջուկի վրա, իսկ մանրամասները ասինխրոն են։
Patterns, որոնք լավ համակցված են հետադարձ բուրգի հետ
Critical Path First: Առանձնացրեք սինխրոն «պարտադիր» ասինխրոն կողմնակի ազդեցություններից։
Write-ahead/Disbox: Մենք արձանագրում ենք իրադարձության փաստը, մնացած 'ֆոնային առաքումը։
Lazy & Incremental Fetch: պագինացիա, կուրսորներ, «If-Modified-Since »/ETag։
Capabilities Discovery: սերվերը/հաճախորդը հստակ ասում են, թե ինչ ընդլայնումներ են աջակցում։
Backpressure & Budgets: dedlines, CPU/IO լիմիտներ շերտի վրա։ բեռի տակ գտնվող երկրորդական խնդիրների վերացումը։
SLO-Scoped Caching: Մենք ավելի ագրեսիվ ենք, հարստացումն ավելի կարճ է/բարակ։
Իրականացման ալգորիթմ
1. Գրեք User Journey-ը և հատկացրեք «արժեքի պահը»։
2. MGC-ի իրականացումը 'նվազագույն դաշտեր/վիրահատություններ արժեքին հասնելու համար։
3. Բաժանեք շերտերին '«www.ru», «extended», «anational t.ru/batch»։
4. տվեք SLO/SLA և QoS-ը յուրաքանչյուր շերտի համար։
5. Նախագծեք դեգրադացիա 'ի՞ նչ ենք նետում մերժումների N% -ով/p95 աճով։
6. Սխեմաների էվոլյուցիան 'տարբերակների քաղաքականությունը, diitive-first։
7. Դիտարկումը 'շերտերի թեստեր մետրերում/logs/treiss, alerts-ում։
8. Թեստավորում 'քաոս-ինժեներինգ և fox-inject շերտերով։
9. Գործարկումը և հակադարձ կապը 'միացնելով ֆիչեֆլագների ընդարձակումը և փակցնում կանարեյքի վրա։
Մետրիկները և SLO շերտերը
Տե՛ ս ՝ p95/p99 լատենտ, հաջողակ կրիտիկական վիրահատությունների մասը, դեգրադացիայի ժամանակ ձախողումը։
Extended 'հարստացված պատասխանների տոկոսը, միջին ժամանակը։
Batch/Analyt.ru: Լագը իրական ժամանակից, պատուհանի համար մշակված իրադարձությունների մասը։
Բիզնես-մետրիկները 'փոխարկումը մինչև «արժեքի պահը», երբ փոխակերպվում է vs. նորմալ։
Antipatterns
«Ամեն ինչ ռուսական է», ընդլայնումը դառնում է պարտադիր, դեգրադացիան դառնում է անհնար։
MGC-ի կոտրող փոփոխությունները առանց նոր մաժորային տարբերակի։
Թաքնված փխրունություն 'կրիտիկական ճանապարհը հիմնված է արտաքին «երկրորդական» կախվածության վրա (օրինակ, հակաֆրոդի սինխրոն զանգը)։
Անսովոր ընդարձակումներ, հաճախորդները չգիտեն, որ կարելի է միացնել/անջատել։
Observability: «Լռության» համակարգը քայքայվում է, իսկ դուք չեք տեսնում, թե որտեղ։
Օրինակներ
A. Օգտագործողի պրոֆիլը (REST)
Ընդլայնումներ ՝ "badges []", "social _ links []", "recent _ activity [" ըստ "։
MGC: `id`, `display_name`, `avatar_url`, `tier`.
Դեգրադացիա. Թայմաուտում MGC-ին տալ և աքսորել ազգային ռեսուրսներին (HATEOAS/MSs)։
Բ.Արբիտրաժային հեղինակային իրավունքը
MGC 'հեղինակային իրավունքի արդյունքը (approved/declined), "transaction _ id'," amount "," currency "։
Ընդարձակումներ ՝ 3DS հեռաչափություն, ռիսկի-սկոր, գեո, ավստրիական ուրվագիծ, ասինխրոն իրադարձությամբ։ authorized`.
Դեգրադացիա 'ձախողումների դեպքում վերլուծաբանները գնում են, իսկ աուդիտը/սկորինգը բռնում է։
Վ. Ջրհեղեղի գնանշումներ
MGC: Վերջին «նկարը» գինը։
Ընդարձակումը 'մի բաժակի խորությունը, որը համախմբված է անջատիչներով, կեղտոտումից հետո սթրիմն է։
Քայքայումը 'բեռի տակ նվազում է ավելացման հաճախությունը, բայց կեղևը կայուն է։
Տարբերակումը և էվոլյուցիան
Meditive-first: նոր դաշտերը «optional/nullable», ծերերը մնում են։
Semantic Versions: 'v1' միջուկի համար; 'v1։ x 'ընդլայնումներ; «v2», երբ MGC-ն փոխվում է։
Կոդի պայմանագրերը ՝ JSON Schema/Medobuf + CI-validation «չփչացող» ածխաջրածիններ։
Անվտանգություն և համապատասխանություն
MGC-ն ստորագրվել է/վավերացված. Դաշտերի նվազագույն հավաքածուն ունի կրիպտոգրաֆիկ ամբողջականություն։
Leance Privilege: Հարստության հասանելիությունը առանձին կատակներով։
PII/findance 'դուրս բերել ընդարձակման, բաժանման և TTL-ի։
Դիտարկումը և կարգաբերումը
Պրեֆեկտները մետտրիկ են '<108։ request. duration`, `enh. attach. load_time`, `batch. lag`.
Sampling: 100 տոկոսը սխալների համար։ ընդլայնում։
Feature flags telemetry-ը ցույց է տալիս, թե ինչ ընդարձակումներ են ներառված հաճախորդներից։
Ներդրման թուղթ (կարճ)
- Մոսկվան և MGC-ը։
- Ընդլայնումները հայտարարված են capabilities/flags միջոցով։
- SLO/QoS/տողերը շերտերով։
- Դեգրադացիան ստուգված է քաոս թեստերով։
- Սխեմաների էվոլյուցիան միայն ադիտիվ է առանց «կոտրվածքների»։
- Metriki/treiss/logs բաժանված են շերտերով։
- Հաճախորդների համար հաճախորդների համար ավելացման մասին։
FAQ
Արդյո՞ ք հակառակ բուրգը փոխարինում է շերտավոր ճարտարապետությանը։
Ոչ։ Սա օրգոնալ սկզբունք է, թե ինչպես կարելի է հասցնել և գերակայել ֆունկցիոնալությունը սովորական շերտերի վերևում։
Ե՞ րբ չօգտագործել։
Օֆլինի փաթեթներում, որտեղ մասնակի առաքումը անիմաստ է (կրիպտոպրոտոկոլներ ատոմայնությամբ), կամ երբ բոլոր դաշտերը հավասարապես կրիտիկական են։
Ինչպե՞ ս է տարբերվում «graceful degradation» -ից։
Հակառակ բուրգը սկզբում նախագծում է նվազագույն բավարար պայմանագիր և նրա գերակայությունները, ոչ թե փորձում է փրկել արդեն ծանրաբեռնված համակարգը «փաստից հետո»։
Արդյունքը
Հետադարձ բուրգի մոդելը օգնում է ճարտարապետությանը և արձանագրություններին օգտակար մնալ ցանկացած բեռի տակ 'ամենակարևորը' նախ և առաջ։ մնացածը հնարավորության դեպքում է։ Սա մեծացնում է կրիտիկական ուղու հասանելիությունը, արագացնում է ֆիչի եզրակացությունը և հեշտացնում էվոլյուցիան առանց կոտրվածքների։