系统部署与依赖关系自动绘制系统及方法与流程

文档序号:15615621发布日期:2018-10-09 21:18阅读:431来源:国知局

本发明属于数据分析技术领域,涉及能够自动绘制系统部署与依赖关系的系统及方法。



背景技术:

互联网企业一般使用大量的应用系统,除了对外开放的网站、app等,内部也会有很多应用系统支撑企业的运营、管理。内部的应用系统间通常存在较复杂的调用关系,一个系统提供给另一个系统调用的某一功能称之为服务。互联网企业的系统类型也很复杂,有传统的web应用也有新型的微服务应用。系统部署与依赖关系图是一种能够反应系统部署和复杂系统间关系的图,常常用作架构决策和复杂系统问题定位的重要依据,其重要性不言而喻。业界目前普遍采用人工的方式绘制系统部署与依赖关系图。

人工绘制方式速度较慢,且效率低下,显然存在以下局限性:

1.更新慢。互联网的发展一日千里,互联网企业的系统间的依赖关系也是日新月异;而依赖关系图作为一项费时费力的工作只能定期更新,无法做到与时俱进。特别是随着云技术的发展与成熟,系统的实际部署更加动态化、智能化,变化更加频繁,人工无法做到同步更新。

2.不能完全反应客观情况。系统复杂后,人力无法整理全所有的关系、常见的绘图软件也无法承载成千上万的依赖关系。



技术实现要素:

为解决上述问题,本发明公开了系统部署与依赖关系自动绘制系统及自动绘制方法,通过调用日志数据的采集与分析,能够快速准确地制作系统部署与依赖关系图。

为了达到上述目的,本发明提供如下技术方案:

系统部署与依赖关系自动绘制方法,包括如下步骤:

step1,采集实例间服务调用日志,日志包含以下信息:调用时间、调用方ip和端口号、被调用方ip和端口号、调用的服务标识;

step2,整理日志中的所有实例间调用关系及其调用的服务,整理出每个实例上提供的所有服务,并对实例和服务进行分组,令分组完成后各组内的实例和服务均无交集,每个组对应一套系统,针对每个实例查找其对应的分组后系统或边缘系统,根据日志中实例间调用关系及服务、结合实例与系统的映射关系得到所有系统间的调用关系;

step3,绘制系统部署及调用关系图,图上先排列系统分组的矩形框,再绘制系统的小图标,关系图上能够显示系统的部署详情和上下游关系。

进一步的,所述step2具体包括如下步骤:

step2-1,根据日志信息,得到所有的调用方实例调用被调用方实例以及被调用服务的关系data;

step2-2,分析step2-1提供服务的实例与服务的关系,整理出每个实例上提供的所有服务,记作map;

step2-3,嵌套循环遍历map,对实例和服务进行分组,令分组后任意两个组之间的实例和服务均没有交集,分组后的数据记作deploy,每一个组对应逻辑上独立部署的一套系统,每个分组记录了每个系统提供的服务列表、部署的实例列表;

step2-4,整理deploy中每一个系统的系统码;

step2-5,给予系统唯一标识;

step2-6,根据data获取所有的实例标识,整理全部的实例列表instancelist;

step2-7,遍历instancelist中的每一个实例,查找其在deploy中对应的系统,从而得到实例与系统的关系记入instancebelong中;如果实例在deploy中不存在对应系统,则结合边缘系统ip与系统码的对应关系,得到实例与边缘系统的映射关系记入cnode中;

step2-8,将data中的客户端实例、服务端实例,结合instancebelong、deploy、cnode进行查找,得到所有系统间的调用关系。

进一步的,所述step2-3包括如下子步骤:

1)从一个未分组的实例a开始,将实例a放到到一个新分组中去;

2)如果实例a所在的分组提供的服务列表与未分组实例b提供的服务列表交集不为空,就将实例b划分到实例a所在组中去;重复该过程直到实例a所在的组与未分组的实例服务列表交集均为空为止;

3)从1)开始重复执行,直到所有的实例都完成了分组。

进一步的,所述step2-8包括如下子步骤:

初始化空变量link_temp,遍历data:

1)取得客户端实例,客户端ip,服务端实例,客户端实例调用服务端实例的服务service;

2)从instancebelong查找客户端实例的归属系统,如果没有就从cnode中查找包含了客户端实例的系统,如果还没有就查找cnode中包含了客户端ip的系统,如前述查找中能够查到对应系统将其记为c;都找不到就进入下一次循环;

3)从deploy中查找包含了服务service的系统,如果没有就从instancebelong找出服务端实例对应的系统,如前述查找中能够查到对应系统将其记为s,如果都找不到就进入下一次循环;

4)在link_temp中记录系统c调用了系统s的服务service;

5)link_temp数据去重,整理数据格式,得到系统间调用的服务列表。

进一步的,所述step3具体包括如下子步骤:

step3-1,在浏览器中打开链接,加载必要的html、css、js以及数据deploy、cnode、link、系统码与业务域的对应关系;

step3-2,获取展示区的宽度gw、系统图标的宽度sw和高度sh、系统图标之间的横向间隔pw和纵向间隔ph、域框中建议最大系统行数ml、域区域横向间隔dpw,域区域纵向间隔dph;

step3-3,计算展示区只排列系统图标的情况下每一行最多可以排列的系统数:cols=(gw+pw)/(sw+pw)并向下取整;计算每个域所在行推荐容纳的系统数量:dm=cols*ml;

step3-4,从左上开始排列业务域,在离dm最近的地方进行换行;

step3-5,计算每个业务域矩形框的尺寸;

step3-6,从左上角开始依次绘制每个域的矩形;

step3-7,在每个域的矩形中逐个绘制系统图标;

step3-8,在鼠标激活系统图标时,从link中提取出该系统的客户方系统,绘制这些系统指向该系统的箭头;从link中提取出该系统的服务方系统,绘制该系统指向这些系统的箭头;弹层显示该系统提供的所有服务、部署的所有实例。

进一步的,所述step3-4具体包括如下子步骤:

初始化一个空行,遍历业务域:

1)当前行中系统数量记为lt,当前域中系统数量记为t,令st=lt+t;

2)如果st<=dm,将该域添加进该行;否则执行3)

3)如果(st-dm)>(dm-lt),则初始化一个新行,该域添加到新行中,当前行变为新行,否则该域添加到该行中,初始化一个新行,后续的系统添加到新行中;

4)重复1)-3),直到所有的域都处理完,其结果记为domainlines。

进一步的,所述step3-5具体包括如下子步骤:

遍历domainlines:

1)当前行中域的数量为dc,系统数量为sc,通过下式计算当前行扣除域框间隙后每行最多可以容纳的系统数:cn=(gw+pw*dc-dpw*(dc-1))/(sw+pw)并向下取整;

2)计算排列当前行中所有系统全部排完所需的行数,rn=sc/cn并向上取整;

3)rn_temp从rn开始以1递增

i.tcn=0,遍历该行中每个域,

1.当前域中系统数量为dsn,mincols=dsn/rn_temp并向上取整,tcn+=mincols

ii.当tcn<=cn时,记录下每个域的mincols,rn=rn_temp,结束循环

4)通过下式计算行高,同时也是该行中所有域的统一高度:height=(sh+ph)*rn;

5)通过下式计算行剩余长度tail=gw+pw*dc-dpw*(dc-1)-(sw+pw)*tcn,取得被除数tail对除数dc的商diff和余数diffnum;

6)计算每个域的宽度,该行中前diffnum个域的宽度计算方法为:width=(sw+pw)*mincols-pw+diff+1,其他域的宽度计算方法为:width=(sw+pw)*mincols-pw+diff。

本发明还提供了系统部署与依赖关系自动绘制系统,包括:系统间服务调用日志模块、系统部署服务及依赖关系分析模块、系统部署及依赖关系展示模块、静态数据管理模块;所述系统间服务调用日志模块用于采集实例间服务调用日志;系统部署服务及依赖关系分析模块用于基于系统间服务调用日志模块采集到的日志进行分析,分析系统实际部署、实例和服务的归属关系、边缘系统信息三份数据,整理日志中的所有调用关系,整理所有系统及其实例和服务列表,最终整理得出系统间调用关系;所述系统部署及依赖关系展示模块用于绘制系统部署及调用关系图,展示图上先排列系统分组的矩形框,再绘制系统的小图标,并能够在点击系统图标后显示该系统的部署详情和上下游关系;所述静态数据管理模块用于管理边缘系统ip与系统码的对应关系、系统码与业务域的对应关系。

进一步的,所述系统部署及依赖关系展示模块绘制在满足定宽和同组系统整齐排列在一起的条件下,采用特定排版方法使得所需的版面高度最小。

与现有技术相比,本发明具有如下优点和有益效果:

1.本发明能够通过分析系统间的调用日志得到系统的部署信息、服务清单和相互间的依赖关系,并予以展示,与传统方法相比,大大提高了制作速度,且可以根据需要随时进行更新,可完全替代人工操作,降低人力成本。

2.在分析系统间的调用日志时,基于图论将系统提供的服务抽象为点,将部署在同一个实例这样的关系抽象为线,构成了一幅图;对图上点进行了社群发现,整理出了系统清单、实例部署清单、提供的服务清单,在分析系统间的调用日志时,通过实例与系统的映射关系,整理出了系统与系统间的依赖关系;准确度更高,完全基于系统的行为进行分析,梳理出了全部的依赖关系,没有遗漏和错误。

3.本发明在绘制全部系统部署及调用关系图时,采用特定排版方法,使分组后的系统排列更紧凑。

附图说明

图1为本发明提供的系统部署与依赖关系自动绘制方法整体步骤流程图。

图2为日志格式示例图。

图3为步骤2中子步骤流程图。

图4为日志中实例间调用关系示例图。

图5为map分组前后示意图。

图6为展示区域示意图。

图7为步骤3中子步骤流程图。

图8为最终绘制出的系统部署及依赖关系图,其中系统按业务域分组排列。

图9为用鼠标激活系统图表时,页面状态示意图。

具体实施方式

以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。

本发明将应用系统(application)在服务器上的一个具体部署称之为实例(instance),实例由其所占用的ip和端口号唯一标识。本发明提供的系统部署与依赖关系自动绘制方法如图1所示,包括如下步骤:

step1,采集与存储实例间服务调用日志。

本发明中一个实例调用另一个实例的某一服务后,会记录下调用日志(如下图所示),日志中包含以下信息:调用时间(starttime)、调用方ip(consumerip)和端口号(consumerport)、被调用方ip(serviceip)和端口号(serviceport)、调用的服务标识(servicename)、成功与否(success)。使用logstash这一开源工具存储了这些日志,在调用行为结束后2秒内就能将数据保存下来,存储数据格式如图2所示。

step2,整理日志中的所有调用关系,整理所有系统及其实例和服务列表,最终整理得出系统间调用关系。具体如图3所示,包括以下步骤:

step2-1,汇聚日志信息,得到所有的调用方实例调用被调用方实例以及服务端实例某一服务的关系。本发明中使用logstash分析最近一段时间的日志,分析出所有存在的调用关系,即穷举出所有存在的a实例调用b实例的c服务这样的关系(如图4所示),将其记作data。

step2-2,分析提供服务的实例与服务的关系。对data进行处理,将“serviceip:serviceport”作为实例的唯一标识,整理出每个实例上提供的所有服务(servicename),使用array("实例1"=>array("服务1","服务2"))的形式保存,记作map。将服务作为点、部署在同一实例上的服务两两之间画线,两个点之间直接的连线包含了所有同时提供了这两个服务的实例,构成一幅图,如图5中上半部分未分组前状态。

step2-3,嵌套循环遍历map对实例和服务进行分组:

1)从一个未分组的实例a开始,将实例a放到到一个新分组中去;

2)如果实例a所在的分组提供的服务列表与未分组实例b提供的服务列表交集不为空,就将实例b划分到实例a所在组中去;重复该过程直到实例a所在的组与未分组的实例服务列表交集均为空为止。

3)从1)开始重复执行,直到所有的实例都完成了分组。

分组后,任意两个组之间的实例没有交集、任意两个组之间的服务也没有交集,每一个组就对应逻辑上独立部署的一套系统。将分组后的数据记为deploy,其记录了每个系统提供的服务列表、部署的实例列表。分组后即找出图上所有的社群,每一个社群对应一个应用系统,社群中的点即该系统可以提供的服务,两个点之间直接的连线包含了所有同时提供了这两个服务的实例,线去重后即该系统部署的具体实例,如图5中下半部分所示。

step2-4,将deploy中每一个系统的实例、服务都按照字母序排列;服务名的第一段为系统码,取对应服务数量最多的系统码作为聚合后系统的系统码。

step2-5,将deploy中的系统按照系统码、第一个服务名的字母序进行排列;遍历deploy中的系统,如果系统码首次出现则直接作为系统唯一识别码,为系统命名;如果不是首次出现,则在系统码后添加数字直到生成首次出现的字符串作为系统的唯一识别码。处理好的数据deploy就是系统实际部署的数据了。

本领域内普通技术人员也可以采用其他数据、信息来作为系统码,只要能够唯一标识各个系统即可。

step2-6,对data中的数据进行处理,获取所有的实例标识(ip+端口号),即所有的“serviceip:serviceport”组合和“consumerip:consumerport”组合,整理全部的实例列表,记作instancelist。

step2-7,遍历instancelist中的每一个实例,查找其在deploy中对应的系统,从而得到实例与系统的关系;如果查找时存在对应系统,则将实例及对应系统唯一标识的关系记入instancebelong中去;如果不存在对应系统,则结合边缘系统ip与系统码的对应关系(由静态数据管理模块提供),将系统码与实例的关系记入cnode中去。instancebelong记录了实例归属于哪一个系统,cnode记录了边缘系统包含的实例列表。通过本步骤,整理得出实例与系统,以及实例与边缘系统的映射关系。

step2-8,将data中的客户端实例、服务端实例都反查为系统,即可得到所有系统间的调用关系。结合instancebelong、deploy、cnode,将data处理成link,其中记录了系统之间调用的服务列表,即系统a调用系统b的服务列表。本步骤处理过程具体包括:

初始化空变量link_temp,遍历data:

1)取得客户端实例a,客户端ipa1,服务端实例b,a调用b的服务service;

2)从instancebelong查找实例a的归属系统,如果没有就从cnode中查找包含了实例a的系统,如果还没有就查找cnode中包含了a1的系统,记为c;都找不到就进入下一次循环;

3)从deploy中查找包含了服务service的系统,如果没有就从instancebelong找出实例b对应的系统,记为s,如果都找不到就进入下一次循环;

4)在link_temp中记录系统c调用了系统s的服务service;

5)link_temp数据去重,整理数据格式,得到{"c->s":[service1,service2,...]}这样的格式数据,记为link,即系统间调用的服务列表。

step3,使用web技术,绘制系统部署及调用关系图。最终展示图上先排列系统分组的矩形框(即业务域的框),再绘制系统的小图标,点击系统图标后显示该系统的部署详情和上下游关系。

作为改进,本发明在满足定宽和同组系统整齐排列在一起的条件下,找到了一种可行的排版方法使得所需的版面高度最小。本步骤如图7所示,具体包括如下过程:

step3-1,在浏览器中打开链接,加载必要的html、css、js以及数据deploy、cnode、link、系统码与业务域的对应关系。

step3-2,获取展示区的宽度gw、系统图标的宽度sw和高度sh、系统图标之间的横向间隔pw和纵向间隔ph、域框中建议最大系统行数ml、域区域横向间隔dpw,域区域纵向间隔dph;版面示意图如图6所示。

step3-3,计算展示区只排列系统图标的情况下每一行(这里的行是指版面上只排列系统图标、不排列域框时或者整个版面只有一个域框时,版面的行最大可以排列的系统数量)最多可以排列的系统数:cols=(gw+pw)/(sw+pw)并向下取整;计算每个域所在行(域所在行可以容纳多行系统)推荐容纳的系统数量:dm=cols*ml。

step3-4,从左上开始排列业务域,在离dm最近的地方进行换行。初始化一个空行,遍历业务域:

1)当前域所在行中系统数量记为lt,当前域中系统数量记为t,令st=lt+t;

2)如果st<=dm,将该域添加进该行;否则执行3)

3)如果(st-dm)>(dm-lt),则初始化一个新行,该域添加到新行中,当前行变为新行,否则该域添加到该行中,初始化一个新行,后续的系统添加到新行中;

4)重复1)-3),直到所有的域都处理完,其结果记为domainlines

step3-5,计算每个业务域矩形框的尺寸。遍历domainlines:

1)当前行中域的数量为dc,系统数量为sc,通过下式计算当前行扣除域框间隙后每行最多可以容纳的系统数:cn=(gw+pw*dc-dpw*(dc-1))/(sw+pw)并向下取整。

2)计算排列当前行中所有系统全部排完所需的行数,rn=sc/cn并向上取整。

3)rn_temp从rn开始以1递增

i.tcn=0,遍历该行中每个域,

1.当前域中系统数量为dsn,mincols=dsn/rn_temp并向上取整,tcn+=mincols

ii.当tcn<=cn时,记录下每个域的mincols,rn=rn_temp,结束循环

4)通过下式计算行高,同时也是该行中所有域的统一高度:height=(sh+ph)*rn;

5)通过下式计算行剩余长度tail=gw+pw*dc-dpw*(dc-1)-(sw+pw)*tcn,取得被除数tail对除数dc的商diff和余数diffnum;

6)计算每个域的宽度,该行中前diffnum个域的宽度计算方法为:width=(sw+pw)*mincols-pw+diff+1,其他域的宽度计算方法为:width=(sw+pw)*mincols-pw+diff

step3-6,从左上角开始依次绘制每个域的矩形;

step3-7,在每个域的矩形中逐个绘制系统图标,绘制好的系统图标如图8所示;

step3-8,在鼠标激活系统图标时,从link中提取出该系统的客户方系统,绘制这些系统指向该系统的箭头;从link中提取出该系统的服务方系统,绘制该系统指向这些系统的箭头;弹层显示该系统提供的所有服务、部署的所有实例,如图9所示。

为了实现上述方法,本发明还提供了系统部署与依赖关系自动绘制系统,包括:系统间服务调用日志模块、系统部署服务及依赖关系分析模块、系统部署及依赖关系展示模块、静态数据管理模块。其中,系统间服务调用日志模块用于采集实例间服务调用日志,使用logstash这一开源工具存储了这些日志,实现上述步骤1功能;系统部署服务及依赖关系分析模块用于基于系统间服务调用日志模块采集到的日志进行分析,定时分析系统实际部署、实例和服务的归属关系、边缘系统信息三份数据,整理日志中的所有调用关系,整理所有系统及其实例和服务列表,最终整理得出系统间调用关系,实现上述步骤2功能。定时分析为优选方式,根据需要也可以实时进行分析,从而实现系统部署与依赖关系的实时绘制与更新。系统部署及依赖关系展示模块用于使用web技术,绘制系统部署及调用关系图,展示图上先排列系统分组的矩形框,再绘制系统的小图标,并能够在点击系统图标后显示该系统的部署详情和上下游关系,实现上述步骤3功能。作为改进,系统部署及依赖关系展示模块在满足定宽和同组系统整齐排列在一起的条件下,采用特定排版方法使得所需的版面高度最小。而静态数据管理模块用于管理边缘系统ip与系统码的对应关系、系统码与业务域的对应关系,这些信息从外部引入,通过人工进行维护,比如从运维处了解边缘系统分别使用了哪些ip、从系统管理处了解系统与业务域的对应关系。

本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1