Sobes.tech
Junior

Transactional Outbox паттерні туралы айтыңыз — бұл не және ол не үшін қолданылады?

sobes.tech AI

AI-дан жауап

Транзакциялық Outbox — бұл паттерн, ол бөлінген жүйелерде деректер жазу мен хабарламаларды жіберуді атомарлы етуге көмектеседі.

Мәселе: егер сізде деректерді өзгерту және оқиға (мысалы, хабарлама кезегіне) жіберу операциялары болса, әдетте бұл екі операция — дерекқорға жазу және хабарламаны жіберу — атомарлы емес. Егер дерекқор жаңартылса, ал хабарлама жіберілмесе (немесе керісінше), жүйе консистенсіз күйге түседі.

Шешім: деректерді транзакция шеңберінде өзгерткен кезде, негізгі ақпаратпен бірге, жіберілуі керек оқиғалармен арнайы "outbox" кестесі де жазылады. Транзакция сәтті аяқталғаннан кейін, бөлек процесс осы кестені оқиды және хабарламаларды кезекке жібереді. Осылайша, оқиға жоғалмайды және екі рет жіберілмейді кепілденеді.

Мысал:

// Транзакцияда
tx.Exec("INSERT INTO orders ...")
tx.Exec("INSERT INTO outbox (event_type, payload) VALUES (?, ?)")
// Сәтті аяқталғаннан кейін, бөлек жұмысшы outbox-ты оқиды және оқиғаларды жариялайды