📜  分布式DBMS-提交协议(1)

📅  最后修改于: 2023-12-03 15:22:37.771000             🧑  作者: Mango

分布式DBMS - 提交协议

简介

分布式DBMS是指将一个数据库分布在多个节点中运行的数据库管理系统,提交协议是指在分布式数据库系统中用于提交事务的协议。

通常情况下,分布式DBMS需要满足事务的ACID特性(原子性、一致性、隔离性和持久性),而提交协议则是保证了这些特性的实现。

提交协议的实现

提交协议一般包括以下几个步骤:

  1. 事务开始

在提交协议中,事务开始时需要向协调节点(coordinator)发起请求,协调节点会记录下该事务的信息并生成一个全局事务ID。

  1. 对事务进行操作

在进行数据库操作时,需要将生成的全局事务ID传递给被操作的节点,以便于该节点记录该事务的操作信息。

  1. 事务提交

当一个事务要提交时,需要向协调节点发送提交请求,并等待协调节点的响应。

协调节点在接收到该请求后,会向所有节点发送提交请求,并等待所有节点响应,所有节点都响应成功时,协调节点才会向提交节点响应成功的消息,从而完成提交操作。

若有节点提交失败,则协调节点会发送回滚请求以撤销该事务的所有操作。

常见提交协议
2PC(Two-Phase Commitment)

2PC是一种最常见的提交协议。其具体步骤如下:

  1. 预提交阶段(prepare phase)

所有节点收到提交请求后,计划执行,但是不立即进行操作,而是向协调器发送请求事务准备(Ready)。

  1. 决策阶段(commit phase)

当协调器收到所有节点的请求事务准备消息时,会向所有节点广播提交请求。

如果所有节点都准备好了,则所有节点开始执行操作,并向协调器发送已提交(Committed)消息,并等待协调器的响应。

如果有任何一个节点未准备好,则所有节点都回滚操作,并向协调器发送回滚(Abort)消息,并等待协调器的响应。

  1. 完成阶段(complete phase)

当协调器收到所有节点的已提交(Committed)消息时,会向所有节点广播完成(Acknowledge)消息。

当所有节点都确认收到了完成消息后,协调器会将请求事务准备成功(committed)的消息通知给所有节点,并结束整个提交过程。

3PC(Three-Phase Commitment)

在2PC协议中,如果一个节点无法参与到决策分阶段,整个协议就无法完成。3PC协议则是针对2PC缺点进行改进而来的。

与2PC相比,3PC加入了一个第一阶段(CanCommit),该阶段的目标是避免协议延迟或故障造成的长时间阻塞。

具体的协议步骤如下:

  1. 筹备阶段(prephase)

与2PC中的预提交阶段类似,该阶段中的每个参与者节点更改状态,并添加从上一个状态进入的任何消息。

  1. CanCommit 阶段

在接收到协调器发送的验证码后,参与者会评估是否可以提交事务。如果评估成功,它会提交它的并返回同意消息给协调器;否则,它会向协调器发送拒绝消息。

  1. Prepared 阶段

如果协调器确定所有参与者都可以提交事务,则它会发送请求以提交事务。参与者等待事务提交通知。

  1. DoCommit 阶段

如果参与者在准备阶段中已经准备好提交,则会提交它们的事务。

  1. DoAbort 阶段

如果请求提交的参与者在准备阶段中拒绝提交,则将撤消它们的事务。

在以上所有阶段中,参与者节点都可能失效。为了应对这种情况,3PC每个阶段都有时限,如果时限过期,则会触发相应的回滚操作。

结论

提交协议在分布式DBMS中起到了非常重要的作用。尽管会有不少协议可供选择,但2PC和3PC仍然是最常用的。开发人员需要仔细考虑各种因素,如系统容错性、性能和规模等,才能选择最适合的提交协议来满足系统需求。