Sobes.tech
Middle — Middle+

Mikroservis arxitekturasida taqsimlangan tranzaktsiyalarni boshqarish uchun Saga naqshini qanday amalga oshiriladi?

sobes.tech AI

AIdan javob

Saga naqshasi mikrosxemalar arxitekturasi uchun tarqalgan tranzaktsiyalarni boshqarish uchun ishlatiladi, bunda an'anaviy ACID tranzaktsiyalar imkoniyatsiz bo'lib, ma'lumotlar va xizmatlarning tarqalganligi sababli.

G'oya shundaki, katta biznes operatsiyasi turli xizmatlarda mahalliy tranzaktsiyalar ketma-ketligiga bo'linadi. Har bir mahalliy tranzaksiya, har qanday bosqichda xato bo'lsa, uning ta'sirini bekor qiladigan kompensatsiya operatsiyasi bilan birga keladi.

Go tilida amalga oshirish odatda orkestrator yoki koreografiya atrofida quriladi:

  • Orkestrator: markaziy xizmat bo'lib, bosqichlar ketma-ketligini boshqaradi va mahalliy tranzaktsiyalarni chaqiradi, xatolarni boshqaradi va kompensatsiya tranzaktsiyalarini ishga tushiradi.
  • Koreografiya: har bir xizmat bosqich bajarilishi haqida voqealarni chop etadi, boshqa xizmatlar ularga javob beradi, o'z bosqichlari yoki kompensatsiya harakatlarini bajaradi.

Go tilida soddalashtirilgan orkestratsiya misoli:

func RunSaga() error {
    if err := ServiceA.DoStep(); err != nil {
        return err
    }
    if err := ServiceB.DoStep(); err != nil {
        ServiceA.Compensate() // birinchi bosqichni bekor qilish
        return err
    }
    if err := ServiceC.DoStep(); err != nil {
        ServiceB.Compensate()
        ServiceA.Compensate()
        return err
    }
    return nil
}

Haqiqiy tizimlarda, voqealarni uzatish va saga holatini boshqarish uchun Kafka, RabbitMQ kabi xabar navbatlari ishlatiladi va saga holati barqarorligi uchun ma'lumotlar bazasida saqlanadi.