Event-Driven yadrosi
Event-Driven yadrosi nima
Event-Driven yadrosi (EDC) - bu arxitekturaning «umurtqa pog’onasi» bo’lib, unda biznes-faktlar o’zgarmas hodisa sifatida qayd etiladi va tarqatiladi, qolgan funksionallik (o’qish, integratsiya, tahlil, keshlar, notifikatsiyalar) esa ushbu hodisalar oqimining ustiga quriladi. Yadro hodisalar kontraktini, yetkazib berish qoidalarini va tartib/idempotentlik invariantlarini belgilaydi, zaif bog’liqlik va masshtabni ta’minlaydi.
Asosiy g’oya: avval haqiqatni (yadro) yozib olish, so’ngra uni mustaqil ravishda boyitish va kerakli modellarga moslashtirish. Bu aloqadorlikni kamaytiradi va qisman uzilishlarga chidamliligini oshiradi.
EDC maqsadlari va xususiyatlari
Haqiqat: har bir voqea «nima bo’ldi» degan o’zgarmas yozuvdir.
Zaif bog’liqlik: prodyuserlar iste’molchilarni bilmaydi; tizimni kengaytirish - obunachilarni qo’shish.
Kengaytirish: partiyalar/topiklar bo’yicha gorizontal o’sish, mustaqil iste’molchilar.
Kuzatish va audit: uzluksiz identifikatorlar, takrorlanuvchanlik, retensiya va qayta o’ynash.
Boshqariladigan evolyutsiya: sxemalar versiyasi, muvofiqlik, deprecation.
Arxitektura komponentlari
1. Shina/voqealar brokeri: Kafka/NATS/Pulsar/SNS + SQS - kanallar, partiyalar, retensiyalar.
2. Sxemalar reyestri: Uyg’unlik va evolyutsiya uchun JSON Schema/Euro/Protobuf.
3. Outbox/CDC konturi: faktni atomik belgilash + «ikki marta yozmasdan» nashr etish.
4. Proyeksiya/oʻqish (CQRS): tezkor soʻrovlar uchun materiallashtirilgan tushunchalar.
5. Sage/orkestr: voqealar/buyruqlar orqali uzoq davom etadigan jarayonlarni muvofiqlashtirish.
6. Boyitish: alohida topiklar’.enriched ’/’ .derived’tanqidiy yo’lga ta’sir qilmasdan.
7. Observability: trastirovka, logirovka, voqealar va laglar bo’yicha metrika.
Hodisa modeli
Hodisa turlari
Domain Events: biznes faktlari (’payment. authorized`, `kyc. approved`).
Integration Events: tashqi tizimlarga yo’naltirilgan (barqaror, sekin o’zgaradi).
Change Data Capture (CDC): yozuvdagi texnik oʻzgarishlar (migratsiya/integratsiya uchun foydalaning).
Audit/Telemetry: aktyorlarning harakatlari, xavfsizlik, SLA.
Majburiy atributlar (yadro)
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"
}
Tavsiyalar:’event _ id’global miqyosda noyob,’partition _ key’mohiyat uchun tartib oʻrnatadi,’trace _ id’korrelyatsiyani taʼminlaydi.
Yetkazib berish semantikasi va idempotentlik
At-least-once (ko’plab brokerlarda andoza): iste’molchilar idempotent bo’lishlari shart.
At-most-once: faqat ikkinchi darajali telemetriyalar uchun maqbuldir.
Exactly-once: tranzaksiya/idempotent kalitlari/leykalari orqali oqim va saqlash darajasida erishiladi (qimmatroq, yaxshi sabab kerak).
Iste’molchining idempotentlik namunasi
’event _ id ’/’ (event_id, consumer_id)’ s TTL ≥ topik retensiyasi boʻyicha dedup jadvali.
insert oʻrniga Upsert; ’sequence ’/’ occurred _ at’ proyeksiyalarini versiyalash.
Tranzaksiya doirasidagi operatsiyalar: «koʻrgan» belgisi + holat oʻzgarishi.
Tartib va partiyalashtirish
Partiya doirasida kafolatlangan tartib.
’partition _ key’ ni tanlang, shunda bir xil mazmundagi barcha voqealar bitta partiyaga (’user _ id’,’payment _ id’) tushadi.
Agar yukni taqsimlash kerak bo’lsa, «issiq kalitlar» dan qoching: tuz bilan xesh/pastki kalitlar.
Sxemalar va evolyutsiya
Additive-first: yangi ixtiyoriy maydonlar, major-versiyasiz turlarni/semantikani o’zgartirishni taqiqlash.
Mosligi: sxemalar reyestridagi BACKWARD/FORWARD; CI mos kelmaydigan oʻzgarishlarni bloklaydi.
Nomlanishi:’domain. action. v{major}` (`payment. authorized. v1`).
Migratsiyalar: parallel ravishda’v1’va’v2’juftliklarini joylashtiring, ikki marta nurlanishni taʼminlang (outbox orqali dual-write), oʻtishdan keyin’v1’ni olib tashlang.
Outbox и CDC
Outbox (tranzaksiya xizmatlari uchun tavsiya etiladi)
1. Bitta DB tranzaksiyasida: domen yozuvini va hodisani outboxda saqlaymiz.
2. Fon nashriyotchisi outbox oʻqiydi, brokerga eʼlon qiladi, «joʻnatildi» deb belgilaydi.
3. Kafolatlar: yiqilishda hech qanday «yo’qotishlar» yo’q.
CDC (Change Data Capture)
Mavjud tizimlar/migratsiyalar uchun mos; manba - DB replikatsiyasi log.
Domen hodisalarini filtrlash/qayta kodlashni talab qiladi («xom» jadvallarni tashqaridan translyatsiya qilmang).
CQRS va proyeksiyalar
Buyruqlar holatni o’zgartiradi (ko’pincha sinxron), hodisalar proyeksiyalarni shakllantiradi (asinxron).
Proyeksiyalar so’rovlar (qidiruv, ro’yxatlar, hisobotlar) uchun mo’ljallangan bo’lib, obunachilar tomonidan yangilanadi.
Vaqtinchalik sinxronizatsiya - norma: barqaror UX koʻrsating («maʼlumotlar bir necha soniyada yangilanadi»).
Dostonlar: jarayonlarni muvofiqlashtirish
Orkestr: bitta koordinator buyruqlarni yuboradi va voqealarni kutadi.
Xoreografiya: ishtirokchilar bir-birlarining voqealariga munosabat bildiradilar (sodda, ammo kontraktlarda intizomni talab qiladi).
Qoidalar: aniq kompensatsiyalar va taym-autlar, takrorlanadigan qadamlar, idempotent ishlov beruvchilar.
Kuzatish
Trace/Span:’trace _ id ’/’ span _ id’ni voqealarni yaratishda sarlavhalar orqali tashlang.
Metrikalari: iste’molchilar qolig’i, nashr/iste’mol tezligi, dead-letter rate, deduplikatsiyalar ulushi.
DLQ/parking lot: muvaffaqiyatsiz xabarlar - alert bilan alohida topikka; qayta ishlashni ta’minlang.
Xavfsizlik va muvofiqlik
Ma’lumotlarning tasnifi: yadro faqat zarur bo’lgan PII/findani (teskari piramida modeli), tafsilotlarni boyitishda o’z ichiga oladi.
Muhim atributlarning imzosi/xeshi, yaxlitlikni nazorat qilish.
In-flight va at-rest shifrlash, mavzular/konsumerlar bo’yicha huquqlarni seksiyalash (IAM/ACL).
Retensiya siyosati va unutish huquqi: har bir topik uchun aniq belgilangan.
Unumdorlik va barqarorlik
Backpressure: iste’molchilarda - raqobatbardoshlik chegarasi, brokerda - kvota/limitlar.
Batch-ishlov berish va siqish: yuk xarajatlarini kamaytirish uchun yozuvlarni guruhlang.
Cheksiz urinishlar o’rniga jitter va DLQ bilan retrajlar.
Rebalance-chidamlilik: Ofsetlarni tranzaksion/tashqi tarzda saqlang, sovuq boshlashni snapshotlar bilan tezlashtiring.
Namunaviy hodisa namunalari
To’lovlar yadrosi
`payment. initiated. v1` → `payment. authorized. v1` → `payment. captured. v1` → `payment. settled. v1`
Muvaffaqiyatsiz tugadi: ’payment. declined. v1`, `payment. refunded. v1`
Partiyalash: ’payment _ id ’
SLA: yadro lag ≤ 2s p95; iste’molchilarning idempotentligi majburiydir.
KTS/verifikatsiya
`kyc. started. v1` → `kyc. document. received. v1` → `kyc. approved. v1`/`kyc. rejected. v1`
PII - eng kam; hujjatning tafsilotlari -’kyc. enriched. v1’kirish imkoniyati cheklangan.
Audit/xavfsizlik
`audit. recorded. v1’’actor’,’subject’,’action’,’occurred _ at’,’trace _ id’atributlari bilan.
Uzluksiz retensiya/arxivlash; yuqori yaxlitlik (WORM-saqlash).
Antipatternlar
Fat Event: ortiqcha yuklangan payload’lar, PII oqishi.
Hodisa orqali Hidden RPC: «Bu yerda va hozir» sinxron javoblarini kutish.
Xom CDC tashqi: DB sxemasi bilan yaqin bog’liqlik.
Iste’molchilarda idempotentlik yo’q: dubllar ikki tomonlama nojo’ya ta’sirga olib keladi.
Bitta umumiy «hamma narsaga»: manfaatlar to’qnashuvi, muammoli tartib, murakkab evolyutsiya.
EDCni bosqichma-bosqich joriy etish
1. Domenni xaritalash: asosiy agregatlar va hayot sikllarini tanlang.
2. Voqealar katalogi: nomlar, maʼnolar, invariantlar, majburiy maydonlar.
3. Sxemalar va reestr: Formatni tanlang, mos kelish qoidalarini kiriting.
4. Outbox/CDC: har bir prodyuser uchun faktlarni chop etish mexanizmini aniqlang.
5. Partiyalash: kalitlarni tanlang va issiq kalitlarni/qayta taqsimlashni baholang.
6. Idempotentlik: dedup shabloni + isteʼmolchilarning tranzaksiyaliligi.
7. Proyeksiyalar: materiallashtirilgan modellar va SLA yangilanishlarini aniqlang.
8. Observability: trassirovka, laglar, DLQ, alertlar.
9. Security/PII: maʼlumotlarni tasniflash, shifrlash, ACL.
10. Evolyutsiya bo’yicha g’od: versiyalar siyosati, deprekeyt, migratsiya uchun dual-write.
Prodakshenning chek-varaqasi
- Har bir hodisada’event _ id’,’trace _ id’,’occurred _ at’,’partition _ key’mavjud.
- Reyestrdagi sxemalar, muvofiqlik tekshiruvlari kiritilgan.
- Iste’molchilarning idempotentligi amalga oshirildi va sinovdan o’tkazildi.
- DLQ/parking lot va noto’g’ri e’lon qilish/iste’mol qilish uchun sozlangan.
- Proyeksiyalar logdan (replay) maqbul vaqt bilan orttiriladi.
- PII ga kirish cheklangan; yadroda eng kam payload’lar.
- Lag/yetkazib berish SLA o’lchanadi va dashbordlarda ko’rinadi.
- Deprekeyt oynalari va voqealar versiyalarining migratsiya rejasi mavjud.
FAQ
EDC «oddiy shina» dan qanday farq qiladi?
Yadro - bu nafaqat broker, balki voqealar kontrakti, tartib-qoidalar, evolyutsiya jarayonlari va kuzatuvchanlik.
Faqat CDCda qurish mumkinmi?
CDC integratsiya/migratsiya uchun mos keladi, lekin domen voqealari ma’nosini aniqroq ifodalaydi va ma’lumotlar bazasidagi o’zgarishlarni ko’proq barqarorlashtiradi.
Kelishuv bilan nima qilish mumkin?
Biz eventual consistency qabul qilamiz va UX/jarayonlarni loyihalashtiramiz (yangilash indikatorlari, retralar, kompensatsiyalar).
Qachon exactly-once kerak?
Kamdan-kam hollarda: ikki baravar ko’paytirish qat’iyan yo’l qo’yib bo’lmaydigan va kompensatsiya qilish mumkin bo’lmagan hollarda. Ko’pincha at-least-once + idempotentlik etarli.
Jami
Event-Driven yadrosi biznes faktlari oqimini tizimning mustahkam poydevoriga aylantiradi. Hodisalarning aniq kontraktlari, yetkazib berish tartibi va kuzatilganlik ko’lamlilik, barqarorlik va evolyutsiya tezligini ta’minlaydi - mo’rt sinxron aloqalarsiz va o’zgarishlarda regressiya «bo’roni».