Bosh sahifa Wiki Exactly-once

Exactly-once

Exactly-once — ma’lum hisoblash yoki xabar qayta ishlash chegarasida har bir mantiqiy yozuvning ta’siri aynan bir marta natijaga kiritilishini ifodalovchi semantika. Bu atama xabar tarmoq orqali faqat bir nusxada yuradi degani emas: uzatish va bajarish qayta takrorlanishi mumkin, ammo tizim dublikat ta’sirini yo‘qotib, kuzatiladigan natijani bir martalik qiladi.

Yetkazish va qayta ishlash farqi

Tarmoq nosozligida yuboruvchi javobni olmasligi mumkin. Qayta urinish xabarni ikki marta yetkazadi; qayta urinmaslik esa xabarni yo‘qotishi mumkin. Shu sababli sof transport darajasida “faqat bir marta va albatta yetkazish” noaniq nosozliklar ostida murakkab. Exactly-once odatda broker holati, iste’molchi progressi va natija yozuvini muvofiqlashtirish orqali amalga oshiriladi.

Masalan, stream processor kirish partitionidagi offsetni yangilashi va hisoblangan natijani chiqarishi kerak. Natija yozilib, offset saqlanmasdan jarayon to‘xtasa, qayta ishga tushganda yozuv takror ishlanadi. Offset oldin saqlansa, natija yozilmay qolishi mumkin. Ikkala o‘zgarish atomik tranzaksiya yoki qayta tiklanadigan checkpoint bilan bog‘lanadi.

Amalga oshirish usullari

  • tranzaksion producer bir nechta yozuv va iste’mol qilingan offsetni bitta commitga birlashtiradi;
  • stateful stream engine holat snapshoti bilan manba pozitsiyasini birga checkpoint qiladi;
  • sink unique event ID bo‘yicha idempotent yozish yoki upsert bajaradi;
  • transactional outbox domen o‘zgarishi va yuboriladigan hodisani bir bazada atomik saqlaydi;
  • deduplication jadvali qayta ishlangan identifikatorlarni belgilangan muddat yuritadi.

Har usulning chegarasi bor. Broker ichidagi tranzaksiya tashqi elektron pochta, karta protsessori yoki oddiy HTTP xizmatini avtomatik qo‘sha olmaydi. Tashqi yon ta’sir uchun idempotency key, kompensatsiya yoki shu tizim qo‘llaydigan alohida tranzaksiya mexanizmi kerak.

Nosozlik va qayta tiklanish

Exactly-once semantikasi crash, qayta ishga tushish va xabar qayta berilishida tekshiriladi. Coordinator yoki transaction log qaysi commit yakunlanganini saqlaydi. Oraliq natijalar ko‘rinmas holatda qolib, commitdan keyin atomik e’lon qilinishi mumkin. Uzoq tranzaksiyalar resursni ushlab turadi va timeoutga moyil bo‘lgani uchun batch yoki checkpoint chegarasi muvozanatlanadi.

State tashqi saqlashga eksport qilinsa, snapshot bilan kirish offseti mos bo‘lishi shart. Eski snapshot va yangi offset ayrim hodisani yo‘qotadi; yangi holat va eski offset esa uni qayta hisoblaydi. Deterministik qayta hisoblash va idempotent sink bu xavfni kamaytiradi.

Termin ishlatilishidagi aniqlik

Mahsulot hujjatidagi exactly-once da’vosi qaysi manba, processor, sink va nosozlik modeliga tegishli ekanini ko‘rsatishi kerak. Bitta broker klasteri ichidagi kafolat regionlararo yoki uchinchi tomon tizimigacha cho‘zilmasligi mumkin. Retention tugab, deduplication identifikatori unutilgach kelgan eski nusxa ham yangi deb qabul qilinishi ehtimol.

Exactly-once har doim eng tez yoki zarur model emas. Idempotent amallar uchun at-least-once sodda va yetarli bo‘lishi mumkin. Muhim jihat nom emas, kuzatiladigan biznes natijasining qaysi chegarada bir martalik ekanini aniq belgilashdir.

Xarajat va tekshiruv

Tranzaksiya koordinatsiyasi qo‘shimcha jurnal yozuvi, lock, tarmoq almashinuvi va tiklanish metama’lumotini talab qiladi. Bu latency va throughputga ta’sir qiladi. Sinov faqat normal oqimni emas, commitdan oldin va keyin processni majburan to‘xtatish, broker leaderini almashtirish hamda javobni yo‘qotishni qamrab oladi. Yakuniy sinkdagi noyob biznes natijalar soni kirishdagi mantiqiy hodisalar bilan solishtiriladi.

Bog‘liq tushunchalar

At-least-once delivery, Transaction, Checkpoint, Offset, Deduplication, Transactional outbox