实时嵌入式数据库系统高可用性策略研究(2)
时间:2013-12-11 15:27 文章来源:http://www.lunwenbuluo.com 作者:陈雪帆 点击次数:
初次数据复制的过程见图2。主数据库实例首先发起一个事务T1,专门用于管理数据复制。同时,备份数据库实例也发起一个事务T2用于管理该过程,并等待主数据库发送数据。T1开始后,主数据库开始读取现有的数据,并向备份数据库实例发送。备份数据库实例收到主数据库实例发来的数据,写入自己管理的数据库中。主数据库的数据发送完毕,开始等待备份数据库实例对数据复制的确认。当备份数据库实例数据库写入完毕,提交事务T2,若T2提交成功,则向主数据库实例发送对数据复制的确认。主数据库实例收到确认信息,提交事务T1,此时,数据库实例间的初次数据复制完成。
在上述过程中,主数据库实例的事务T1要等到备份数据库实例的事务T2提交成功后才进行提交,确保了数据从主数据库实例正确地复制到了备份数据库实例。
主、备数据库实例在初次数据复制过后,主数据库实例继续进行正常的事务操作。为了继续保持主、备数据库实例的一致性,还要不断地进行事务复制。事务复制有同步事务复制和异步事务复制两种方式。同步复制的过程见图2,其过程与初次数据复制基本相同:主数据库实例收到用户的事务请求T后,在执行的同时,将T通过通信的方式复制到各个备份数据库实例,然后等待所有的备份数据库实例执行T并返回执行成功,当所有的备份实例都执行T成功后,主数据库实例才向用户返回T执行成功。
同步事务复制可以完全保证主、备数据库实例间的数据一致。对用户而言,由于要进行数据传输和等待备份数据实例执行完毕,事务处理速度会受到影响,但对于影响整个系统成败的关键任务而言,仍然是十分必要的。并且,对于非关键任务而言,还可以采用异步事务复制。与同步事务复制相比,异步事务复制中主数据库实例的事务T不需要等待所有备份数据库实例执行T成功即可进行本地提交,备份数据实例也各自提交事务T。异步事务复制不能够保证主、备实例完全一致,但可以提高性能,减少资源消耗,对于非关键任务也是可以接受的。
2.2实时性
高可用性RTEDB数据库复制过程的实时性也非常关键。为了保证实时性,实时嵌入式系统中的所有关键任务都有严格的截止期限制,在高可用性RTEDB中,主数据库实例和备份数据库实例的本地事务处理的实时性由RTEDB的其它功能模块保证。对于高可用性策略而言,需要考虑的是如何在主数据库实例和备份数据库实例之间通信延迟不可预测的情况下实现两者之间数据交换和处理过程执行时间的确定性。
为此,RTEDB的高可用性策略需要加入相应的超时机制对整个数据复制过程进行控制。该超时机制包括3个基本的超时设置:
(1)初次同步超时时间INITIAL_TIMEOUT。INITIAL_TIMEOUT用于控制整个数据库实例初次数据复制过程,若初次数据复制耗时超过INITIAL_TIMEOUT,则主数据库实例认为该备份数据库实例无效,停止与该备份数据库实例进行数据复制,同时向数据库报告初次数据复制超时。
(2)事务复制超时时间REPLICA_TIMEOUT。REPLICA_TIMEOUT用于控制同步事务复制过程中主数据库实例和备份数据库实例间的事务复制。若主数据库实例发送事务T或者备份数据库实例接收T这一过程的时延超过了REPLICA_TIMEOUT的限制,对于前者,主数据库实例丢弃并回滚事务T;对于后者,备份数据库实例丢弃事务T并通知主数据库实例,主数据库实例回滚事务T。最后由主数据库实例通知用户事务T执行超时。
(3)同步等待超时时间SYNC_TIMEOUT。SYNC_TIMEOUT用于控制主数据库实例等待备份数据库实例执行从主数据库实例收到的事务T的信息反馈时间。主数据库实例不会一直等待备份数据库实例对事务T的执行,若超过了SYNC_TIMEOUT所规定的时间,即使备份数据库实例执行事务T成功,主数据库实例同样会认为事务T在备份数据库实例执行失败,回滚事务T的操作,通知用户事务T执行超时。
一旦在主数据库实例与某个备份数据库实例通信过程中触发了上述3种超时设置中的一种,主数据库实例可以做出相应的处理,既可以向用户报告,也可以认为该备份数据库实例已失效,并将其排除在整个高可用性框架之外。这样,整个数据库复制过程的各个操作都有严格的截止期限制,从而可预测其执行时间。
需要注意的是,上述超时机制只适用于同步事务复制方式,本文所设计的高可用性策略对于异步事务复制方式不提供实时性保证。
2.3主、备数据库实例切换
主、备数据库实例通过心跳机制进行定期联络,一旦备份数据库与主数据库实例的联络超时,备份数据库便认为主数据库实例已经失效。若只有一个备份数据库实例,该实例自动成为新的主数据库实例,并向主数据库实例发送一个信号,以"杀死"主数据库实例,即使主数据库实例实际上还在运行,也将被强行停止。
当有多个备份数据库实例时,则需要一种竞争机制来决定选择哪个备份实例作为新的主实例。在本文所设计的高可用性策略中,备份数据库实例的竞争通过比较各个备份数据库实例的事务序列号来进行,事务序列号是已提交的事务标识,由主数据库实例创建和记录。新提交的事务序列号一定大于之前提交的事务序列号,并由主数据库实例在事务复制时发送到各个备份数据库实例。当有多个备份数据库实例竞争成为主数据库实例时,数据库会选择当前事务序列号最大的,即数据最新的备份数据库实例为主数据库实例。若多个备份实例的事务序列号均为最大值,则在其中随机选择一个,然后"杀死"主数据库实例。
2.4可移植性
RTEDB作为嵌入式软件,应当具有较强的可移植性,以适应不同的软硬件平台。由于高可用性RTEDB需要主、备数据库实例间进行可靠的通信,因此,高可用性策略应当具有较好的针对通信方式的可移植性。
高可用性通信的移植性可通过通信抽象层实现,通信抽象层介于高可用性功能与底层通信功能之间,屏蔽了底层通信的细节,对上层而言,其功能及相关接口固定,RTEDB调用通信抽象层即可实现数据的发送、接收等功能。对于底层通信而言,则需要依据通信抽象层的要求以及实际使用的通信方式,进行相应的移植工作。这样,对于当底层通信机制发生变化时,只需要修改底层通信功能的实现方式,而不需要对高可用性功能本身进行开发工作。
- 论文部落提供核心期刊、国家级期刊、省级期刊、SCI期刊和EI期刊等咨询服务。
- 论文部落拥有一支经验丰富、高端专业的编辑团队,可帮助您指导各领域学术文章,您只需提出详细的论文写作要求和相关资料。
-
- 论文投稿客服QQ:
2863358778、
2316118108
-
- 论文投稿电话:15380085870
-
- 论文投稿邮箱:lunwenbuluo@126.com