我有一个 lambda 函数,它从消息队列接收新注册用户的数据,并将相同的数据插入到两个不同的数据库中。
这两个数据库属于两个不同的微服务。第一个 - 使用 RDS postgres 的用户服务,第二个 - 管理服务,其数据库基本上是单个 DynamoDB 表。
我希望在两个数据库中实现数据插入的“全有或全无”行为 - 要么在两个数据库中插入成功,要么在其中任何一个数据库中都没有发生插入。
- 我怎样才能有一个“原子事务”来插入两个数据库,实现“全有或全无”的行为?
- 如果数据已插入到管理服务的 DynamoDB 表中,但由于某种原因未能插入到用户服务的 postgres 表中,该怎么办 - 如何“回滚”DynamoDB 中的插入?
我可以在代码级别实现这种功能,但是如果假设我在 5 个而不是 2 个不同的数据库中进行了“全部或全部”插入,那么代码会非常混乱。
我想知道在与不同的数据库交互时是否有某种标准方法可以实现类似原子事务的行为。
是的,这就是所谓的分布式事务。它需要一个额外的组件,即事务协调器,它实现两阶段提交协议。如果您不想在代码中实现它,则需要设置现有的 3d 方实现之一。