Sobes.tech
Middle — Middle+

Mikroservis mimarisi içinde dağıtılmış işlemleri yönetmek için Saga deseni nasıl uygulanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Saga deseni, geleneksel ACID işlemlerinin veri ve hizmetlerin dağıtılmışlığı nedeniyle mümkün olmadığı mikroservis mimarisinde dağıtılmış işlemleri yönetmek için kullanılır.

Fikir, büyük bir iş operasyonunun farklı hizmetlerdeki bir dizi yerel işlemi bölmesidir. Her yerel işlem, herhangi bir adımda hata durumunda etkisini geri alan bir telafi işlemi ile birlikte gelir.

Go'da uygulama genellikle bir orkestratör veya koreografi etrafında kurulur:

  • Orkestratör: adımların sırasını yöneten, yerel işlemleri çağıran, hataları yöneten ve telafi işlemlerini yürüten merkezi bir hizmet.
  • Koreografi: her hizmet, bir adımın tamamlanmasıyla ilgili olaylar yayınlar, diğer hizmetler bunlara tepki verir, kendi adımlarını veya telafi eylemlerini gerçekleştirir.

Go'da basitleştirilmiş bir orkestrasyon örneği:

func RunSaga() error {
    if err := ServiceA.DoStep(); err != nil {
        return err
    }
    if err := ServiceB.DoStep(); err != nil {
        ServiceA.Compensate() // ilk adımı geri al
        return err
    }
    if err := ServiceC.DoStep(); err != nil {
        ServiceB.Compensate()
        ServiceA.Compensate()
        return err
    }
    return nil
}

Gerçek sistemlerde, olayların iletimi ve saga durumunun yönetimi için Kafka, RabbitMQ gibi mesaj kuyrukları kullanılır ve saga durumu dayanıklılık için bir veritabanında saklanır.