Պատմիր ինձ Transactional Outbox դիզայնի մասին — ի՞նչ է դա և ինչու է օգտագործվում:
sobes.tech AI
Պատասխան AI-ից
Transactional Outbox — դա մի ձևաչափ է, որը օգնում է ապահովել տվյալների գրառման և հաղորդագրությունների ուղարկման ատոմիկությունը բաշխված համակարգերում:
Պրոբլեմ: եթե لديك գործողություն, որը փոփոխում է տվյալները բազայում և պետք է ուղարկի իրադարձություն (օրինակ, հաղորդագրությունների հերթին), ապա այդ երկու գործողությունները՝ տվյալների գրառումը և հաղորդագրության ուղարկումը, սովորաբար չեն լինում ատոմիկ: Եթե բազան թարմացվի, բայց հաղորդագրությունը չուղարկվի (կամ հակառակը), համակարգը կդառնա անհամապատասխան վիճակում:
Ելք: տվյալների փոփոխության ժամանակ, ոչ միայն հիմնական տեղեկությունը է գրանցվում, այլ նաև հատուկ "outbox" աղյուսակը, որը պարունակում է ուղարկվելիք իրադարձությունները: Հաջողակ հանձնառությունից հետո, առանձին գործընթացը կարդում է այդ աղյուսակը և ուղարկում հաղորդագրությունները հերթին: Այսպիսով, երաշխավորվում է, որ իրադարձությունը չի կորցվի և չի ուղարկվի կրկնակի:
Օրինակ:
// Հանձնառության մեջ
tx.Exec("INSERT INTO orders ...")
tx.Exec("INSERT INTO outbox (event_type, payload) VALUES (?, ?)")
// Հանձնառության հետո, առանձին աշխատողը կարդում է outbox-ը և հրապարակում իրադարձությունները