Algorithm 确保这两个项目在服务器上保存或不保存

Algorithm 确保这两个项目在服务器上保存或不保存,algorithm,distributed-transactions,Algorithm,Distributed Transactions,假设在某台机器上运行的进程p有一些数据X必须保存在另一台机器上的MySql_X中,还有一些数据Y必须保存在另一台机器上的MySql_Y中。我如何保证X和Y都已保存或都未保存?算法是什么 例如,在愚蠢的伪代码中: X_transaction = MySql_X.startTransaction(save(X)) //returns null if failure to start transaction Y_transaction = MySql_Y.startTransaction(save(

假设在某台机器上运行的进程p有一些数据X必须保存在另一台机器上的MySql_X中,还有一些数据Y必须保存在另一台机器上的MySql_Y中。我如何保证X和Y都已保存或都未保存?算法是什么

例如,在愚蠢的伪代码中:

X_transaction = MySql_X.startTransaction(save(X)) //returns null if failure to start transaction 
Y_transaction = MySql_Y.startTransaction(save(Y))

if X_transaction && Y_transaction {
  X_transaction.commit()
  // what if failure happened here?
  Y_transaction.commit()
}

这显然行不通。因为失败可能发生在上面提到的行上的P或MySql_Y中,然后只保存X。

我听到过这样描述的两阶段提交。正确,这个概念被称为。没有一种完美的算法能够抵御所有的失败;各种算法各有优缺点。