Event-Driven միջուկը
Ի՞ նչ է Event-Driven միջուկը
Event-Driven միջուկը (EDC) ճարտարապետության «ողնաշարավորն» է, որտեղ բիզնես փաստերը նկարագրվում և տարածվում են որպես անփոփոխ իրադարձություններ, իսկ մնացած ֆունկցիոնալությունը (կարդալը, կարդալը, վերլուծությունը, քեշը, նոտացիան) կառուցվում է այս իրադարձությունների հոսքի վրա։ Միջուկը տալիս է իրադարձությունների պայմանագիր, առաքման կանոնները և արագության ինվարանտները, ապահովելով թույլ կապը և մեծացումը։
Հիմնական գաղափարը 'նախ գրել փաստը (միջուկը), ապա ինքնուրույն հարստացնել և նախագծել այն ճիշտ մոդելների մեջ։ Սա նվազեցնում է կապը և բարձրացնում է դիմադրությունը մասնակի ձախողումների հետ։
Նպատակներն ու հատկությունները EDC
Փաստերի ճշմարտությունը 'յուրաքանչյուր իրադարձություն անփոփոխ գրառում է «ինչ է պատահել»։
Թույլ կապը 'արտադրողները չգիտեն սպառողներին։ համակարգի ընդլայնումը բաժանորդների ավելացումն է։
Մեծացումը 'հորիզոնական աճը կուսակցության/տոպիկների, անկախ սպառողների վրա։
Դիտարկումը և աուդիտը 'ցուցիչների, վերարտադրողականության, վերարտադրման և վերարտադրման միջոցով։
Կառավարվող էվոլյուցիան 'սխեմաների տարբերակներ, համատեղելիություն, deprecation։
Ճարտարապետական բաղադրիչներ
1. Շինա/բրոքեր իրադարձությունների ՝ Kafka/NATS/Pulsar/SNS + MSS - ալիքներ, կուսակցություններ, վերականգնումներ։
2. Հիմնական սխեմաները ՝ JSON Schema/Avro/Eurobuf-ը ռուսական և էվոլյուցիայի համար։
3. Windobox/CDC-2019 'փաստի ատոմային ամրագրումը + հրապարակումը առանց «կրկնակի գրելու»։
4. Պրոյեկտներ/ընթերցանություն (CQRS) 'արագ հարցումների համար նյութականացված ներկայացումներ։
5. Սագին/նվագախումբը 'երկար գործընթացների համակարգումը իրադարձությունների/թիմի միջոցով։
6. Հարստացումը 'առանձին տեղանուններ' «.enriched »/' derived 'առանց կրիտիկական ուղու վրա ազդելու։
7. Աստղադիտարան 'ուղի, լոգիստիկա, չափումներ իրադարձությունների և ճամբարների վերաբերյալ։
Իրադարձությունների մոդել
Իրադարձությունների տեսակները
Domain Events: Բիզնես փաստեր ("pay.ru. authorized`, `kyc. approved`).
Integration Events: ուղղված են արտաքին համակարգերին (կայուն, դանդաղ փոխվում են)։
Change Windows Capture (CDC) 'ձայնագրման տեխնոլոգիական փոփոխություններ (օգտագործեք ինտեգրման/ինտեգրման համար)։
Audit/Telemetry: ակտորների, անվտանգության, SLA գործողությունները։
Պարտադիր ատրիբուտներ (միջուկ)
json
{
"event_id": "uuid",
"event_type": "payment. authorized. v1",
"occurred_at": "2025-10-31T11:34:52Z",
"producer": "payments-service",
"subject": { "type": "payment", "id": "pay_123" },
"payload": { "amount": 1000, "currency": "EUR", "method": "card" },
"schema_version": 1,
"trace_id": "abc123",
"partition_key": "pay_123"
}
Առաջարկությունները ՝ «event _ id» գլոբալ միավորված, «partection _ key» -ը կարգավորում է էության համար, «trace _ id» -ը տալիս է հարաբերակցություն։
Առաքման սեմանտիկան և գաղափարախոսությունը
At-leport-once (լռելյայն շատ բրոկերների մոտ), սպառողները պետք է լինեն հակամարմնային։
At-most-once: ընդունելի է միայն երկրորդական հեռուստացույցի համար։
Exactly-once-ը ձեռք է բերվում հոսքի մակարդակում և իրականացվում է գործարքների միջոցով/idempotent բանալիներ/պիտակներ (ավելի թանկ, անհրաժեշտ է լավ պատճառ)։
Սպառողի կրկնօրինակումը
"Event _ id '/" (event _ id, consumer _ id)" TTL-ից տոպիկի վերականգնումը։
Ups.ru փոխարենը ins.ru; «sequence »/« occurred _ at» պրոյեկտների տարբերակն է։
Վիրահատությունները գործարքի շրջանակներում 'նշանը «տեսավ» + պետության փոփոխությունը։
Կարգը և կուսակցությունը
Երաշխավորված կարգը կուսակցության սահմաններում։
Ընտրեք 'partrone _ key', որպեսզի մեկ միավորի բոլոր իրադարձությունները մտնեն մեկ կուսակցության մեջ («user _ id», «payment _ id»)։
Խուսափեք «տաք դեղամիջոցներից» 'հեշ աղով/անիվներով, եթե անհրաժեշտ է բեռ բաժանել։
Սխեմաներ և էվոլյուցիա
Meditive-first: Նոր օպոզացիոնալ դաշտեր, տեսակների/սեմանտիկայի փոփոխության արգելք առանց major տարբերակների։
Համատեղելիությունը 'BACKWARD/FORWARD ռուսական սխեմաներում։ CI-ն արգելափակում է անհամատեղելի փոփոխությունները։
Անունը '"domain. action. v{major}` (`payment. authorized. v1`).
Տե՛ ս 'հրապարակեք «v1» և «v2» զույգերը զուգահեռ, ապահովեք կրկնակի ճառագայթումը (dance-write box), նկարահանեք «v1» անցումից հետո։
Outbox и CDC
Winbox (առաջարկվում է գործարքային ծառայությունների համար)
1. Մեկ BD գործարքում, մենք պահպանում ենք հիբրիդային ձայնագրումը և իրադարձությունը www.box-ում։
2. Ֆոնային պաբլիշերը կարդում է www.box, հրապարակում է բրոքեր, նշում է «ուղարկվել»։
3. Երաշխիքներ ՝ անկման դեպքում չկա «կորուստ», ոչ էլ ռասինխրոնիզացիա։
CDC (Change Data Capture)
Հարմար է գոյություն ունեցող համակարգերի/խմբակցությունների համար։ աղբյուրը ԲԴ-ի վերարտադրման լոգ է։
Պահանջում է ֆիլտրել/թարգմանել հիբրիդային իրադարձություններին (մի հեռարձակել «հում» աղյուսակները ժամանակին)։
CQRS և պրոյեկցիաներ
Թիմերը փոխում են վիճակը (հաճախ սինխրոն), իրադարձությունները 'պրոյեկտներ (ասինխրոն)։
Պրոյեկտները հաշվարկված են հարցումների համար (որոնում, ցուցակներ, հաշվետվություններ), նորարարվում են ստորագրողների կողմից։
Ժամանակավոր ռասինխրոնիզացիան նորմ է 'ցույց տվեք կայուն UX («տվյալները նորարարվում են մի քանի վայրկյանում»)։
Սագի 'գործընթացների համակարգումը
Օրկեստրացիան 'մի ֆուտբոլիստ ուղարկում է թիմերին և սպասում է իրադարձություններին։
Խորեոգրաֆիա 'մասնակիցները արձագանքում են միմյանց իրադարձություններին (ավելի հեշտ, բայց պահանջում է կարգապահություն պայմանագրերում)։
Կանոնները 'հստակ փոխհատուցում և թայմ-աուտներ, կրկնվող քայլեր, կուռքեր։
Դիտարկումը
Trace/Windows: Անցեք «trace _ id» -ը իրադարձությունների ստեղծման վերնագրերի միջոցով։
Մետրիկները ՝ սպառողների լագը, հրապարակման/սպառման արագությունը, dead-letter rate, dedeplication մասը։
DLQ/parking lot: անհաջող հաղորդագրությունները 'առանձին կացինով' ալերտով; ապահովեք վերամշակումը։
Անվտանգություն և համապատասխանություն
Տվյալների դասակարգումը 'միջուկը պարունակում է միայն անհրաժեշտ PII/findians (հետադարձ բուրգի մոդել), մանրամասները հարստության մեջ։
Ստորագրություն/հեշ կրիտիկական ատրիբուտներ, ամբողջականության վերահսկում։
In-flight-ի և at-rest-ի գաղտնագրումը, ինտեգրման/կոնսումերների իրավունքների համադրումը (IAM/ACL)։
Վերափոխման քաղաքականությունները և մոռացության իրավունքները, որոնք հստակ սահմանված են յուրաքանչյուր կացինի համար։
Արտադրողականություն և կայունություն
Backpressure: սպառողների մոտ մրցունակության սահմանափակում է, բրոքեր 'քվոտաներ/լիմիտներ։
Batch-վերամշակումը և ագրեսիան 'խմբավորում եք գրառումներ, որպեսզի նվազեցնեն ծախսերը։
Retray-ը ջիթերի և DLQ-ի հետ 'անվերջ փորձերի փոխարեն։
Rebal.ru-դիմացկունություն 'պահեք օֆսեթները գործարքային/արտաքին, արագացրեք սառը մեկնարկը կեղևներով։
Իրադարձությունների տիպային ձևանմուշները
Վճարման միջուկը
`payment. initiated. v1` → `payment. authorized. v1` → `payment. captured. v1` → `payment. settled. v1`
Մերժումներ ՝ "pay.ru. declined. v1`, `payment. refunded. v1`
Կուսակցությունը '«payment _ id»
SLA 'միջուկի lag 242s p95; սպառողների դիմադրությունը պարտադիր է։
KUS/հավատարմագրում
`kyc. started. v1` → `kyc. document. received. v1` → `kyc. approved. v1`/`kyc. rejected. v1`
PII-ը նվազագույն է։ փաստաթղթի մանրամասները '«kyc» -ում։ enriched. v1 'սահմանափակ հասանելիությամբ։
Աուդիտ/անվտանգություն
`audit. recorded. v1 'ալգորիթմներով' actor ', «www.ject», «action», «occurred _ at», «trace _ id»։
Շարունակական վերականգնումը/արխիվացումը; բարձրացված ամբողջականությունը (WORM-2019)։
Antipatterny
Fat Event: ծանրաբեռնված payload 'a առանց կարիքների, PII արտահոսքը։
Hidden RPC-ն իրադարձությունների միջոցով 'սինխրոն պատասխանների սպասումը «այստեղ և հիմա»։
Հում CDC-ն դուրս է գալիս 'սերտ կապվածություն BD-ի սխեմայի հետ։
Սպառողների մոտ ոչ մի դիմպոտենտ չկա. Դուբլին հանգեցնում է երկակի կողմնակի էֆեկտների։
«Ամեն ինչի համար» ընդհանուր կացիններից մեկը 'շահերի բախումը, խնդրահարույց կարգը, բարդ էվոլյուցիան։
EDC գայթակղիչ ներդրումը
1. Տիրույթի քարտ 'ընտրեք հիմնական ագրեգատները և կյանքի ցիկլերը։
2. Իրադարձությունների կատալոգը 'անուններ, իմաստներ, ինվարանտներ, պարտադիր դաշտեր։
3. Սխեմաներ և կանոններ. Ընտրեք ձևաչափը, միացրեք կանոններին։
4. Systebox/CDC։ Յուրաքանչյուր արտադրողի համար բացատրվում է փաստերի հրապարակման մեխանիզմը։
5. Կուսակցությունը 'ընտրեք բանալիներ և գնահատեք տաք բանալիները/վերափոխումը։
6. Idempotenty: Dedup + սպառողների գործարքը։
7. Պրոյեկտներ ՝ ռուսական նյութականացված մոդելներ և SLA նորարարություններ։
8. Աստղադիտակներ ՝ ուղիներ, ճամբարներ, DLQ, ալերտներ։
9. System/PII 'տվյալների դասակարգում, կոդավորում, ACL։
10. Էվոլյուցիայի պատճառը տարբերակների քաղաքականությունն է, դեպրեսեյթը, dult-write-ը միգրացիայի համար։
Chek-թերթ վաճառվել
- Յուրաքանչյուր իրադարձություն ունի «event _ id», «trace _ id», «occurred _ at», «partection _ key»։
- Սխեմաները խմբագրության մեջ, ներառում են կոդավորման ստուգումներ։
- Սպառողների Idempotention-ը իրականացվել և փորձարկվել է։
- DLQ/parking lot և ալտերտերը հրապարակման/սպառման սխալների վրա։
- Պրոյեկտները վերածվում են լոգարանի (replay) ընդունելի ժամանակի։
- Սահմանափակված է հասանելիությունը PII; նվազագույն payload 'a միջուկի մեջ։
- SLA ճամբարներում/առաքումները չափվում են և տեսանելի են dashbords-ում։
- Գոյություն ունի իրադարձությունների և դեպրեսիտի պատուհանների վերջնական տարբերակների ծրագիր։
FAQ
Ինչպե՞ ս է EDC-ն տարբերվում «անվադողից»։
Միջուկը ոչ միայն բրոքեր է, այլ նաև իրադարձությունների պայմանագիր, կարգուկանոնի/իդեմպոտենտության կանոնները, էվոլյուցիայի գործընթացները և դիտարկումը։
Կարո՞ ղ եք կառուցել միայն CDC-ի վրա։
CDC-ն հարմար է ինտեգրման/միգրացիայի համար, բայց հիբրիդային իրադարձությունները ավելի պարզ են արտահայտում իմաստը և ավելի կայուն են զգում BD-ի փոփոխությունները։
Ինչպե՞ ս կարող ենք ներդաշնակ լինել։
Մենք ընդունում ենք eventium consistency-ը և նախագծում UX/գործընթացները դրա տակ (նորարարությունների, ռեակտորների, փոխհատուցման)։
Ե՞ րբ է անհրաժեշտ exactly-once-ը։
Հազվադեպ, երբ կրկնապատկումը խիստ անընդունելի է և անհնար է փոխհատուցել։ Հաճախ բավական է at-least-once + idempotention։
Արդյունքը
Event-Driven միջուկը վերածում է բիզնեսի փաստերի հոսքը համակարգի հուսալի հիմքի։ Իրադարձությունների հստակ պայմանագրերը, առաքման կարգապահությունը և դիտարկումը տալիս են մասշտաբի, կայունության և էվոլյուցիայի արագության, առանց փխրուն սինխրոն կապերի և փոփոխությունների ռեգրեսիայի։