Sobes.tech
Middle — Middle+

Kaip įgyvendinti Saga modelį, skirtą paskirstytoms operacijoms valdyti mikroservisų architektūroje?

sobes.tech AI

Atsakymas iš AI

Saga šablonas naudojamas paskirstytoms transakcijoms valdyti mikroservisų architektūroje, kur tradicinės ACID transakcijos yra neįmanomos dėl duomenų ir paslaugų paskirstymo.

Idėja ta, kad didelė verslo operacija yra padalinta į seriją vietinių transakcijų skirtinguose paslaugose. Kiekviena vietinė transakcija yra lydima kompensacinės operacijos, kuri atšaukia jos efektą bet kuriame žingsnyje, jei įvyksta klaida.

Go įgyvendinimas dažniausiai yra sukurtas aplink orkestratorių arba choreografiją:

  • Orkestratorius: centralizuota paslauga, valdanti žingsnių seką ir kviečianti vietines transakcijas, tvarkanti klaidas ir paleidžianti kompensacines transakcijas.
  • Choreografija: kiekviena paslauga skelbia įvykius apie žingsnio vykdymą, kitos paslaugos reaguoja į juos, vykdydamos savo žingsnius arba kompensacines veiklas.

Pavyzdys supaprastintos orkestracijos Go:

func RunSaga() error {
    if err := ServiceA.DoStep(); err != nil {
        return err
    }
    if err := ServiceB.DoStep(); err != nil {
        ServiceA.Compensate() // pirmojo žingsnio atšaukimas
        return err
    }
    if err := ServiceC.DoStep(); err != nil {
        ServiceB.Compensate()
        ServiceA.Compensate()
        return err
    }
    return nil
}

Realiuose sistemose naudojamos žinučių eilės (Kafka, RabbitMQ) įvykių perdavimui ir sagos būsenos valdymui, taip pat sagos būsenos saugojimas duomenų bazėje atsparumui gedimams.