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