Sobes.tech
Middle — Middle+

Ինչպես է իրականացնում Saga դիզայնը՝ բաշխված գործարքների կառավարումը միկրոսերվիսային ճարտարապետությունում?

sobes.tech AI

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

Սագա նմուշը օգտագործվում է բաշխված գործարքների կառավարում համար միկրոսերվիսային ճարտարապետությունում, որտեղ ավանդական ACID գործարքները հնարավոր չեն տվյալների և ծառայությունների բաշխվածության պատճառով:

Իդեան այն է, որ մեծ բիզնես գործողությունը բաժանվում է տարբեր ծառայություններում տեղական գործարքների շարքի։ Յուրաքանչյուր տեղական գործարքը ուղեկցվում է փոխհատուցող գործողությամբ, որը վերացնում է նրա ազդեցությունը ցանկացած քայլում սխալի դեպքում:

Go-ում իրականացմանը սովորաբար կառուցվում է օրգանիզատոր կամ քորեոգրաֆիա շուրջ:

  • Օրգանիզատոր՝ կենտրոնական ծառայություն, որը կառավարում է քայլերի հաջորդականությունը և կանչում է տեղական գործարքները, կառավարում սխալները և գործարկում փոխհատուցող գործարքները:
  • Քորեոգրաֆիա՝ յուրաքանչյուր ծառայություն հրապարակում է իրադարձություններ քայլի կատարման մասին, մյուս ծառայությունները արձագանքում են դրանց, կատարելով իրենց քայլերը կամ փոխհատուցող գործողությունները:

Go-ում պարզեցված օրգանիզացիայի օրինակ:

func RunSaga() error {
    if err := ServiceA.DoStep(); err != nil {
        return err
    }
    if err := ServiceB.DoStep(); err != nil {
        ServiceA.Compensate() // առաջին քայլի վերականգնում
        return err
    }
    if err := ServiceC.DoStep(); err != nil {
        ServiceB.Compensate()
        ServiceA.Compensate()
        return err
    }
    return nil
}

Իրական համակարգերում օգտագործվում են հաղորդագրությունների հերթեր (Kafka, RabbitMQ) իրադարձությունների փոխանցման և սագայի վիճակի կառավարման համար, ինչպես նաև սագայի վիճակը պահվում է տվյալների բազայում՝ խափանումների դիմադրության համար: