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) გამოიყენება მოვლენების გადაცემისთვის და საგას მდგომარეობის მართვისთვის, ასევე საგას მდგომარეობის შენახვა ხდება მონაცემთა ბაზაში, გაუმჯობესებისთვის.