在真实的运营环境比如Netflix Inc.中,用什么技术来解决分布式事务?

问题描述

我正在将 Monolith spring 项目转换为 MSA 环境。 但是,我遇到了分布式事务的问题。

我知道有两种方法可以解决分布式事务:2pc commitsaga

我尝试使用Axon 框架的 Saga 模式来解决它。

然而,Axon Framework 的 Saga 特性,主要是 DDD、EventSourcing 和 CQRS,看起来并不是很好。 (我只需要 Saga 模式,因为现在无法应用 DDD 概念。)

在许多拥有完善 MSA 环境的公司(例如 Netflix)中,正在使用什么技术(不是抽象技术)来解决分布式事务?

解决方法

temporal.io 开源平台被许多公司(包括 Netflix 和 Coinbase)用来保证业务流程的执行以及适当的补偿。也直接支持 SAGA。

这是 SAGA sample 中的片段:

    Saga saga = new Saga(sagaOptions);
    try {
      String carReservationID = activities.reserveCar(name);
      saga.addCompensation(activities::cancelCar,carReservationID,name);

      String hotelReservationID = activities.bookHotel(name);
      saga.addCompensation(activities::cancelHotel,hotelReservationID,name);

      String flightReservationID = activities.bookFlight(name);
      saga.addCompensation(activities::cancelFlight,flightReservationID,name);
    } catch (ActivityFailure e) {
      saga.compensate();
      throw e;
    }