本发明涉及计算机软件系统技术领域,尤其适用于大型的复杂的软件系统中各模块重要程度的衡量及各服务重要程度的衡量。
背景技术:
一个大型而复杂的软件系统往往会有很多小模块或者很多简单的服务组成,这些模块或者服务数量庞大,互相调用相互配合,共同完成复杂的功能。软件的各个服务或者模块之间往往会有复杂的调用依赖关系,各服务或模块对整个软件系统的重要程度也有所不同,如果不加区统一对待,那么就会花费较多精力来维护,效率低下。
技术实现要素:
为解决上述背景技术中的技术问题,本发明提出一种新的解决方案,该方案是在大型软件系统中,以软件系统中的每个服务之间的调用依赖关系数据为基础,通过一种算法从调用关系数据中分析出各个服务重要程度,并数字化这个重要程度,使每个服务在系统中的重要程度有个直观的高低之分。其具体技术方案如下:
第一方面,一种系统服务重要程度评级的方法,所述方法为:
所述关键度模块从数据库系统中提取系统中所有服务及服务的调用关系,生成数据集合。
所述关键度模块调用networkx图分析工具的pagerank函数计算出每个服务的mr值。
所述关键度模块根据所述各服务的mr值分配各服务的关键度。
结合第一方面,在第一方面可能的实现方式中的第一种情况为:
所述关键度模块调用networkx图分析工具的pagerank函数得出每个服务的mr值的方法为:
关键度模块调用pagerank函数模块设置服务为有向图的节点,服务之间的调用关系为有向图的边界,生成服务及服务调用关系的有向图。
pagerank函数模块给所述每个服务预先分配初始mr值,所述mr值为各个服务被调用的概率。
分配初始mr值后,pagerank函数模块通过迭代计算其所述每个服务的mr值,直至所述每个服务的mr值达到平衡分布。
结合第一方面的第一种情况,在第一方面可能的实现方式中的第二种情况为:
所述关键度模块根据所述各服务的mr值分配各服务的关键度包括,关键度模块中的关键度分配模块按照不同节点的达到平衡分布的mr的值进行服务关键度的排序。
结合第一方面的第二种情况,在第一方面可能的实现方式中的第三种情况为:
所述pagerank函数模块通过迭代计算其所述每个服务的mr值包括:pagerank函数模块选取某一服务及调用该服务的服务,所述该服务的mr值为所述调用该服务的服务的mr值除以所述调用该服务的服务调用其他服务的调用关系的个数的值的求和。
其计算公式如下:
其中
结合第一方面的第三种情况,在第一方面可能的实现方式中的第四种情况为:
所述分配初始mr值后,pagerank函数模块迭代计算其经过修正的所述服务的mr值,直至所述服务的mr值达到平衡分布。
结合第一方面及第一方面的第四种情况,在第一方面可能的实现方式中的第五种情况为:
所述经过修正的所述服务的mr值为,所述服务调用至少一个不存在调用其他服务的服务时,对所述服务的mr值进行修正,增加阻尼系数q,将所述服务的mr值根据公式mr*q+1-q进行计算修正。
结合第一方面的第五种情况,在第一方面可能的实现方式中的第六种情况为:
所述阻尼系数q为0.85,所述阻尼系数q表示所述服务调用达到某个节点并继续向下调用的概率,所述1-q=0.15表示所述服务调用停止的概率。
第二方面,一种系统服务重要程度评级系统,所述系统包括:
关键度模块,用于获取系统中所有服务及服务的调用关系,生成数据集合,调用pagerank函数计算出每个服务的mr值,根据所述各服务的mr值分配各服务的关键度;
其中所述关键度模块还包括服务获取模块,pagerank函数模块,关键度分配模块;
所述服务获取模块,用于获取系统中所有服务及服务的调用关系,生成数据集合;
pagerank函数模块,用于利用networkx图分析工具生成服务及服务调用关系的有向图,利用pagerank函数计算服务的mr值;
关键度分配模块,用于根据所述服务的mr值分配关键度。
第三方面,一种系统服务重要程度评级系统装置,所述系统装置包括:
关键度模块,用于获取系统中所有服务及服务的调用关系,生成数据集合,调用pagerank函数计算出每个服务的mr值,根据所述各服务的mr值分配各服务的关键度;
其中所述关键度模块还包括服务获取模块,pagerank函数模块,关键度分配模块;
所述服务获取模块,用于获取系统中所有服务及服务的调用关系,生成数据集合;
pagerank函数模块,用于利用networkx图分析工具生成服务及服务调用关系的有向图,利用pagerank函数计算服务的mr值;
关键度分配模块,用于根据所述服务的mr值分配关键度;
还包括存储器、处理器、总线,所述处理器同所述存储器通过总线进行数据连接,所述存储器存储有多条操作指令,所述处理器加载所述操作指令并执行,实现第一方面及第一方面可能实现的多种情况。
有益效果:将大型软件系统中各服务或模块的重要程度加以排名,重要的服务排名靠前,不重要的服务排名靠后,从而可以挑选重点模块或者服务加以关注,提升工作效率,方便软件运维人员有侧重点的部署重要服务,开发人员有侧重点关注开发服务,提高软件系统整体的健壮性。
附图说明
图1为本发明所述方法的流程示意图;
图2为本发明所述系统s的有向图;
图3为本发明所述的服务及调用关系数据集合示意图;
图4为本发明所述的调用networkx图分析工具包的pagerank()函数示意图;
图5为本发明所述的各服务的mr值及关键度排名示意图;
图6为本发明的包含服务e的系统s的有向图;
图7为本发明的系统框架图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一:
如图1所示,一种系统服务重要程度评级的方法,所述方法步骤为:
步骤101,所述关键度模块中的服务获取模块从数据库系统中提取系统中所有服务及服务的调用关系生成数据集合。
步骤102,关键度模块调用networkx图分析工具包设置服务为有向图的节点,服务之间的调用关系为有向图的边界,生成服务及服务调用关系的有向图。
步骤103,关键度模块调用pagerank函数模块给所述每个服务预先分配初始mr值,所述mr值为各个服务被调用的概率。
步骤104,分配初始mr值后,pagerank函数模块通过迭代计算其所述每个服务的mr值,直至所述每个服务的mr值达到平衡分布。
步骤105,所述关键度模块中的关键度分配模块根据所述各服务的mr值分配各服务的关键度。
本发明是在大型软件系统中,以软件系统中的每个服务之间的调用依赖关系数据为基础,通过networkx图分析工具包的pagerank算法从调用关系数据中分析出各个服务重要程度,并数字化这个重要程度,使每个服务在系统中的重要程度有个直观的高低之分。
该算法的简单原理为:如果一个模块或服务被很多其他模块或服务调用的话,说明这个模块或服务比较重要,也就是重要程度值会相对较高。如果一个重要程度值很高的模块或服务调用一个其他模块或服务,那么这个被调用到的模块或服务的重要程度值会相应地因此而提高。该算法类似于互联网中网页排名的pagerank算法。每个服务在系统中的重要程度称之为modulerank(简称mr值)。
实施例二:
接下来,通过一个例子详细讲解所述一种系统服务重要程度评级的具体方法步骤。
如图2所示,假设所述复杂的系统s中有4个服务分别为a、b、c、d,其中每个服务的调用关系如图中带箭头的连线所示。
步骤201,所述服务获取模块从数据库系统中提取系统中a、b、c、d四个服务及每个服务的调用关系数据集合{(a,b),(a,c),(a,d),(b,a),(b,d),(c,a),(d,b),(d,c)}。如图3所示,在实际的系统中存在许多的服务及调用关系,其生成的数据集合的数据量十分庞大,其具体格式如图所示。
步骤202,关键度模块调用networkx图分析工具包设置a、b、c、d四个服务为有向图的节点,a、b、c、d四个服务之间的调用关系为有向图的边界,生成服务及服务调用关系的有向图。如图2所示,带箭头的连线代表两个服务之间的调用关系,例如b->a表示b服务调用了a服务。
步骤203,关键度模块调用pagerank函数模块给预先分配一个初始mr值给所述a、b、c、d四个服务。所述mr值为a、b、c、d四个服务被调用的概率,所以一般是1/n,其中n为系统模块总数。本实施例中n为4,所以初始mr值为0.25,即a、b、c、d四个服务的初始mr值为0.25。
步骤204,分配初始mr值后,pagerank函数模块通过迭代计算其所述a、b、c、d四个服务的mr值,直至所述a、b、c、d四个服务的mr值达到平衡分布。所述计算方法如下:
结合图2,以服务a为例。
如图2所示,服务a有2个入边,分别连接服务b、服务c,即表示服务a需要被服务b和服务c调用,此时服务a的mr值可以表示为mr(a)=mr(b)+mr(c);
然而服务b有两条出边,分别指向服务a和服务d,即服务b调用服务a的可能性为mr(b)/2;服务c有一条出边,指向服务a,即服务c调用服务a的可能性为mr(c)/1。
按照公式:
对mr(a)应该修正为:mr(a)=mr(b)/l(b)+mr(c)/l(c),其中
以此类推,可以得出mr(b)=mr(a)/3+mr(d)/2=0.20833333,mr(c)=mr(a)/3+mr(d)/2=0.20833333,mr(d)=mr(a)/3+mr(b)/2=0.20833333。
然后不同进行迭代计算,将每次计算后的mr(a)、mr(b)、mr(c)、mr(d)的值带入上述的计算公式中再次计算,如:
将mr(b)=0.20833333、mr(c)=0.20833333带入公式mr(a)=mr(b)/2+mr(c),计算出mr(a)=0.31249995。
将mr(a)=0.375,mr(d)=0.20833333带入公式mr(b)=mr(a)/3+mr(d)/2,计算出mr(b)=0.22916667。
将mr(a)=0.375,mr(d)=0.20833333带入公式mr(c)=mr(a)/3+mr(d)/2,计算出mr(b)=0.22916667。
将mr(a)=0.375,mr(b)=0.20833333带入公式mr(d)=mr(a)/3+mr(b)/2,计算出mr(b)=0.22916667。
不断的迭代计算直至mr(a)、mr(b)、mr(c)、mr(d)的值达到平衡分布,及所述mr值的波动范围在±0.001之间。
以服务a为例,所述平衡分布为所述上一次mr(a)值同此次mr(a)的差值在波动范围±0.001之间,服务a的mr值就确定下来不再进行迭代计算,其他服务继续进行迭代计算,直至所有服务的mr值均达到平衡分布。
实际使用中,所述系统每天会重新对系统内的服务的mr值进行一次计算,保证各服务的mr值能够实现实时更新,及时反映系统中各服务的关键度。
如图4所示,系统根据所编写的python脚本,调用networkx图分析工具包的pagerank()函数,计算得出每个服务的mr值。
步骤205,关键度分配模块根据所述mr(a)、mr(b)、mr(c)、mr(d)的达到平衡分布的值,给a、b、c、d四个服务分配各服务的关键度。由上述计算可知,服务a被调用的概率最高,即服务a的关键度最高,服务b、c、d的关键度相同。在实际部署中加强对服务a的硬件环境配置,从而保证服务a的健壮性。如图5所示,实际系统中的服务基数较多,且每个服务之间的mr值都会有些许差别或差别较大,以实际的服务基数及服务调用关系而定,根据所述mr值从高到低对系统中的所有服务进行关键度排名。
实施例三:
实际情况中会出现系统中的某些服务没有调用其他服务的情况,也被称为孤立服务。反应在networkx图上就如图6所示,服务e没有出边,没有调用a、b、c、d四个服务,则l(e)为0。因此,出现针对系统中的孤立服务,需要对mr值公式进行修正,即在简单的公式的基础上增加了阻尼系数q,其意义是,在任意时刻,调用达到某个服务并继续向下调用的概率,1-q就是调用停止的概率。经分析得出,阻尼系数q取值0.85时,其修正效果最佳。
如图6所示,已服务a为例。
结合实施例二可知,mr(a)=mr(b)/l(b)+mr(c)/l(c)+mr(e)/l(e),因为此时l(e)=0,即服务e没有出边,没有调用a、b、c、d四个服务,所以此时需要对公式mr(a)=mr(b)/v+mr(c)/l(c)+mr(e)/l(e)进行修正。加入阻尼系数q,所述公式修正为mr(a)=(mr(b)/l(b)+mr(c)/l(c))*q+1-q,将数值带入公式中得出mr(a)=0.46875。所述mr(b)、mr(c)、mr(d)均根据实际被调用服务的调用情况按上述修正方法进行修正,并进行迭代计算直至所述mr值达到平衡分布。
实施例四:
如图7所示,基于上述方法,本发明提供了一种系统服务重要程度评级系统,所述系统包括:
关键度模块,用于获取系统中所有服务及服务的调用关系,生成数据集合,调用pagerank函数计算出每个服务的mr值,根据所述各服务的mr值分配各服务的关键度;
其中所述关键度模块还包括服务获取模块,pagerank函数模块,关键度分配模块;
所述服务获取模块,用于获取系统中所有服务及服务的调用关系,生成数据集合;
pagerank函数模块,用于利用networkx图分析工具生成服务及服务调用关系的有向图,利用pagerank函数计算服务的mr值;
关键度分配模块,用于根据所述服务的mr值分配关键度。
基于上述系统,本发明还提供了一种系统服务重要程度评级系统装置,所述系统装置包括:
关键度模块,用于获取系统中所有服务及服务的调用关系,生成数据集合,调用pagerank函数计算出每个服务的mr值,根据所述各服务的mr值分配各服务的关键度;
其中所述关键度模块还包括服务获取模块,pagerank函数模块,关键度分配模块;
所述服务获取模块,用于获取系统中所有服务及服务的调用关系,生成数据集合;
pagerank函数模块,用于利用networkx图分析工具生成服务及服务调用关系的有向图,利用pagerank函数计算服务的mr值;
关键度分配模块,用于根据所述服务的mr值分配关键度;
还包括存储器、处理器、总线,所述处理器同所述存储器通过总线进行数据连接,所述存储器存储有多条操作指令,所述处理器加载所述操作指令并执行,实现说明书中的方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所描述的装置实施例仅仅是示意性的,可以是设计成一体设备,也可以是组合成一套设备,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件和必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。