分布式网络设备中同步数据的存储方法及***
技术领域
本发明涉及网络通信技术领域,尤其涉及分布式网络设备中同步数据的存储方法及***。
背景技术
在网络中,分布式网络设备是一种将数据转发功能和控制功能分离的网络设备,其内部包括主控卡和业务线卡。其中主控卡完成控制功能,而业务线卡则通过特定的业务接口完成数据转发功能。图1是双主控分布式网络设备的结构示意图。参见图1,为了提高分布式网络设备的可靠性,目前在分布式网络设备内部设置了双主控卡,分为主用主控卡和备用主控卡;分布式网络设备中的主用主控卡、备用主控卡和业务线卡分布在背板不同的槽位上,当主用主控卡发生故障时,进行主备倒换,备用主控卡切换成主用主控卡,负责所有控制业务的运行。
为了保障***高可靠性的主从备份技术,一般会在信息变化时进行实时同步,即主用主控卡需要向备用主控卡和业务线卡下发设备配置管理信息或者路由信息等。在***运行过程中,***的配置管理信息和路由信息等一般由主用主控卡根据变化情况实时下发到各业务线卡和备用主控卡的。需要下发的配置管理信息和路由信息等需要存储,以前在主控卡和业务线卡上的数据存储是由各个应用程序模块采取不同的数据结构存储,缺乏标准统一的存储接口和存储引擎接口,故各个应用程序模块实现复杂,工作量大。
发明内容
本发明的目的是提供一种分布式网络设备中同步数据的存储方法及***,实现在主控卡和线卡上数据存储引擎接口的统一,屏蔽了实现细节,降低了代码冗余和提高了代码的可移植性。
鉴于以上目的,本发明的技术方案是这样实现的:
一种分布式网络设备中同步数据的存储方法,包括如下步骤:
a、在主用主控卡、备用主控卡和业务线卡上分别建立统一存储引擎接口的分布式数据库;
b、主用主控卡的分布式数据库,通过提供给应用程序模块的统一存储接口接收同步数据后,再调用统一存储引擎接口,进行同步数据的存储;
c、主用主控卡的分布式数据库完成同步数据的存储后,将同步数据发送到备用主控卡和业务线卡;
d、备用主控卡或业务线卡的分布式数据库,接收到主用主控卡的同步数据后,通过调用统一存储引擎接口,进行同步数据的存储。
具体的,步骤b中,主用主控卡的分布式数据库调用统一存储引擎接口,进行同步数据存储的具体步骤为:
根据应用程序模块初始化时提供的表信息和同步数据中的表信息,主用主控卡的分布式数据库调用统一存储引擎接口,将同步数据存入公共数据库表或者应用程序模块的自定义存储表;所述自定义存储表和公共数据库表由统一的存储引擎接口实现,由应用程序模块初始化时把自定义存储表的存储引擎接口挂接在分布式数据库上。
具体的,步骤d中,备用主控卡或业务线卡的分布式数据库接收到主用主控卡的同步数据后,进行同步数据存储的具体步骤为:
根据应用程序模块初始化时提供的表信息和同步数据中的表信息,备用主控卡或业务线卡的分布式数据库调用统一存储引擎接口,将同步数据存入公共数据库表或者应用程序模块的自定义存储表;所述自定义存储表和公共数据库表由统一的存储引擎接口实现,由应用程序模块初始化时把自定义存储表的存储引擎接口挂接在分布式数据库上。
具体的,步骤a还进一步包括如下步骤:
设备启动后,主用主控卡和备用主控卡分别访问其自己的分布式数据库,并相互通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册。
具体的,步骤a还进步包括如下步骤:
业务线卡启动完毕后,访问其自己的分布式数据库,和主用主控卡互相通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册。
为了实现上述目的,本发明还提供了一种分布式网络设备中同步数据的存储***,包括主用主控卡、备用主控卡和至少一个业务线卡,所述主用主控卡、备用主控卡和业务线卡分别都包括有一分布式数据库模块;
所述主用主控卡的分布式数据库模块,用于为主用主控卡的应用程序模块提供统一存储接口,并通过调用统一存储引擎接口将同步数据进行存储,将本地存储的同步数据发送到备用主控卡和业务线卡的分布式数据库;
所述备用主控卡或业务线卡的分布式数据模块,用于接收主用主控卡的分布式数据库的同步数据,并通过调用统一存储引擎接口将同步数据进行存储。
具体的,所述主用主控卡的分布式数据库模块,通过调用统一存储引擎接口将同步数据进行存储是指,主用主控卡的分布式数据库模块,用于根据应用程序模块初始化时提供的表信息和同步数据中的表信息,调用统一存储引擎接口,将同步数据存入公共数据库表或者应用程序模块的自定义存储表;所述自定义存储表和公共数据库表由统一的存储引擎接口实现,由应用程序模块初始化时把自定义存储表的存储引擎接口挂接在分布式数据库上。
具体的,所述备用主控卡或业务线卡的分布式数据库模块,接收到主用主控卡的同步数据后,进行同步数据存储是指,备用主控卡或业务线卡的分布式数据库模块,用于根据应用程序模块初始化时提供的表信息和同步数据中的表信息,调用统一存储引擎接口,将同步数据存入公共数据库表或者应用程序模块的自定义存储表;所述自定义存储表和公共数据库表由统一的存储引擎接口实现,由应用程序模块初始化时把自定义存储表的存储引擎接口挂接在分布式数据库上。
具体的,所述主用主控卡的分布式数据库模块,还用于向备用主控卡和所有业务线卡通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册。
具体的,所述业务线卡和备用主控卡的分布式数据库模块,还用于向主用主控卡通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册。
由上述技术方案可知:本发明实现了分布式网络设备中主控卡和业务线卡上同步数据的存储引擎接口的统一,从而可以实现异构数据的统一存储;以及实现了主用主控卡上所有应用程序模块访问分布式数据库的存储接口的统一,屏蔽了实现细节,降低了代码冗余和提高了代码的可移植性。
附图说明
图1是本发明背景技术的分布式网络设备的结构示意图。
图2是本发明分布式网络设备中同步数据的存储方法实施例流程图。
图3是本发明分布式网络设备中同步数据的存储***结构示意图。
图4是本发明分布式网络设备中主用主控卡中分布式数据模块实施例的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图和具体实施例对本发明作进一步的描述。
本发明实施例提出的分布式网络设备中同步数据的存储方法的处理流程如图2所示,该分布式网络通信设备具体实现时可为三层交换机,也可以为其他分布式网络设备,本实施例并不具体限定;该流程包括如下步骤:
步骤201、在主用主控卡、备用主控卡和业务线卡上分别建立统一存储引擎接口的分布式数据库;
本201步骤属于***的设置步骤。在本步骤中,主控卡和业务线卡的应用程序模块在初始化时,为其所在板卡的分布式数据库提供了统一的存储引擎接口,从而保证了通过该统一的存储引擎接口,将自身的应用程序信息根据需要存入公共的数据库表或者其它自定义存储表。公共数据库表可采用链表或Hash表等多种表的结构;应用程序模块的自定义存储表,既可以是通过软件实现的存储表(可采用radix树、256叉树、hash、B*树等结构存储),也可以是应用程序模块建立的硬件存储表,无论何种类型的存储表,应用程序模块为分布式数据库提供一套标准统一的存储引擎接口。
在分布式网络设备启动完成主从协商后,主用主控卡和备用主控卡会分别访问其自己的分布式数据库,并相互通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册,即建立分布式数据库中所有同步数据存储表的关联,建立关联的方法可采用表的名字或者ID。本发明中包括的表信息包括:表的ID,表的名称,表的列的结构和对应的应用程序模块ID等。
当分布式网络设备中的背板上***一张业务线卡并启动后,该业务线卡通过访问其自己的分布式数据库,和主用主控卡互相通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册,即建立分布式数据库的所有同步数据存储表的关联。
步骤202、主用主控卡的分布式数据库,通过提供给应用程序模块的统一存储接口接收同步数据后,再调用统一存储引擎接口,进行同步数据的存储。
本202步骤中,首先,分布式数据库从其提供给所有应用程序模块的统一存储接口接收同步数据;在本发明中,主用主控卡的分布式数据库为主用主控卡上所有的应用程序模块,提供了标准统一的存储接口,通过该存储接口,可以实现对分布式数据库操作和控制;这也是本发明的创新点之一。
然后主用主控卡的分布式数据库调用统一存储引擎接口,进行同步数据存储,具体步骤为:根据应用程序模块初始化时提供的表信息和同步数据中的表信息,主用主控卡的分布式数据库调用统一存储引擎接口,将同步数据存入公共数据库表或者应用程序模块的自定义存储表;所述自定义存储表和公共数据库表由统一的存储引擎接口实现,由应用程序模块初始化时把自定义存储表的存储引擎接口挂接在分布式数据库上。
本发明中,在分布式网络设备的主用主控卡的应用程序模块中,如配置文件模块,它的要求内存消耗比较少,那么适合放在分布式数据库提供的公共数据表中进行存储;而路由表模块,它的内存消耗比较大,而且跟其它模块有调用的效率要求,那么适合自己实现存储,所以可采用自定义存储表;通过应用程序模块提供给分布式数据库的一套标准的API,可以实现两类存储表的存储引擎接口的统一。在实现时,应用程序模块具体实现的自定义存储表,在应用程序模块初始化时注册在分布式数据库上,以接管存储引擎接口的形式挂接在分布式数据库上。
步骤203、主用主控卡的分布式数据库完成同步数据的存储后,将同步数据发送到备用主控卡和业务线卡。
本203步骤中,包括主用主控卡向备用主控卡发送同步数据和主用主控卡向业务线卡发送同步数据两个部分。主用主控卡向备用主控卡发送同步数据的过程为,在分布式式网络设备启动完成主从协商后,主用主控板的分布式数据库会将本地所有存储表中存储的同步数据,进行批量同步到备用主控卡的分布式数据库中,完成批量同步后,则进入实时同步阶段,当主用主控卡上的应用程序模块通过分布式数据库提供的统一存储接口对公共数据库表或自定义存储表进行***、删除和更新时,则会引起公共数据库表或自定义存储表信息的变化,主用主控板的分布式数据库会及时的同步到备用主控板的分布式数据库中。如果主用主控板发生故障或强制切换时,备用主控板则会接替主用主控板的工作。当一个业务线卡启动后,主用主控卡也会进行批量同步和实时同步,过程同上,不再赘述。
步骤204、备用主控卡或业务线卡的分布式数据库,接收到主用主控卡的同步数据后,通过调用统一存储引擎接口,进行同步数据的存储。
本204步骤中,备用主控卡或业务线卡的分布式数据库接收到主用主控卡的同步数据后,进行同步数据存储,具体步骤为:根据应用程序模块初始化时提供的表信息和同步数据中的表信息,备用主控卡或业务线卡的分布式数据库调用统一存储引擎接口,将同步数据存入公共数据库表或者应用程序模块的自定义存储表;所述自定义存储表和公共数据库表由统一的存储引擎接口实现,由应用程序模块初始化时把自定义存储表的存储引擎接口挂接在分布式数据库上。
由于分布式网络设备中,应用程序模块存储在主控卡和业务线卡上的数据用处不同,其数据存储组织形式也有差异,本发明提供的统一存储引擎接口同时兼顾了主控卡和线卡存储的差异性,通过提供一套统一标准的API即统一的存储引擎接口,无论是主控卡或者业务线卡的分布式数据库,根据调用其所在板卡的应用程序模块提供的统一存储引擎接口,可以将同步数据存储在公共数据表或者应用程序模块的自定义存储表;虽然存储形式不同,但实现了统一存储接口的统一,提高了代码的可移植性。另外,本发明为主用主控卡的所有应用程序模块提供了操作分布式数据库的统一存储接口,主用主控卡的任一应用程序模块要进行应用程序的信息存储时(本发明了描述方便统称为同步数据),可以直接调用该分布式数据库统一的存储接口,减少了应用程序模块的工作量。虽然存储形式不同,但实现了存储接口的统一,提高了代码的可移植性。
实施例
下面分别以太驱动程序模块和MPLS程序模块的应用程序信息在主用主控卡的存储、以及由主用主控卡同步到备主控卡和业务线卡上进行存储的过程为例,对本发明的存储方法做进一步的说明。
首先对主用主控卡中的以太驱动程序模块增加一条以太速率配置信息为例进行详细说明,以太驱动程序模块调用分布式数据库提供的统一存储接口中的添加函数,将以太速率配置信息发送给分布式数据库,分布式数据库根据以太驱动程序模块初始化时提供的表信息,调用统一存储引擎接口,将该配置信息添加到公共数据库表中,同时主用主控卡的分布式数据库会将添加的信息下发到备用主控卡和业务线卡上;配置信息下发到备用主控卡后,备用主控卡的分布式数据库调用统一存储引擎接口的添加函数,将配置信息添加到公共数据库表中;而下发到业务线卡上的配置信息,由业务线卡上的分布式数据库调用存储引擎接口的添加函数,又根据以太驱动程序模块在初始化时提供的表信息(一般要包括存储在哪个存储表)将配置信息添加到自定义的硬件存储表;由于业务线卡上的以太驱动程序模块的目的是为了设置其硬件信息,所以会将配置信息添加到以太驱动程序模块的自定义存储表中,即以硬件存储表的形式进行存储。
现以主用主控卡上的MPLS程序模块的MPLS信息的添加为例进行详细说明书。由于MPLS程序模块信息量较大,并且与其他模块有复杂的相互引用关系,不适合存储在公共数据库表中,可以存储在由MPLS程序模块实现的自定义存储表中,由应用模块自行进行存储;这样MPLS信息在主用主控卡上避免了存储在公共数据库表中,避免了数据的冗余。MPLS程序模块的自定义存储表的存储引擎接口在模块初始化时进行注册,以接管存储引擎接口的形式挂接在分布式数据库上,MPLS信息在添加时,MPLS程序模块调用分布式数据库的统一存储接口提供的添加函数,将MPLS信息发送给分布式数据库,分布式数据库根据MPLS程序模块初始化时提供的表信息,调用统一存储引擎接口,将MPLS信息存储在MPLS程序模块的自定义存储表中。同时主用主控卡的分布式数据库会把添加的信息下发到备用主控卡和业务线卡上。
MPLS信息下发到备用主控卡的分布式数据库后,备用主控卡的分布式数据库,调用统一存储引擎接口的添加函数,根据MPLS程序模块初始化时提供的表信息,该MPLS信息对应的添加接口为MPLS程序模块自定义存储表提供的添加函数,然后MPLS信息被存储在MPLS程序模块的自定义存储表中。MPLS信息下发到业务线卡的分布式数据库后,业务线卡的分布式数据库,查找并调用统一存储引擎的添加函数接口,根据MPLS程序模块初始化时提供的表信息,该MPLS信息对应的添加接口为MPLS自定义存储表提供的添加函数,其实现为将MPLS信息存储在硬件存储表中。
通过以上分析,应用程序信息在主控卡和线卡上的存储实现形式虽不同,但是他们在进行存储时,由分布式数据库调用统一的存储引擎接口,从而实现了分布式数据库的异构存储。另外,当主用主控卡的分布式数据为应用程序模块提供了统一的存储接口,当新增加一个应用程序模块时,把分布式数据库提供的统一存储接口直接移植到新的应用程序模块上,而不需改动,只需改动具体的存储实现。因而提高了代码的可移植性。
以上对本发明实施例提供的方法进行了描述,下面对本发明实施例提供的***进行描述。
参见图3,图3为本发明实施例提供的***结构示意图,该***包括:一个主用主控卡1、一个备用主控卡2和至少一个业务线卡3;主用主控卡1包括一个分布式数据库模块101,备用主控卡2包括一个分布式数据库模块201,业务线卡3包括一分布式数据库模块301。
主用主控卡1的分布式数据库模块101,用于为主用主控卡1的应用程序模块1、应用程序模块2和应用程序模块3提供统一存储接口A1;主用主控卡1的分布式数据库模块101,从其提供给三个应用程序模块的统一存储接口A1接收到应用程序信息后,根据应用程序模块初始化时提供的表信息和应用程序信息中的表信息,调用统一存储引擎接口B1,将应用程序信息进行存储。例如应用程序模块1初始化时提供给分布式数据库模块101的表信息中,确定其信息存储在自定义存储表1,且自定义存储表1和公共数据库表由统一的存储引擎接口实现,而且应用程序模块1在初始化时将自定义存储表1的存储引擎接口挂接在分布式数据库上。从统一存储接口A1接收到应用程序模块1的应用程序信息后,分布式数据库模块101调用统一存储引擎接口B1,根据应用程序模块1初始化时提供的表信息以及从统一存储接口B1获取的表信息,将应用程序模块1的应用信息存储到自定义存储表1。
同理应用程序模块2在初始化时确定存储应用程序的表信息为自定义存储表2,且自定义存储表2和公共数据库表由统一的存储引擎接口实现,并将自定义存储表2的存储引擎接口挂接在分布式数据库上,分布式数据库模块101通过调用统一存储引擎接口B1,将应用程序模块2的应用程序信息存储到自定义存储表2;应用程序模块3初始化时确定存储应用程序的表信息为公共数据库表,接收到应用程序模块3的应用信息后,分布式数据库模块101调用统一存储引擎接口B1,将应用程序模块3的应用信息存储到公共数据库表。
主用主控卡1的分布式数据库模块101还用于将本地存储表的应用程序信息,包括公共数据库表、自定义存储表1和自定义存储表2中的应用程序信息,发送到备用主控卡2和业务线卡3的分布式数据库模块;另外,分布式数据库模块101还用于,在主用主控卡1刚刚启动时,向备用主控卡2和业务线卡3通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册。
备用主控卡2的分布式数据库模块201从主用主控卡1的分布式数据库模块101接收到三个应用程序模块的应用程序信息后同,根据三个应用程序模块初始化时提供的表信息和用于程序中的表信息,并通过调用统一存储引擎接口B2将同应用程序信息进行存储;例如将来自应用程序模块1的应用程序信息存入自定义存储表1中;将来自应用程序模块2的应用程序信息存入自定存储表2中;将来自应用程序模块3的应用程序信息存入公共数据表。由于双主控卡之间的备份关系,主用主控卡和备用主控卡的实现是完全相同的,所以一般应用程序模块的应用程序信息在主用主控卡和备用主控卡的存储方式是相同的,即备用主控卡上三个应用程序模块在初始化时执行的操作与在主用主控卡时相同;具体存储过程在此不再赘述。
业务线卡3的分布式数据库模块301,从主用主控卡1的分布式数据库模块101接收到应用程序模块的应用程序信息后,根据三个应用程序模块在初始化时提供的表信息以及应用程序信息中的表信息,调用统一存储引擎接口B3将三个应用程序模块的应用程序信息进行存储。一般来说,在主控卡上采用自定义存储表存储应用程序信息的应用程序模块,在将应用程序同步到业务线卡上时,也采用相同的自定义存储表来存储应用程序信息。但是在主控卡上采用公共数据库表存储应用程序信息的应用程序模块,在将应用程序同步到业务线卡上时,在实现时并不局限于将其应用程序信息必须存储在公共数据库表中,也可能在初始化时该应用程序模块提供给分布式数据库模块301的表信息,是将其应用程序信息存储在自定义存储表中。例如本实施例中,分布式数据库模块301,根据应用程序模块1初始化时提供的表信息和应用程序信息中的表信息,调用统一存储引擎接口B3,将应用程序模块1的应用程序信息同步数据存入自定义存储表1;分布式数据库模块301通过调用统一存储引擎接口B1,将应用程序模块2的应用程序信息存储到自定义存储表2;应用程序模块3初始化时确定由公共数据库表来存储其应用程序信息,接收到应用程序模块3的应用信息后,分布式数据库模块301调用统一存储引擎接口B1,将应用程序模块3的应用信息存储到公共数据库表。另外分布式数据库模块301,还用于向主用主控卡1通告其用于存储同步数据的所有表信息,完成分布式数据库的分布式注册。
以上本***中的统一存储引擎接口B1、统一存储引擎接口B2和统一存储引擎接口B3为采用统一标准的一套API实现。
参见图4,在本实施例中,主用主控卡上的分布式数据库模块包括数据库管理单元401和数据库表单元402;数据库管理单元401用于为所在的主用主控卡的所有应用程序模块提供统一存储接口、以及对分布式数据库的操作管理接口和将所在主用主控卡的同步接口发送到被备用主控卡和所有业务线卡。数据库表单元402,用于完成应用模块的同步数据以数据库形式进行存储。
本实施例中的数据库管理单元401包括:初始化子单元4011、分布式注册子单元4012、管理子单元4013、统一存储接口子单元4014和同步数据分发子单元4015。
初始化子单元4011,完成分布式数据库的初始化;分布式注册子单元4012,完成数据库的分布式注册,建立主用主控板与备用主控板和所有业务线卡上公共数据库表以及自定义存储表间的关联;管理子单元4013:提供分布式数据库运行所必须的任务、定时器、消息处理等基础机制;统一存储接口子单元4014:提供应用程序模块对数据库操作和控制的接口,维护表的分布相关信息及管理数据库的事务等;同步数据分发子单元4015:完成对数据库管理的操作进行同步。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。