一种配置加载方法和系统与流程

文档序号:11458486阅读:172来源:国知局
一种配置加载方法和系统与流程
本发明涉及计算机
技术领域
,特别涉及一种配置加载方法和系统。
背景技术
:现有日志系统中的各个组件都会使用到不同的配置文件,这些配置文件有些是独立的,有些是和其他配置文件有关联的,存在相互依赖的关系。这些配置文件在各组件中的加载流程不统一,同一组件内的配置加载流程也不统一。随着业务的不断增长和客户需求的不断变化,配置文件的种类和数量也会不断增长,关系也会更加复杂,基于这样的现状,现有的配置加载方式存在以下缺点:(1)不同的配置加载过程比较分散,没有统一的配置加载流程;(2)配置间的依赖关系完全依靠代码顺序,可读性和易维护性很差;(3)新增配置的加载流程不明确,容易对旧配置的加载产生影响,无关配置之间没有隔离机制。技术实现要素:为了解决现有配置加载流程不具备通用性、不易扩展、维护性差的问题,本发明实施例提供了一种配置加载方法和系统。所述技术方案如下:根据本发明实施例的一个方面,提供了一种配置加载方法,包括:接收通过接口输入的配置信息;根据所述配置信息生成配置对象,为所述配置对象分配唯一的序号并确定配置对象之间的依赖关系;以邻接表的形式存储所有配置对象及其依赖关系,得到第一邻接表;对所述第一邻接表进行遍历,得到配置对象的加载序列;按照所述加载序列,依次加载所述配置对象。进一步的,结合深度优先遍历和广度优先遍历,对所述第一邻接表进行遍历,得到配置对象的加载序列,包括:从所述第一邻接表中的指定节点开始进行深度优先遍历,对于每一个被访问的节点,均执行以下步骤a1至步骤a4,直至所述第一邻接表中的所有节点都已被遍历:步骤a1,记录该节点的访问次数;步骤a2,判断所述节点的访问次数是否等于存储在该节点处的配置对象的出度;步骤a3,如果是,则说明当前节点被遍历,继续进行深度优先遍历,访问依赖于所述当前节点的节点,若没有节点依赖于所述当前节点,则返回到被所述当前节点依赖的节点处,进行广度优先遍历,访问下一个未被遍历的节点;步骤a4,如果否,则暂时停止深度优先遍历,返回到被所述当前节点依赖的节点处,转为广度优先遍历,访问下一个未被遍历的节点;将所述配置对象被遍历的先后顺序作为所述加载序列。进一步的,所述指定节点存储有虚拟根配置对象,所述虚拟根配置对象被实体配置对象依赖,其中,所述实体配置对象存在对应的实体配置文件;虚拟配置对象不存在对应的实体配置文件,依赖于实体配置对象或其他虚拟配置对象。进一步的,在得到配置对象的加载序列之后,所述方法还包括:按照预设时间间隔检测是否有配置文件更新;如果检测到有配置文件更新,按照预设方式生成更新的配置文件对应的校验掩码;根据所述校验掩码、所有配置对象的更新掩码以及所述加载序列,确定需要更新的其他配置对象,其中,所述更新掩码是预先按照所述配置对象的序号和依赖关系分别为每个配置对象生成的;按照所述加载序列对需要更新的配置对象进行更新。进一步的,根据所述校验掩码、所有配置对象的更新掩码以及所述加载序列,确定需要更新的其他配置对象,包括:按照所述加载序列,分别对每个配置对象的更新掩码和所述校验掩码进行与运算;如果运算结果为真,则确定所述配置对象需要更新;如果运算结果为假,则确定所述配置对象不需要更新。进一步的,所述配置信息至少包括:配置文件是否为实体配置文件、配置文件的路径、初始化方法、加载方法、析构方法和依赖关系。进一步的,在按照所述加载序列,依次加载所述配置对象之后,所述方法还包括:根据通过接口输入的新的配置信息,在所述第一邻接表中增加新的配置对象及其依赖关系;通过遍历,得到该新的配置对象的加载次序。根据本发明实施例的另一方面,提供了一种配置加载系统,包括:接收单元,用于接收通过接口输入的配置信息;配置对象生成单元,用于根据所述配置信息生成配置对象,为所述配置对象分配唯一的序号并确定配置对象之间的依赖关系;存储单元,用于以邻接表的形式存储所有配置对象及其依赖关系,得到第一邻接表;遍历单元,用于对所述第一邻接表进行遍历,得到配置对象的加载序列;加载单元,用于按照所述加载序列,依次加载所述配置对象。进一步的,所述遍历单元包括:第一遍历模块,用于从所述第一邻接表中的指定节点开始进行深度优先遍历,对于每一个被访问的节点,均由记录模块、判断模块、第二遍历模块、第三遍历模块执行对应的操作,直至所述第一邻接表中的所有节点都已被遍历;记录模块,用于记录节点的访问次数;判断模块,用于判断所述节点的访问次数是否等于存储在该节点处的配置对象的出度;第二遍历模块,用于在判断结果为是的情况下,说明当前节点被遍历,继续进行深度优先遍历,访问依赖于所述当前节点的节点,若没有节点依赖于所述当前节点,则返回到被所述当前节点依赖的节点处,进行广度优先遍历,访问下一个未被遍历的节点;第三遍历模块,用于在判断结果为否的情况下,暂时停止深度优先遍历,返回到被所述当前节点依赖的节点处,转为广度优先遍历,访问下一个未被遍历的节点;确定模块,用于将所述配置对象被遍历的先后顺序作为所述加载序列。进一步的,所述指定节点存储有虚拟根配置对象,所述虚拟根配置对象被实体配置对象依赖,其中,所述实体配置对象存在对应的实体配置文件;虚拟配置对象不存在对应的实体配置文件,依赖于实体配置对象或其他虚拟配置对象。进一步的,所述系统还包括:检测单元,用于在得到配置对象的加载序列之后,按照预设时间间隔检测是否有配置文件更新;掩码生成单元,用于在检测到有配置文件更新的情况下,按照预设方式生成更新的配置文件对应的校验掩码;确定单元,用于根据所述校验掩码、所有配置对象的更新掩码以及所述加载序列,确定需要更新的其他配置对象,其中,所述更新掩码是预先按照所述配置对象的序号和依赖关系分别为每个配置对象生成的;更新单元,用于按照所述加载序列对需要更新的配置对象进行更新。进一步的,所述确定单元包括:运算模块,用于按照所述加载序列,分别对每个配置对象的更新掩码和所述校验掩码进行与运算;第一确定模块,用于在运算结果为真的情况下,确定所述配置对象需要更新;第二确定模块,用于在运算结果为假的情况下,确定所述配置对象不需要更新。进一步的,所述配置信息至少包括:配置文件是否为实体配置文件、配置文件的路径、初始化方法、加载方法、析构方法和依赖关系。进一步的,所述存储单元,还用于根据通过接口输入的新的配置信息,在所述第一邻接表中增加新的配置对象及其依赖关系;所述遍历单元,还用于通过遍历得到该新的配置对象的加载次序。本发明实施例提供的技术方案带来的有益效果是:通过通用的加载框架,接收到配置信息后,将配置信息抽象成配置对象,使用邻接表存储配置对象及其依赖关系,利用邻接表的遍历驱动配置对象的自动加载,并保证加载次序,即自动完成配置加载,实现了配置加载管理和加载流程结构化、自动化,同时实现配置间的依赖关系可描述化,提升可读性和易维护性;并且弱化了配置加载流程和配置加载的关系,实现框架和业务分离,使用者仅需关注配置加载的业务本身,增强了可扩展性,实现同一框架的跨组件通用,代码复用,降低开发维护成本。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的配置加载方法的流程图;图2是本发明实施例提供的配置对象的有向图;图3是本发明实施例提供的引入虚拟根配置对象的有向图;图4是本发明实施例提供的图3的有向图对应的邻接表示意图;图5是本发明实施例提供的新增实体配置对象的有向图;图6是本发明实施例提供的图5的有向图对应的邻接表示意图;图7是本发明实施例提供的新增虚拟配置对象的有向图;图8是本发明实施例提供的图7的有向图对应的邻接表示意图;图9是本发明实施例提供的配置加载系统的结构框图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。本发明实施例中涉及的术语解释如下:图用来表示物件与物件之间的关系,由节点和连接这些节点的直线或曲线(称为边)组成,若图中的每条边都是有方向的,则称为有向图。有向图可以清楚表示配置对象及其依赖关系。邻接表可以作为图的存储结构,邻接表由表头节点和表节点组成,图中每个节点均对应一个存储在邻接表中的表头节点。出度是指有向图中某节点作为图中边的起点的次数之和。入度是指有向图中某节点作为图中边的终点的次数之和。出度和入度可以从配置对象的有向图中得到,也可以从邻接表中得到。实体配置对象存在对应的实体配置文件,实体配置对象依赖于虚拟根配置对象,还可以依赖于其他实体配置对象。虚拟配置对象不存在对应的实体配置文件,依赖于实体配置对象和/或其他虚拟配置对象。虚拟根配置对象是为了方便遍历而引入的概念,作为所有实体配置对象的依赖以及遍历起点。配置对象的依赖关系是指某配置对象要在其指向的配置对象加载完成后加载,其指向的配置对象更新后,也要随之同步更新。配置对象的成员包括:属性、方法和存储。具体的,属性包括配置对象类型(实体配置对象或者虚拟配置对象)、是否需要完整性校验等信息,可扩展;方法包括配置对象的初始化、加载、析构等操作,可扩展;存储包括配置对象的存储结构指针,存储结构可自定义。为了实现通用的配置加载方法,本发明把配置加载流程抽象成框架,利用图及图的邻接表完成框架的构建,该框架提供接口,供使用者输入配置信息,然后根据配置信息自动生成配置对象,自动生成邻接表存储配置对象,通过遍历邻接表实现加载流程。这种通用的加载框架弱化了配置加载流程和配置加载的关系,实现框架和业务分离,使用者仅需关注配置加载的业务本身,增强了可扩展性,实现跨组件通用。本发明实施例提供了一种配置加载方法,基于建立的框架,实现配置加载管理和加载流程结构化、自动化,增强了可扩展性,实现了各组件通用化。图1是本发明实施例提供的配置加载方法的流程图,如图1所示,该方法包括如下的步骤s101至步骤s105。步骤s101,接收通过接口输入的配置信息。步骤s102,根据配置信息生成配置对象,为配置对象分配唯一的序号并确定配置对象之间的依赖关系。框架提供接口,框架使用者可以调用接口,通过接口输入配置信息,即向框架描述配置对象自身的属性,实现初始化、加载、析构等方法,指定配置对象的序号,由此实现配置对象自身的业务逻辑。配置信息至少包括:配置文件是否为实体配置文件、配置文件的路径、初始化方法、加载方法、析构方法和依赖关系。配置对象的序号也可以称为配置索引或配置序号。配置对象可以采用如下描述:init_conf_obj(配置索引,是否实体文件,文件路径,初始化方法,加载方法,析构方法,……);依赖关系可以采用如下描述:push_relation_list(被依赖配置的索引,配置索引)。步骤s103,以邻接表的形式存储所有配置对象及其依赖关系,得到第一邻接表。步骤s104,对第一邻接表进行遍历,得到配置对象的加载序列。本步骤中,可以结合深度优先遍历和广度优先遍历对第一邻接表进行遍历。步骤s105,按照加载序列,依次加载配置对象。上述配置加载方法通过通用的加载框架,接收到配置信息后,将配置信息抽象成配置对象,使用邻接表存储配置对象及其依赖关系,利用邻接表的遍历驱动配置对象的自动加载,并保证加载次序,即自动完成配置加载,实现了配置加载管理和加载流程结构化、自动化,同时实现配置间的依赖关系可描述化,提升可读性和易维护性;并且弱化了配置加载流程和配置加载的关系,实现框架和业务分离,使用者仅需关注配置加载的业务本身,增强了可扩展性,实现同一框架的跨组件通用,代码复用,降低开发维护成本。步骤s104的遍历步骤包括:从第一邻接表中的指定节点(存储有虚拟根配置对象)开始进行深度优先遍历,对于每一个被访问的节点,均执行以下步骤a1至步骤a4,直至第一邻接表中的所有节点都已被遍历:步骤a1,记录该节点的访问次数;步骤a2,判断节点的访问次数是否等于存储在该节点处的配置对象的出度;步骤a3,如果是,则说明当前节点被遍历,继续进行深度优先遍历,访问依赖于当前节点的节点,若没有节点依赖于当前节点,则返回到被当前节点依赖的节点处,进行广度优先遍历,访问下一个未被遍历的节点;步骤a4,如果否,则暂时停止深度优先遍历,返回到被当前节点依赖的节点处,转为广度优先遍历,访问下一个未被遍历的节点;将配置对象被遍历的先后顺序作为加载序列。其中加载序列可以使用配置对象的序号表示。本实施例利用节点的出度实现深度优先遍历和广度优先遍历结合,由此完成邻接表的遍历,即按照依赖关系确定配置对象的加载顺序。从指定根节点开始使用深度优先遍历,当节点访问次数达到该节点的出度时,表明该节点被遍历,当节点访问次数未达到该节点的出度时,转为广度优先遍历,直至所有的节点都已被遍历。遍历方法的伪代码如下:下面结合图2至图4对配置对象的存储和邻接表遍历进行详细说明。如图2所示,为配置对象的有向图。本实施例中共有13个配置对象,其中,配置1至配置7为实体配置对象,配置8至配置13为虚拟配置对象,箭头的指向表示配置对象间的依赖关系。例如,配置8依赖于配置1和配置2,配置12依赖于配置8和配置3。如图3所示,为引入虚拟根配置对象的有向图。本实施例中为了方便遍历,引入虚拟根配置对象的概念,虚拟根配置对象(即图中的虚拟根配置0)作为所有实体配置对象的依赖,以及作为此有向图对应的邻接表遍历的起点。如图4所示,为图3的有向图对应的邻接表示意图。邻接表中第一列的节点,即为表头节点,对应着有向图中的每个节点。邻接表中横向表示依赖关系,即,与表头节点处于同一行的节点(即该表头节点下的节点数组),是依赖于该表头节点的,但这一行的各节点之间没有依赖关系。基于图4所示的邻接表,其遍历方法如下:固定从虚拟根配置0开始深度优先遍历虚拟根配置0的节点数组,配置1节点第1次被访问,配置1节点的出度为1,则配置1节点被遍历。由配置1深度优先遍历配置1的节点数组,配置8节点第1次被访问,但配置8节点的出度为2,所以配置8节点不会被遍历。深度优先遍历暂时结束,回到虚拟根配置0继续广度优先遍历,配置2节点第1次被访问,且配置2节点的出度为1,则配置2节点被遍历。由配置2深度优先遍历配置2的节点数组,配置8节点第2次被访问,且配置8节点的出度为2,则配置8节点被遍历。以此类推,由邻接表的遍历算法得到的配置加载序列为(0,1,2,8,3,12,4,9,13,5,10,6,11,7)。在上述配置加载方法的基础上,本发明实施例还提供了相应的配置更新流程。在得到配置对象的加载序列之后,按照预设时间间隔检测是否有配置文件更新;如果检测到有配置文件更新,按照预设方式生成更新的配置文件对应的校验掩码;根据校验掩码、所有配置对象的更新掩码以及加载序列,确定需要更新的其他配置对象,其中,更新掩码是预先按照配置对象的序号和依赖关系分别为每个配置对象生成的;按照加载序列对需要更新的配置对象进行更新。本实施例中定时检测配置更新,自动确定受更新的配置对象影响的其他配置对象(因为存在依赖关系),并按照加载序列对需要更新的配置对象进行更新,由此使用二进制掩码实现配置对象的关联更新,准确及时的更新避免存在依赖关系的配置对象被漏掉而没有更新,也不会影响无关的配置对象。其中,可以通过定时器来实现定时检测配置文件的更新情况,根据配置文件的更新情况生成校验掩码。在确定配置对象及其依赖关系后,就可以生成配置对象的更新掩码。更新掩码和校验掩码均可以是二进制的,可以结合配置对象的序号和依赖关系生成。例如,在掩码中,每一个配置对象都有其对应的序号位,对于配置对象的更新掩码,将自身序号位和其依赖的配置对象的序号位设置为1,其余位为0;对于校验掩码,将更新的配置对象对应的序号位设置为1,其余位为0。如表1所示。表1配置对象的更新掩码表配置序号依赖关系二进制更新掩码(最右为第0位)1无0b000000102无0b000001003无0b000010004无0b000100005依赖于配置2和配置40b001101006依赖于配置1和配置20b01000110进一步的,可以通过以下步骤确定需要更新的其他配置对象:按照加载序列,分别对每个配置对象的更新掩码和校验掩码进行与运算;如果运算结果为真,则确定配置对象需要更新;如果运算结果为假,则确定配置对象不需要更新。以表1为例,配置对象的加载序列为(1,2,6,3,4,5)。当配置1和3更新时,生成校验掩码0b00001010,然后依次将更新掩码同该校验掩码做与运算,得到配置1、配置6、配置3需要更新,按照加载顺序更新配置1、配置6和配置3,之后重新加载更新后的配置对象。以图2至图4为例,实体配置对象2的配置文件更新,会触发配置8、配置9、配置12、配置13更新,更新顺序同加载顺序一致,为(2,8,12,9,13),但只需要更新上述几个配置对象即可,其他无关的配置对象不受任何影响。本发明实施例还提供了新增配置对象的相关流程,具体的,在按照加载序列,依次加载配置对象之后,根据通过接口输入的新的配置信息,在第一邻接表中增加新的配置对象及其依赖关系;通过遍历,得到该新的配置对象的加载次序。本实施例中,新增配置对象只需要调用接口说明配置的属性、操作方法、依赖关系等内容,流程框架会自动确定该配置对象的加载次序,不影响已有配置的加载,实现无关配置之间的隔离。举例而言,新增实体配置对象14,只依赖于虚拟根配置0,其有向图如图5所示,邻接表如图6所示,由邻接表的遍历算法得到的加载序列为(0,1,2,8,3,12,4,9,13,5,10,6,11,7,14)。新增虚拟配置对象15,依赖于实体配置对象7和虚拟配置对象11,其有向图如图7所示,邻接表如图8所示,由邻接表的遍历算法得到的加载序列为(0,1,2,8,3,12,4,9,13,5,10,6,11,7,15,14)。本发明实施例还提供了一种配置加载系统,可以用于实现上述配置加载方法,其实施可以参考上述方法实施例。如图9所示,该配置加载系统包括:接收单元91、配置对象生成单元92、存储单元93、遍历单元94和加载单元95。接收单元91,用于接收通过接口输入的配置信息;配置信息至少包括:配置文件是否为实体配置文件、配置文件的路径、初始化方法、加载方法、析构方法和依赖关系;配置对象生成单元92,连接至接收单元91,用于根据配置信息生成配置对象,为配置对象分配唯一的序号并确定配置对象之间的依赖关系;存储单元93,连接至配置对象生成单元92,用于以邻接表的形式存储所有配置对象及其依赖关系,得到第一邻接表;遍历单元94,连接至存储单元93,用于对第一邻接表进行遍历,得到配置对象的加载序列;本实施例中,可以结合深度优先遍历和广度优先遍历对第一邻接表进行遍历。加载单元95,连接至遍历单元94,用于按照加载序列,依次加载配置对象。上述配置加载系统通过通用的加载框架,接收到配置信息后,将配置信息抽象成配置对象,使用邻接表存储配置对象及其依赖关系,利用邻接表的遍历驱动配置对象的自动加载,并保证加载次序,即自动完成配置加载,实现了配置加载管理和加载流程结构化、自动化,同时实现配置间的依赖关系可描述化,提升可读性和易维护性;并且弱化了配置加载流程和配置加载的关系,实现框架和业务分离,使用者仅需关注配置加载的业务本身,增强了可扩展性,实现同一框架的跨组件通用,代码复用,降低开发维护成本。优选的,遍历单元94包括:第一遍历模块、记录模块、判断模块、第二遍历模块、第三遍历模块和确定模块。第一遍历模块,用于从第一邻接表中的指定节点(存储有虚拟根配置对象)开始进行深度优先遍历,对于每一个被访问的节点,均由记录模块、判断模块、第二遍历模块、第三遍历模块执行对应的操作,直至第一邻接表中的所有节点都已被遍历;记录模块,连接至第一遍历模块,用于记录节点的访问次数;判断模块,连接至记录模块,用于判断节点的访问次数是否等于存储在该节点处的配置对象的出度;第二遍历模块,连接至判断模块,用于在判断结果为是的情况下,说明当前节点被遍历,继续进行深度优先遍历,访问依赖于当前节点的节点,若没有节点依赖于当前节点,则返回到被当前节点依赖的节点处,进行广度优先遍历,访问下一个未被遍历的节点;第三遍历模块,连接至判断模块,用于在判断结果为否的情况下,暂时停止深度优先遍历,返回到被当前节点依赖的节点处,转为广度优先遍历,访问下一个未被遍历的节点;确定模块,连接至第二遍历模块和第三遍历模块,用于将配置对象被遍历的先后顺序作为加载序列。上述系统还可以包括实现配置更新的相关单元。具体包括:检测单元,连接至遍历单元94,用于在得到配置对象的加载序列之后,按照预设时间间隔检测是否有配置文件更新;掩码生成单元,连接至检测单元,用于在检测到有配置文件更新的情况下,按照预设方式生成更新的配置文件对应的校验掩码;确定单元,连接至掩码生成单元,用于根据校验掩码、所有配置对象的更新掩码以及加载序列,确定需要更新的其他配置对象,其中,更新掩码是预先按照配置对象的序号和依赖关系分别为每个配置对象生成的;更新单元,连接至确定单元,用于按照加载序列对需要更新的配置对象进行更新。其中,确定单元包括:运算模块,用于按照加载序列,分别对每个配置对象的更新掩码和校验掩码进行与运算;第一确定模块,连接至运算模块,用于在运算结果为真的情况下,确定配置对象需要更新;第二确定模块,连接至运算模块,用于在运算结果为假的情况下,确定配置对象不需要更新。上述系统还可以新增配置对象,相应的,存储单元93还用于根据通过接口输入的新的配置信息,在第一邻接表中增加新的配置对象及其依赖关系;遍历单元94还用于通过遍历得到该新的配置对象的加载次序。综上所述,本发明实施例提供的配置加载方法和系统,通过通用的加载框架,将接口输入的配置信息抽象成配置对象,设计数据结构用于存储配置对象,由流程框架自动完成配置加载及更新过程,实现了配置加载管理和加载流程结构化、自动化。使用邻接表来保存和描述配置间的依赖关系,实现配置间的依赖关系可描述化,提升可读性和易维护性。框架和业务分离,实现同一框架的跨组件通用,有很好的易用性、扩展性和可维护性,降低开发维护成本。本发明实施例在不同组件具有广泛的适用性,减少了重复开发所消耗的人工和时间成本。另外,利用上述方法和系统新增配置对象,不会对旧的配置对象产生影响,实现了无关配置之间的隔离。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1