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