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 сияқты хабарлар кезектері пайдаланылады, сонымен қатар саганың күйі ақауларға төзімділік үшін дерекқорда сақталады.