问题描述
我正在将 Monolith spring 项目转换为 MSA 环境。 但是,我遇到了分布式事务的问题。
我知道有两种方法可以解决分布式事务:2pc commit
和 saga
。
我尝试使用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;
}