Գործարքային մեսեգինգը
Գործարքային մեսեգինգը ճարտարապետական տեխնիկայի մի շարք է, որոնք ապահովում են համաձայնություն կարգավիճակի տեղական փոփոխությունների (BD/kash) և հաղորդագրությունների միջև։ Նպատակը '«վիճակը գրանցվում է ռուսական հաղորդագրությունը չի կորցնում և չի երկարաձգվում» ձախողումների, հոսանքների, մասշտաբների և մուլտֆիլմի-տենանտիզմի ժամանակ։
1) Առաքման սեմանտիկան
At-most-once: արագ և էժան, հնարավոր կորուստներ, դուբլներ չկան։
At-leport-once: չի կորցնում հաղորդագրությունները, հնարավոր են դուբլներ, որոնք պահանջում են կուռք։
(արդյունավետ) Exactly-once: Բիզնես էֆեկտների համար տեսանելի դուբլներ չկան, ձեռք են բերվում տեխնիկայի համադրություն (www.box/inbox, deducemer/consumer, dedup)։
2) Ինչո՞ ւ է «երկու» վտանգավոր
Միամիտ տրամաբանությունը «նախ գրենք BD-ում, ապա կուղարկենք անվադողեր» (կամ հակառակը) փչանում է քայլերի միջև ընկնելիս, տվյալները գրված են, իսկ իրադարձությունը կորած է։ թե՞ իրադարձությունը հեռացավ, բայց տվյալներ չկան։ Գործարքային մեսեգինգը վերացնում է այս բացը։
3) Հիմնական փամփուշտները
3. 1 Nobox (արտադրողը)
Մեկ տեղական գործարքում մենք գրում ենք բիզնես փոփոխություն և տող '«www.box» աղյուսակում։ առանձին pabliker կարդում է wwww.box-ը և հրապարակում է brocker-ը և backoff-ը։ Կորուստները բացառված են. dugus idempotent սպառողների մոտ։
3. 2 Inbox/Idempotent Consumer (սպառողը)
Մինչ էֆեկտը կատարելը, կոնսուումերը դարձնում է "INSSA" 'inbox (consumer, event _ id) "որպես առաջնային բանալին։ Բանալի հակամարտությունը = իրադարձությունը արդեն բուժվել է։ Այսպիսով ստացվում է «արդյունավետ exactly-once»։
3. 3 Read-Process-Write գործարքի հետ
Լոգ-կողմնորոշված անվադողերի համար, կոնսուումերը կարդում է, նույն գործարքում գրանցում է բիզնես փոփոխություն և «անցնող օֆսեթ»։ Կոմունիտից հետո բրոքերը կարծում է, որ հաղորդագրությունները սպառված են։ Սա վերացնում է "կարդացածը" կրկնեց "առանց էֆեկտների։
3. 4 TSS/Sagi 'vervise էֆեկտների համար
Երբ անհրաժեշտ է համակարգված բազմաշերտ գործընթաց, օգտագործում ենք TCC կամ sagi։ հաղորդագրությունները թիմերի/իրադարձությունների տեղափոխումն են, իսկ գործարքը 'քայլերի և փոխհատուցումների մակարդակում։
4) Idempotent Dowsers-ը և վահանակները
Վաճառողը 'կայուն «բանաձև »/« idempoty _ key», նույն բանալին կրկնվող ուղարկումը չի ստեղծում նոր ազդեցություններ բաժանորդների մոտ։ աջակցեք հաջորդականությանը (sequence) բանալին։
Կոնսումեր ՝ «inbox» + բիզնես գաղափարախոսություն (ups.ru/merge, վերջին տարբերակի ստուգում/2019)։
5) Կարգը և պատճառները
Նվագարկեք բիզնես բանալին (օրինակ ՝ «aggregate _ id», «tenrone _ id»), որպեսզի մեկ օբյեկտի իրադարձությունները գան։
Կուսակցության ներսում պահպանեք հաջորդական համարները/ժամանակավոր կոմպոզիցիաները։ DLQ-ի ռեպրեսիայի ժամանակ հետևեք «բանալին և հետևողականորեն»։
Եթե համաշխարհային կարգը կրիտիկական չէ, տրամադրեք տեղական կարգը բանալիով և ամրագրեք տիրույթի ինվարանտները։
6) Օֆսետները և էֆեկտների ամրագրումը
A տարբերակը '«Offset BD»
Գրեք «վերջին մշակված օֆսեթը (part.ru, www.set)» նույն գործարքում, որտեղ փոխում եք հիբրիդային տվյալները։ Վերականգնելիս շարունակեք հաջորդ օֆսեթից 'խուսափելով երկրորդ էֆեկտից։
B տարբերակը '«Բրոքերի գործարքը»
Որոշ բրոկերներ աջակցում են հաղորդագրությունների և օֆսեթների ատոմային ձայնագրմանը մեկ գործարքի ընթացքում։ Օգտագործեք, եթե հասանելի եք, բայց միշտ լրացրեք սպառողի վրա դիմպտոմենտը։
7) Retrai, backoff, DLQ, DLQ
Կրկնել միայն ռետրաբլ սխալները (թայմաուտներ, 5xx), էքսպոնենցիալ backoff և ջիթեր։
Non-retraible (schema/validation) - անմիջապես DLQ-ում մետատվյալների հետ (tenault, key, set, պատճառը)։
Redraiv DLQ-ից տվեք (batch, ratch limit), ստուգեք սխեման խոհարարի առջև, պահեք կարգը։
8) Multi-tenanty-ը և տարածաշրջանները
Միացրեք «tenrone _ id», «plan», «region» -ը մետատվական հաղորդագրությունների և կուսակցության բանալիների մեջ։
Per-tenault fairness: Սահմանափակեք հրապարակումը/վերամշակումը, որպեսզի «աղմկոտ» հաճախորդը չթողնի բյուջեն մյուսներից։
Residency: Պահեք հաղորդագրությունները և www.box-ը նույն տարածաշրջանում, ինչպես հիբրիդային տվյալները։ միջտարածաշրջանային վերարտադրումները ասինխրոն ագրեգատներ են։
9) Դիտողությունն ու աուդիտը
Թրեյսինգը 'հարաբերակցությունը' event _ id '/« aggregate _ id »/« saga _ id »,« read process write/commit »։
Մետրիկները ՝ հրապարակման/մշակման լագը (p95/p99), հաջողության մասը, DLQ-rate-ը, ռեդրեյվի հաջողությունը, «կրկնօրինակները ճնշված են»։
Լոգի 'կարճ հաջողության։ մանրամասն սխալների (պատճառը, փորձը, բանալին, օֆսեթը)։
Աուդիտ 'Ո՞ վ է ռեդվիրա/նետել, թե ինչ բեռ և ինչ արդյունքով։
10) Անվտանգություն և համապատասխանություն
Microsoft PII payload; դիմեք DLQ/logs-ին տեղափոխվելիս։
Ստորագրեք/ծածկագրեք հաղորդագրությունները արտաքին անվադողերի համար։ օգտագործեք mTFC ծառայությունների միջև։
Վերահսկեք պահեստավորման ժամկետը և «մոռացման իրավունքը» per tenault/region-ը։
11) Տիպիկ սխեմաներ
1. Ծառայություն-աղբյուրը (write-side)
Տեղական գործարքը '+ ww.box-ի ստացիոնար ձայնագրությունը։
Պաբլիշեր 'մարտեր, «SKIP SYKED», backoff, per tenae լիմիթներ։
Line 'now www.occurred _ at "։
2. Սպառողի ծառայություն (read-side)
Բատչայի կարդալը բացատրում է «INSULTINBOX (consumer, event _ id)» փորձարկումը, երբ հաջողվում ենք էֆեկտը։
Նույն գործարքում մենք արձանագրում ենք «անցնող օֆսեթ» (A տարբերակը) կամ ապավինում ենք բրոքերի գործարքին (B տարբերակը)։
Սխալների վրա 'retray կամ DLQ քաղաքականությամբ։
3. Պրոյեկտիա/նյութականացված տեսակ
Միայն idempotent apdeyts (ups.ru), dedup կոմպակտ բանալիներ, ժամանակավոր գումարների պարբերական իջեցում։
12) Միգրացիոն ձևանմուշները (օրինակ)
yaml producer:
idempotency_key: event_id partition_key: "{tenant_id}:{aggregate_id}"
retry:
max_attempts: 8 initial_ms: 200 max_ms: 8000 strategy: exponential_full_jitter
consumer:
batch: 500 offset_commit: "with_domain_tx" # или "broker_tx"
inbox_enabled: true concurrency_per_partition: 4 dlq:
enabled: true batch_redrive: 200 rate_limit_per_sec: 50 order_by_key: true
observability:
metrics:
- processing_lag_ms
- publish_success_ratio
- dlq_rate
- redrive_success_ratio tracing_tags: [event_id, tenant_id, aggregate_id, partition, offset]
13) Չեկ թուղթ մինչև վաճառելը
- Վերացվել է «երկու գրամոն» ՝ Dibox-ը 'վաճառողի վրա կամ օֆսետի ամրագրումը և մեկ գործարքի էֆեկտը։
- Idempotent Consumer: «inbox »/dedup ամսագիրը, բիզնեսի գաղափարախոսությունը։
- Բիզնես բանալիների կուսակցությունը, տեղական կարգը պահպանված է։
- Retrai backoff + jitter, սխալների դասակարգում, DLQ հարուստ մետատվյալներով։
- Redraiv դեղորայքային, անվտանգ; պլեյբուսներ կան։
- Multi-tenant լիմիտներ և գերակայություններ։ թեգերը 'tenrone _ id/plan/region "։
- Telemetria: lagi, հաջողության մասնաբաժինը, «կրկնօրինակները ճնշված են», p95/p99 ալտերտերը։
- PII/retenshna/- ի քաղաքական գործիչները պահպանված են։
- Թեստեր ՝ քայլերի, կրկնօրինակների, բանալիների, զանգվածային ռեդրեյվի միջև ընկած անկում։
14) Տիպիկ սխալներ
Ուղարկեք անվադողեր և ձայնագրեք BD-ում առանձին քայլերով առանց wwww.box/գործարքի offset-ի։
Կոնսյումերը առանց գաղափարախոսության կրկնօրինակում է կողմնակի էֆեկտները։
Համաշխարհային կարգը «ամեն գնով», ճանապարհներ և հազվադեպ արդարացված։ բավականին կարգուկանոն է։
Զանգվածային ռեդրեյվը առանց սահմանների հաստատեց պատահականությունը։
Թրեյսինգի/լագ մետրի բացակայությունը «թաքնված դեգրադացիա» է։
PII-ի խառնուրդը DLQ/լոգարներում։
15) Արագ բաղադրատոմսեր
SaaS-իրադարձություններ ՝ Direbox + idempotent կոնսյումեր (inbox), «tenom _ id: aggregate _ id» խմբակցությունը։
ETL/պրոյեկտներ: Read-process-write-ը մեկ գործարքում օֆսեթների ամրագրմամբ, 500-1000, ups.ru։
Բարձր պաշտպանություն 'pablikers, «SKIP SYKED», WFQ per tenae, ճամբարի վերահսկողություն։
Խիստ կոմպլանսի գոտի 'տարածաշրջանային ֆայլեր, payload, rentenshn և redraiws աուդիտ։
Եզրակացություն
Գործարքային մեսեգինգը տվյալների և հաղորդագրությունների կապի կարգապահությունն է։ Windows box/inbox, idempotenty, օֆսեթների ամրագրումը DLQ-ի հետ, դուք ստանում եք գործնական exactly-once վարքագիծ առանց գլոբալ արգելափակումների և պահպանում եք SLO-ն նույնիսկ ձախողումների, գագաթների և բարդ մուլտֆիլմի-ստենանտային գործողության ժամանակ։