Ishga tayyor · Event, outbox va cache consistency
Daraja: Ilg'or
Asinxron oqimda event yo‘qolishi, duplicate va eskirgan cache bilan ishlash.
Tushuntirish
## Ishdagi vazifa DB commit va broker publish orasidagi uzilishni transactional outbox bilan yopish: biznes yozuvi va outbox event bir transactionda saqlanadi, worker keyin publish qiladi. Delivery odatda at-least-once bo‘lgani uchun consumer idempotent bo‘ladi. Event nomi sodir bo‘lgan fakt, schema esa versiyalanadigan contractdir.
## Cache Cache-aside o‘qishda miss bo‘lsa DBdan olib yozadi; update paytida cache invalidation tartibi belgilanadi. TTL yagona consistency yechimi emas. Cache key tenant/user doirasini o‘z ichiga oladi, stampede uchun locking yoki request coalescing ko‘riladi. Redis ishlatishdan oldin real latency va load o‘lchanadi.
## Ishga tayyor mezon Crash, duplicate va out-of-order event test senariysida bor.
Kod misoli
@Transactional
void confirm(Order order) {
orders.save(order.confirm());
outbox.save(Event.of("OrderConfirmed", order.id()));
}
// Consumer: UNIQUE(event_id) bilan qayta ishlashni bir martalik qiling.
Keng tarqalgan xatolar
- DB commitdan keyin bevosita publish qilib, shu ikki amal orasidagi crashni e’tiborsiz qoldirish.
Mashqlar
- Outbox jadvali va retry workerini loyihalang.
- Profile cache uchun key, TTL, invalidation va stale-data siyosatini yozing.
Teglar: events, cache, ishga-tayyor, career-06