[3]
2.1 改进协议的思想来源
与2PC 相比,3PC 增加了一个预提交的缓冲状态。故障发生时,参与者可以有更多地选择的余地,如果是参与者本身发生了故障,就重启此结点事务,并向其它结点发送查询消息,来确认是否可以提交;如果发现所有结点都没有收到预提交命令,那么就考虑协调者发生了故障,此时需要参与者通过一定的算法选出新的协调者来接管事务处理工作。在3PC协议中,如果可以使得占多数结点的参与者不关心协调者是否存活,也就是说协调者的死亡与新协调者的产生对于参与者是透明的,那么整个系统的体系结构将更为清晰,效率也更高。
在分布式数据库中经常采用适当增加数据的冗余度来提高系统的可靠性、可用性和改善系统的性能,通过在多个站点上存储数据的副本,使得当某一站点上的数据破坏时,系统仍可以正常运行。另外,系统还可以选择数据用户最近的数据副本进行操作,减少通信代价。
[4]协调者在3PC中地位非常特殊而且非常重要,通过为其增加冗余来实现新的3PC协议,当前协调者被确认发生故障后,从其副本里选出合适的候选协调者,担任当前协调者的角色,已完成协调工作。但是,在新协议中,引入了超时技术和协调者之间在间隔时间内发消息询问的技术。
2.2 改进协议的思想描述
改进算法以传统3PC协议为基础,同时增加了冗余的协调者,但是对于参与者来说,冗余的协调者并不可见。正常情况下:当改进算法开始时,存在一个主协调者,该协调者负责协调参与者,其功能和传统的3PC协议中的协调者相同;同时,系统中存在一个从协调者队列,该协调者队列作为主协调者的后备,监听发送给主协调者的信息(因此从协调者也可以称作监听协调者),并执行与主协调者同样的动作,但是,该协调者并不向参与者发送各种命令,亦即,从协调者除了不发命令到参与者,其他动作同主协调者相同。因此,在任意时刻,从协调者和主协调者的状态完全一致。对于参与者来说,它们并不能感知主、从协调者,永远相信协调者不会死亡。从协调者通过在特定短时间间隔内和主协调者通信来感知主协调者是否存活,这个时间间隔应该远远小于传统3PC协议中的超时。从协调者从主协调者处得到回执消息,从而知道主协调者的存活。如果从协调者间隔一定时间(比如3秒钟)没有收到主协调者的消息,则认为主协调者失败。
[5]
当从协调者发现主协调者失败时,提升自己为主协调者,并接管已经失败的主协调者的工作,向参与者发送命令。该接管过程是无缝的。
对于参与者来说,它并不需要关心当前的协调者是原来的主协调者,还是主协调者失败后由从协调者提升而来的。也就是说,主协调者的更替对其来说是透明的,它可以把所有的协调者看成一个整体,参与者只需永远信任协调者不会失败。
图2.1 改进3PC协议系统结构图
图2.1为引入从协调者后的系统结构图,其中,虚线表示监听协调者对于参与者来说是透明的,在图中,监听协调者1作为协调者的冗余,监听协调者对列为协调者的冗余队列,队列中冗余副本按照站点标记作为优先级存入队列,当协调者死亡后,由监听协调者1替代协调者角色,当监听协调者1也死亡时,监听协调者队列再输出新的协调者,负责主协调者的工作。
改进3PC协议中事务执行过程对于参与者根本不知道监听协调者的存在,对于监听协调者来说,对日志的处理和协调者保持一致,唯一的差别就是不向参与者发送消息,从而减少了通讯量,监听协调者与主协调者要以一定的频率交互信息,从而保证可以及检测到主协调者的状态,一旦死亡,监听协调者就马上取代主协调者进行协调工作,从而提高了系统的效率。