一种ha访问自适应的方法

文档序号:6636525阅读:455来源:国知局
一种ha访问自适应的方法
【专利摘要】本发明提供一种HA访问自适应的方法,该方法让使用者调用同步接口或异步接口访问节点,返回节点id;根据返回节点id,访问节点id的设备,若成功,则用该设备提供服务;否则将节点id和访问错误码作为形参传入反馈接口。这样让使用者访问简单,降低网络负担。
【专利说明】一种HA访问自适应的方法

【技术领域】
[0001]本发明涉及一种访问节点技术,具体涉及一种HA访问自适应的方法。

【背景技术】
[0002]在分布式系统中,互备方式是一种常用的高可用机制,即主设备提供服务,其他节点作为热备节点随时准备接管主设备。这是由于一方面分布式系统涉及到的节点比较多,故障率本身就比单节点高,另外一点分布式系统一般期望获得更高的可用性。这种互备方式中最常用的是主从互备,即当主设备发生故障时,从设备接管主设备工作继续提供服务。这种方式对访问者来说是一个挑战,因为同一时刻即有可能是主设备在提供服务,也有可能是从设备在提供服务。
[0003]一种比较简单的实现方法是使用者采用轮询的方式,即不管当前宄竟是哪个设备在提供服务,都从头开始进行尝试,直到碰到正在提供服务的节点。
[0004]轮询方式实现逻辑简单,易于理解,但是其弊端也是显而易见的。首先,如果使用者直接轮询访问,那每个使用者都要做类似工作,代码冗余度会非常高;其次如果对轮询进行封装,为了做到灵活、通用,每个使用者可能需要注册比较多的函数以达到私有目的;这对使用者来说都是一种负担,很不友好。此外也是最重要的缺点,由于轮询,增加了访问延迟,同时由于无效消息的发送,大大加重了网络负担。


【发明内容】

[0005]为了克服上述现有技术的不足,本发明提供一种HA访问自适应的方法,该方法对外提供一套接口,具体包括获取需要访问的节点id的同步接口和异步接口,以及反馈接口,使用者只需通过三个接口即可达到HA访问的自适应。
[0006]为了实现上述发明目的,本发明采取如下技术方案:
[0007]一种HA访问自适应的方法,该方法具体步骤如下:
[0008](I)使用者调用同步接口或异步接口访问节点,返回节点id ;
[0009](2)使用者根据返回节点id,若访问节点id的设备成功,则用该设备提供服务;否则将节点id和访问错误码作为形参传入反馈接口。
[0010]本发明提供的优选技术方案中,所述同步接口访问节点的具体步骤如下:
[0011]A、调用同步接口获取访问主节点id ;
[0012]B、根据主节点id查找HA访问结构并加读锁;
[0013]C、若HA访问结构的全局状态为OK,则找到状态为ACTIVE的节点并返回节点id ;
否则在信号量上睡眠,等待结构被修复线程修复;
[0014]D、修复完成被唤醒后继续查看全局状态并查找ACTIVE节点,再返回节点id。
[0015]本发明提供的第二优选技术方案中,所述异步接口访问节点的具体步骤如下:
[0016]A、调用异步接口获取访问节点id ;
[0017]B、根据主节点id查找HA访问结构并加读锁;
[0018]C、若HA访问结构的全局状态为OK,则获取ACTIVE节点并返回节点id ;否则分配异步wait结构并设置回调函数,将wait结构挂入HA访问结构的wait结构队列并返回特定错误码,修复线程进行修复;
[0019]D、使用者看到特定错误码则继续处理其他任务;
[0020]E、HA结构修复完成后调用回调函数重新投递任务,使用者则可以继续处理该任务。
[0021 ] 本发明提供的第三优选技术方案中,所述反馈接口的执行方式,具体步骤如下:
[0022]A、反馈接口接收节点id和访问错误码;
[0023]B、判断访问错误码是否为系统定义的特定错误码,若是则将全局状态置为RECOVERY,挂入修复链表list_ha,触发修复线程进行修复;
[0024]C、修复完成后,再重新访问节点id的设备。
[0025]本发明提供的第四优选技术方案中,所述修复线程修复全局状态为RECOVERY状态,修复过程即向组内所有节点发送消息,并将应答接管主节点工作的节点设置为ACTIVE状态,其余设置为STANDBY状态,并修改全局状态为0K,唤醒等待队列的同步或异步等待者。
[0026]本发明提供的第五优选技术方案中,该方法的主要数据结构包括:读写锁rwlock、全局状态gstate、所有主从节点id、节点状态nodestates、修复链表list_ha和等待队列Waitq0
[0027]本发明提供的第六优选技术方案中,所述全局状态包括OK和RECOVERY两种状态,OK表示可用,RECOVERY表示正在修复;所述节点状态包括ACTVIE和STANDBY两种状态,当全局状态为OK时,有且只有一个节点状态为ACTIVE,其余皆为STANDBY状态。
[0028]与现有技术相比,本发明的有益效果在于:
[0029]本发明只需要通过三个接口即可达到HA访问的自适应,代码冗余度大大降低,不需要注册较多的函数来达到私有目的
[0030]具有很好的扩展性,由于使用者不用了解自动定位细节,所以自适应方法内部进行调整不影响外网使用者。
[0031]降低使用者的访问延迟,同时没有了不必要的消息发送,大大降低了网络负担。

【专利附图】

【附图说明】
[0032]图1是同步接口访问节点的流程图
[0033]图2是异步接口访问节点的流程图

【具体实施方式】
[0034]下面结合附图对本发明作进一步详细说明。
[0035]系统内有A、B两个节点互为热备(即其中一个出现故障,另外一个代替它继续提供服务),使用者访问A节点,使用者调用HA的同步接口或异步接口,获取访问节点id。
[0036]使用者根据访问节点id,访问节点id的设备(让它提供A的服务),如果访问出错,节点id直接返回拒绝服务或者网络错误,错误码为ERR,使用者需要调用HA的反馈接口将ERR传入,告诉HA需要A提供服务的访问出错,错误码为ERR。
[0037]HA模块会根据错误码(只有网络错及拒绝服务错误才会将A加入探测列表)判断是否需要对A重新探测,如果需要重新探测,则利用挂载点list_ha将A结构挂入修复队列,同时置全局状态为RECOVERY。待修复线程重新探测出A节点的服务由哪个节点承担后,置全局状态为0K。
[0038]由图1所示,调用同步接口的具体步骤如下:
[0039]A、调用同步接口获取访问主节点id ;
[0040]B、根据主节点id找到HA访问结构并给访问结构加读锁;
[0041]C、若HA访问结构的全局状态为0K,则找到状态为ACTIVE的节点并返回节点id ;否则分配wait结构,挂入访问结构的waitq队列
[0042]D、修复完成被唤醒后继续查看全局状态并查找ACTIVE节点,再返回节点id。
[0043]由图2所示,调用异步接口的具体步骤如下:
[0044]A、调用异步接口获取访问节点id ;
[0045]B、根据主节点id查找HA访问结构并加读锁;
[0046]C、若HA访问结构的全局状态为0K,则获取ACTIVE节点并返回节点id ;否则分配异步wait结构并设置回调函数,将wait结构挂入HA访问结构的waitq队列并返回特定错误码,修复线程进行修复;
[0047]D、使用者看到特定错误码则继续处理其他任务;
[0048]E、HA结构修复完成后调用回调函数重新投递任务,使用者则可以继续处理该任务。
[0049]最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的【具体实施方式】进行修改或者等同替换,这些未脱离本发明精神和范围的任何修改或者等同替换,均在申请待批的本发明的权利要求保护范围之内。
【权利要求】
1.一种HA访问自适应的方法,其特征在于,该方法具体步骤如下: (1)调用同步接口或异步接口访问节点,返回节点id; (2)根据返回节点id,访问节点id的设备,若成功,则用该设备提供服务;否则将节点id和访问错误码作为形参传入反馈接口。
2.根据权利要求1所述HA访问自适应的方法,其特征在于,所述同步接口访问节点包括如下步骤如下: A、调用同步接口获取访问主节点id; B、根据主节点id查找HA访问结构并加读锁; C、若HA访问结构的全局状态为0K,则找到状态为ACTIVE的节点并返回节点id;否则在信号量上睡眠,等待结构被修复线程修复; D、修复完成被唤醒后继续查看全局状态并查找ACTIVE节点,再返回节点id。
3.根据权利要求1所述HA访问自适应的方法,其特征在于,所述异步接口访问节点的具体步骤如下: A、调用异步接口获取访问节点id; B、根据主节点id查找HA访问结构并加读锁; C、若HA访问结构的全局状态为0K,则获取ACTIVE节点并返回节点id;否则分配异步wait结构并设置回调函数,将wait结构挂入HA访问结构的waitq队列并返回特定错误码,修复线程进行修复; D、使用者看到特定错误码则继续处理其他任务; E、HA结构修复完成后调用回调函数重新投递任务,使用者则可以继续处理该任务。
4.根据权利要求1所述HA访问自适应的方法,其特征在于,所述反馈接口的执行方式,具体步骤如下: A、反馈接口接收节点id和访问错误码; B、判断访问错误码是否为系统定义的特定错误码,若是则将全局状态置为RECOVERY,挂入修复链表list_ha,触发修复线程进行修复; C、修复完成后,再重新访问节点id的设备; 所述特定错误码包括拒绝服务和网络错误。
5.根据权利要求2或3任一所述HA访问自适应的方法,其特征在于,所述修复线程修复全局状态为RECOVERY状态,修复过程即向组内所有节点发送消息,并将应答接管主节点工作的节点设置为ACTIVE状态,其余设置为STANDBY状态,并修改全局状态为0K,唤醒等待队列的同步或异步等待者。
6.根据权利要求1所述HA访问自适应的方法,其特征在于,该方法的主要数据结构包括:读写锁rwlock、全局状态gstate、所有主从节点id、节点状态nodestates、修复链表list_ha和等待队列Waitq0
7.根据权利要求6所述HA访问自适应的方法,其特征在于,所述全局状态包括OK和RECOVERY两种状态,OK表示可用,RECOVERY表示正在修复;所述节点状态包括ACTVIE和STANDBY两种状态,当全局状态为OK时,有且只有一个节点状态为ACTIVE,其余皆为STANDBY 状态。
【文档编号】G06F11/07GK104484236SQ201410709886
【公开日】2015年4月1日 申请日期:2014年11月28日 优先权日:2014年11月28日
【发明者】马照云, 杨浩 申请人:曙光云计算技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1