GH GambleHub

Event-Driven nüvə

Event-Driven nüvəsi nədir

Event-Driven nüvəsi (EDC), iş faktlarının dəyişməz hadisə kimi qeydə alındığı və yayıldığı və qalan funksionallığın (oxu, inteqrasiya, analitika, keşlər, notifikasiyalar) bu hadisələrin axınının üstündə qurulduğu arxitekturanın «onurğasıdır». Nüvə hadisələrin müqaviləsini, çatdırılma qaydalarını və nizam-intizam/idempotentlik invariantlarını təyin edir, zəif əlaqə və miqyaslanabilirliyi təmin edir.

Əsas fikir: əvvəlcə faktı (nüvəni) yazın, sonra müstəqil şəkildə zənginləşdirin və lazımi modellərə proyeksiya edin. Bu əlaqəni azaldır və qismən uğursuzluqlara qarşı müqaviməti artırır.

EDC məqsədləri və xüsusiyyətləri

Faktların həqiqəti: hər bir hadisə dəyişməz «nə baş verdi» yazısıdır.
Zəif əlaqə: istehsalçılar istehlakçıları tanımırlar; sistemin genişləndirilməsi - abunəçilərin əlavə edilməsi.
Miqyaslandırma: partiyalar/topiklər üzrə üfüqi artım, müstəqil istehlakçılar.
Müşahidə və audit: keçici identifikatorlar, reproduktivlik, retensiyalar və yenidən oynamaq.
Nəzarət olunan təkamül: sxemlərin versiyaları, uyğunluq, deprecation.

Memarlıq komponentləri

1. Şina/tədbir brokeri: Kafka/NATS/Pulsar/SNS + SQS - kanallar, partiyalar, retensiyalar.
2. Sxemlərin reyestri: Uyğunluq və təkamül üçün JSON Schema/Avro/Protobuf.
3. Outbox/CDC-kontur: atom fakt fiksasiya + «cüt qeyd» olmadan nəşr.
4. Proyeksiyalar/Oxunmalar (CQRS): Sürətli sorğular üçün materiallaşdırılmış performans.
5. Dastanlar/orkestr: hadisələr/komandalar vasitəsilə uzunömürlü proseslərin koordinasiyası.
6. zənginləşdirilməsi: kritik yol təsir etmədən ayrı-ayrı topiklər '.enriched '/' .derived'.
7. Observability: Tracking, loging, hadisələr və lag ölçüləri.

Hadisə modeli

Hadisə növləri

Domain Events: biznes faktları ('payment. authorized`, `kyc. approved`).
Integration Events: xarici sistemlərə yönəlib (sabit, yavaş-yavaş dəyişir).
Change Data Capture (CDC): qeydlərin texniki dəyişiklikləri (miqrasiya/inteqrasiya üçün istifadə edin).
Audit/Telemetry: aktyorların hərəkətləri, təhlükəsizlik, SLA.

Məcburi atributlar (nüvə)

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"
}

Tövsiyələr: 'event _ id' qlobal olaraq unikaldır, 'partition _ key' mahiyyət üçün sifariş verir, 'trace _ id' korrelyasiya təmin edir.

Çatdırılma semantikası və idempotentlik

At-least-once (bir çox broker üçün default): istehlakçılar idempotent olmalıdır.
At-most-once: yalnız ikinci dərəcəli telemetriyalar üçün məqbuldur.
Exactly-once: əməliyyatlar/idempotent açarları/leykaları vasitəsilə axın və saxlama səviyyəsində əldə edilir (daha bahalı, yaxşı səbəb lazımdır).

İstehlakçı idempotentlik şablonu

Dedup cədvəli 'event _ id '/' (event_id, consumer_id)' ilə TTL ≥ topik retensiyası.
Upsert əvəzinə insert; 'sequence '/' occurred _ at' proyeksiyalarının versiyası.
Əməliyyat çərçivəsində əməliyyatlar: «gördüm» işarəsi + vəziyyətin dəyişməsi.

Sifariş və Partizan

Partiya daxilində zəmanətli nizam.
'partition _ key' -ni seçin ki, bütün hadisələr bir məcmuəyə daxil olsun ('user _ id', 'payment _ id').
"Isti açarlar 'dan çəkinin: yükün paylanması tələb olunarsa, duz/alt açarlar ilə hash.

Sxemlər və təkamül

Additive-first: Yeni isteğe bağlı sahələr, major-versiyası olmadan növ/semantik dəyişiklik qadağası.
Uyğunluq: Sxemlərin reyestrində BACKWARD/FORWARD; CI uyğun olmayan dəyişiklikləri bloklayır.
Adı: 'domain. action. v{major}` (`payment. authorized. v1`).
Miqrasiyalar: paralel olaraq 'v1' və 'v2' cütlərini dərc edin, ikiqat şüalanma təmin edin (outbox vasitəsilə dual-write), keçiddən sonra 'v1' çəkin.

Outbox и CDC

Outbox (əməliyyat xidmətləri üçün tövsiyə olunur)

1. Bir DB əməliyyatında: domen yazısını və hadisəni outbox-da saxlayın.
2. Fon publisher outbox oxuyur, broker dərc, «göndərildi» işarələr.
3. Zəmanət: Düşmə zamanı heç bir «itki» faktı, heç bir sinxronizasiya.

CDC (Change Data Capture)

Mövcud sistemlər/miqrasiya üçün uyğundur; mənbə - DB replikasiya log.
Domen hadisələrinə filtrasiya/kodlaşdırma tələb edir («xam» cədvəlləri xaricə ötürməyin).

CQRS və proyeksiyaları

Komandalar vəziyyəti dəyişir (tez-tez sinxron), hadisələr - proyeksiyaları formalaşdırır (asenxron).
Proyeksiyalar abunəçilər tərəfindən yenilənən sorğular (axtarış, siyahılar, hesabatlar) üçün nəzərdə tutulmuşdur.
Müvəqqəti sinxronizasiya - norma: sabit UX göstərin («məlumatlar bir neçə saniyədən sonra yenilənəcək»).

Dastanlar: proseslərin koordinasiyası

Orkestr: bir koordinator komandalar göndərir və hadisələri gözləyir.
Xoreoqrafiya: iştirakçılar bir-birinin hadisələrinə reaksiya verirlər (daha sadə, lakin müqavilələrdə nizam-intizam tələb edir).
Qaydalar: aydın kompensasiya və zaman-aut, təkrarlanan addımlar, idempotent prosessorlar.

Müşahidə

Trace/Span: 'trace _ id '/' span _ id' hadisələri törədərkən başlıqlar vasitəsilə atın.
Metriklər: istehlakçıların gecikməsi, nəşr/istehlak sürəti, dead-letter rate, deduplikasiyaların payı.
DLQ/parking lot: uğursuz mesajlar - alert ilə ayrı topik; təkrar emal təmin edin.

Təhlükəsizlik və uyğunluq

Məlumatların təsnifatı: nüvədə yalnız zəruri minimum PII/findan (əks piramida modeli), detallar zənginləşdirmədə var.
Kritik atributların imzası/hash, bütövlük nəzarəti.
In-flight və at-rest şifrələmə, mövzular/məsləhətçilər (IAM/ACL) üzrə hüquqların bölmələri.
Retensiya siyasətləri və unudulma hüquqları: hər topik üçün dəqiq müəyyən edilmişdir.

Performans və sabitlik

Backpressure: istehlakçıların rəqabət məhdudiyyəti, brokerin kvotaları/limitləri var.
Batch emalı və sıxılma: əlavə xərcləri azaltmaq üçün qeydləri qruplaşdırın.
Sonsuz cəhdlər əvəzinə Jitter və DLQ ilə retray.
Rebalance-dözümlülük: ofsetləri əməliyyat/xarici saxlayın, snapshot ilə soyuq başlanğıc sürətləndirin.

Tipik hadisə şablonları

Ödənişlərin nüvəsi

`payment. initiated. v1` → `payment. authorized. v1` → `payment. captured. v1` → `payment. settled. v1`

Uğursuzluqlar: 'payment. declined. v1`, `payment. refunded. v1`

Partizan: 'payment _ id'

SLA: lag nüvə ≤ 2s p95; istehlakçıların idempotentliyi məcburidir.

KUS/yoxlama

`kyc. started. v1` → `kyc. document. received. v1` → `kyc. approved. v1`/`kyc. rejected. v1`

PII - minimum; sənədin detalları - in 'kyc. enriched. v1 'məhdud giriş ilə.

Audit/Təhlükəsizlik

`audit. recorded. v1 '' actor ',' subject ',' action ',' occurred _ at ',' trace _ id 'atributları ilə.
Davamlı retensiya/arxivləşdirmə; artan bütövlük (WORM-saxlama).

Antipatternlər

Fat Event: ehtiyac olmadan həddindən artıq payload, PII sızması.
Hadisələrlə Hidden RPC: «burada və indi» sinxron cavabları gözləmək.
Xammal CDC: DB sxemi ilə sıx əlaqə.
İstehlakçıların idempotluğu yoxdur: ikiqat yan təsirlərə səbəb olur.
Bir ümumi topik «hər şeyə»: maraqlar toqquşması, problemli nizam, mürəkkəb təkamül.

EDC-nin addım-addım tətbiqi

1. Domen xəritəsi: əsas aqreqatları və həyat dövrlərini seçin.
2. Hadisələr kataloqu: adlar, mənalar, invariantlar, məcburi sahələr.
3. Sxemlər və reyestr: formatı seçin, uyğunluq qaydalarını daxil edin.
4. Outbox/CDC: hər bir prodüser üçün faktların dərc edilməsi mexanizmini müəyyən edin.
5. Partizanlaşdırma: açarları seçin və isti açarları/yenidən bölüşdürməni qiymətləndirin.
6. İdempotentlik: deadup şablon + istehlakçı əməliyyatları.
7. Proyeksiyalar: materiallaşdırılmış modelləri və SLA yeniləmələri müəyyən edin.
8. Observability: tracking, lages, DLQ, alerts.
9. Security/PII: məlumatların təsnifatı, şifrələmə, ACL.
10. Təkamül qaydası: versiyalar siyasəti, deprekeyt, miqrasiya üçün dual-write.

Production çek siyahısı

  • Hər bir hadisədə 'event _ id', 'trace _ id', 'occurred _ at', 'partition _ key' var.
  • Qeydiyyat sxemləri, uyğunluq yoxlamaları daxildir.
  • İstehlakçıların idempotenti həyata keçirildi və sınaqdan keçirildi.
  • DLQ/parking lot və yayım/istehlak səhvləri üçün həyəcan verici.
  • Proyeksiyalar qəbuledici vaxt ilə log (replay) yenidən yüklənir.
  • PII-yə giriş məhduddur; nüvədə minimum payload.
  • SLA lag/çatdırılma ölçülür və dashboard görünür.
  • Hadisə versiyaları və deprequit pəncərələri miqrasiya planı var.

FAQ

EDC «sadəcə şindən» nə ilə fərqlənir?
Nüvə yalnız broker deyil, həm də hadisələrin müqaviləsi, nizam-intizam qaydaları, təkamül prosesləri və müşahidə olunma qabiliyyətidir.

Yalnız CDC-də qurmaq olarmı?
CDC inteqrasiya/miqrasiya üçün uyğundur, lakin domen hadisələri daha aydın məna ifadə edir və daha sabit DB dəyişikliklərini yaşayır.

Uyğunluq haqqında nə demək olar?
eventual consistency qəbul və onun altında UX/prosesləri dizayn (yeniləmə göstəriciləri, retras, kompensasiya).

Nə zaman exactly-once lazımdır?
Nadir hallarda: ikiqat qat-qat qəbuledilməz olduqda və kompensasiya edilə bilməz. Çox vaxt kifayət qədər at-least-once + idempotentlik.

Yekun

Event-Driven nüvəsi biznes faktlarının axınını sistemin etibarlı təməlinə çevirir. Aydın hadisə müqavilələri, çatdırılma nizam-intizamı və müşahidə edilebilirlik, sabitlik və təkamül sürəti verir - kövrək sinxron əlaqələr və dəyişiklik zamanı «fırtına» reqressiyası olmadan.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.