面试题答案
一键面试两阶段提交保障事务原子性原理
在 MongoDB 中,两阶段提交通过协调各个参与节点,确保事务要么所有操作都成功提交,要么所有操作都回滚,以此保障事务原子性。如果在任何一个步骤中出现错误,整个事务将回滚,避免部分成功导致的数据不一致。
主要步骤
- 准备阶段(第一阶段):
- 事务发起者(通常是应用程序通过驱动与 MongoDB 交互)向所有参与事务的节点(副本集成员或分片节点等)发送准备请求。
- 每个节点开始执行事务中的操作,比如写入文档等。但在这个阶段,操作不会真正提交到磁盘持久化存储,而是在内存中完成并记录操作日志等。
- 节点完成操作后,向事务协调者(通常是主节点)回复准备成功或失败。如果任何一个节点回复失败,事务协调者将发起回滚流程。
- 提交阶段(第二阶段):
- 当事务协调者收到所有参与节点的准备成功回复后,向所有节点发送提交请求。
- 节点接收到提交请求后,将内存中的操作持久化到磁盘,完成事务提交。
主要组件
- 事务协调者:一般是副本集的主节点或者分片集群中的某个特定协调节点。它负责发起事务流程,协调各个参与节点,收集准备阶段的反馈,并决定是否进入提交阶段或发起回滚。
- 参与节点:包括副本集成员或者分片节点等,执行事务中的具体操作,并根据协调者的指令进行准备、提交或回滚操作。