GH GambleHub

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».

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.