Database design 处理多状态系统避免不一致状态

Database design 处理多状态系统避免不一致状态,database-design,transactions,atomic,distributed-system,idempotent,Database Design,Transactions,Atomic,Distributed System,Idempotent,以下是我的用例: 我有一个服务(服务1),需要在收到请求时更新多个外部服务(服务2、服务3)中某个实体的状态。我还必须更新我的本地州(服务1)。我正在尝试处理这种情况下的故障场景: 我成功地更新了外部服务2和3中的状态,但未能更新服务4中的状态 我成功地更新了外部服务2和3中的状态,我死了 我成功地更新了所有外部服务中的状态,但未能在本地系统中保持该状态 假设服务2对产品进行退款,服务3将发票标记为已付款。现在,如果我成功地发出退款(服务2),但没有将发票标记为已付款(服务3),我将在财务对账期

以下是我的用例:

我有一个服务(服务1),需要在收到请求时更新多个外部服务(服务2、服务3)中某个实体的状态。我还必须更新我的本地州(服务1)。我正在尝试处理这种情况下的故障场景:

  • 我成功地更新了外部服务2和3中的状态,但未能更新服务4中的状态
  • 我成功地更新了外部服务2和3中的状态,我死了
  • 我成功地更新了所有外部服务中的状态,但未能在本地系统中保持该状态 假设服务2对产品进行退款,服务3将发票标记为已付款。现在,如果我成功地发出退款(服务2),但没有将发票标记为已付款(服务3),我将在财务对账期间产生严重的业务影响


    在所有这些情况下,是否有适当的方法来处理失败的场景

    正确的方法是使用分布式事务和两阶段提交,例如应用XA协议