Sobes.tech
Middle — Middle+

Ako sa implementuje vzor Saga na riadenie distribuovaných transakcií v architektúre mikroslužieb?

sobes.tech AI

Odpoveď od AI

Vzor Saga sa používa na riadenie distribuovaných transakcií v architektúre mikroservisov, kde sú tradičné transakcie ACID nemožné kvôli rozdeleniu dát a služieb.

Myšlienka spočíva v tom, že veľká obchodná operácia je rozdelená na sériu lokálnych transakcií v rôznych službách. Každá lokálna transakcia je sprevádzaná kompenzačnou operáciou, ktorá zruší jej efekt v prípade chyby v akomkoľvek kroku.

Implementácia v Go je zvyčajne založená na orchestrátorovi alebo koreografii:

  • Orchestrátor: centralizovaná služba, ktorá riadi sekvenciu krokov a volá lokálne transakcie, spracováva chyby a spúšťa kompenzačné transakcie.
  • Koreografia: každá služba publikuje udalosti o vykonaní kroku, na ktoré reagujú ostatné služby, vykonávajúc svoje kroky alebo kompenzačné akcie.

Príklad zjednodušeného orchestrácie v Go:

func RunSaga() error {
    if err := ServiceA.DoStep(); err != nil {
        return err
    }
    if err := ServiceB.DoStep(); err != nil {
        ServiceA.Compensate() // vrátenie prvého kroku
        return err
    }
    if err := ServiceC.DoStep(); err != nil {
        ServiceB.Compensate()
        ServiceA.Compensate()
        return err
    }
    return nil
}

V skutočných systémoch sa používajú fronty správ (Kafka, RabbitMQ) na prenos udalostí a správu stavu sagy, ako aj ukladanie stavu sagy do databázy pre odolnosť voči chybám.