Ինչպես է իրականացնում 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) իրադարձությունների փոխանցման և սագայի վիճակի կառավարման համար, ինչպես նաև սագայի վիճակը պահվում է տվյալների բազայում՝ խափանումների դիմադրության համար: