Sobes.tech
Middle — Middle+

Mikroxidmət memarlığında paylanmış əməliyyatların idarə olunması üçün Saga nümunəsi necə həyata keçirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Saga nümunəsi, məlumatların və xidmətlərin paylanması səbəbindən ənənəvi ACID əməliyyatlarının mümkün olmadığı mikroxidmət memarlığında paylanmış əməliyyatları idarə etmək üçün istifadə olunur.

Fikir odur ki, böyük biznes əməliyyatı müxtəlif xidmətlərdə yerli əməliyyatlara bölünür. Hər yerli əməliyyat, hər hansı bir mərhələdə səhv olarsa, onun təsirini geri alan kompensasiya əməliyyatı ilə müşayiət olunur.

Go-da tətbiq ümumiyyətlə bir orkestrator və ya koreoqrafiya ətrafında qurulur:

  • Orkestrator: mərhələlərin ardıcıllığını idarə edən və yerli əməliyyatları çağıran, səhvləri idarə edən və kompensasiya əməliyyatlarını işə salan mərkəzləşdirilmiş xidmət.
  • Koreoqrafiya: hər xidmət yerli mərhələnin yerinə yetirilməsi haqqında hadisələr yayımlayır, digər xidmətlər onlara reaksiya verir və öz mərhələlərini və ya kompensasiya tədbirlərini həyata keçirir.

Go-da sadələşdirilmiş bir orkestrasiya nümunəsi:

func RunSaga() error {
    if err := ServiceA.DoStep(); err != nil {
        return err
    }
    if err := ServiceB.DoStep(); err != nil {
        ServiceA.Compensate() // ilk mərhələni geri alma
        return err
    }
    if err := ServiceC.DoStep(); err != nil {
        ServiceB.Compensate()
        ServiceA.Compensate()
        return err
    }
    return nil
}

Həqiqi sistemlərdə, hadisələrin ötürülməsi və saga vəziyyətinin idarə olunması üçün Kafka, RabbitMQ kimi mesaj növbələri istifadə olunur və saga vəziyyəti dayanıqlıq üçün verilənlər bazasında saxlanılır.