Sobes.tech
Junior

Պատմիր ինձ Transactional Outbox դիզայնի մասին — ի՞նչ է դա և ինչու է օգտագործվում:

sobes.tech AI

Պատասխան AI-ից

Transactional Outbox — դա մի ձևաչափ է, որը օգնում է ապահովել տվյալների գրառման և հաղորդագրությունների ուղարկման ատոմիկությունը բաշխված համակարգերում:

Պրոբլեմ: եթե لديك գործողություն, որը փոփոխում է տվյալները բազայում և պետք է ուղարկի իրադարձություն (օրինակ, հաղորդագրությունների հերթին), ապա այդ երկու գործողությունները՝ տվյալների գրառումը և հաղորդագրության ուղարկումը, սովորաբար չեն լինում ատոմիկ: Եթե բազան թարմացվի, բայց հաղորդագրությունը չուղարկվի (կամ հակառակը), համակարգը կդառնա անհամապատասխան վիճակում:

Ելք: տվյալների փոփոխության ժամանակ, ոչ միայն հիմնական տեղեկությունը է գրանցվում, այլ նաև հատուկ "outbox" աղյուսակը, որը պարունակում է ուղարկվելիք իրադարձությունները: Հաջողակ հանձնառությունից հետո, առանձին գործընթացը կարդում է այդ աղյուսակը և ուղարկում հաղորդագրությունները հերթին: Այսպիսով, երաշխավորվում է, որ իրադարձությունը չի կորցվի և չի ուղարկվի կրկնակի:

Օրինակ:

// Հանձնառության մեջ
tx.Exec("INSERT INTO orders ...")
tx.Exec("INSERT INTO outbox (event_type, payload) VALUES (?, ?)")
// Հանձնառության հետո, առանձին աշխատողը կարդում է outbox-ը և հրապարակում իրադարձությունները