跨系统接口的服务链监控

SOA团队 2020-03-16

由于所有跨系统的接口服务都通过ESB服务总线进行封装代理后接入,因此理论上说从实际业务服务调用实例数据和日志中是可以反推出来端到端的业务流程的,也就是可以通过服务实例和服务链的监控来间接的监控跨系统的业务流转是否正常。简单来说,比如一个采购订单,基于一个采购订单号,我们实际上可以通过服务监控数据来分析到该订单是否已经从采购系统导入到ERP,是否已经进行了报账申请,是否已经进行了付款等,实际上这些信息从服务实例日志中都可以提取出来。

要完成这件事情,有两个关键点要做,即首先要对服务链本身进行进行服务链流程建模,其次是能够对采集的日志的输入输出中能够抓取出结构化的关键业务字段信息。只要做到这两点,我们就很容易实现可视化的跨系统服务链监控功能。

服务链流程建模的功能实现

在前面我们做ESB服务设计器的时候,已经剥离了原流程引擎中进行服务编排或可视化流程建模的能力。实际上这里的设计本身也就是一个多个服务编排设计的过程,将多个服务编排设计到一起。注意在这个过程中还需要允许有分支,也允许并行。服务链监控最终形成的也是一个完整的服务链监控树。只是这个监控树的形成是通过可视化的服务组合编排工具来实现的而已。

针对不同的跨系统业务监控,都需要针对不同场景设计不同的服务监控模型。比如现在设计一个采购订单服务链监控模型,我们建设对该模型进行简化,具体如下通过建模工具形成如下模型树。

合同导入服务-》采购订单导入服务-》采购接收服务-》报账申请服务-》应付发票导入服务-》付款服务。

即在这些服务组合编排好后,我们需要维护对于每个服务对于的业务关键字提取字段,即可以根据XPath方式来说明是从XML结构里面哪里去提取关键的业务字段值,如采购订单号。那么我们在查找实例的时候主要就是用这个来解析业务报文里面的内容进行匹配。一个服务本身运行涉及到成功和失败,在流程实例查看的时候,最好方式是成功类服务和失败类服务单独进行显示,以方便区分,同时如果该服务运行成功,未运行或运行失败都能够有明确的背景色分开展示。

注意,在上面这个服务链里面本身是存在1对多映射关系的。这种映射关系全部在点击流程活动节点的时候再去显示明细。对于两个活动节点之间本身是1对1映射还是1对多,也可以在监控模板设置的时候进行维护。

业务日志采集和查询

采用基于Solr进行业务关键字查询和报文日志全文检索。即我们不再需要对服务运行报文数据全部进行结构化数据,只需要对这些数据建立元数据索引信息,有了索引后Solr基本就可以快速的检索和定位到具体的服务。

对于当前的服务日志,我们已经完成了将Blob结构的数据准实时的采集并提取索引信息,进入到Solr库,实现了基于业务关键字的服务实例查询能力,而原来我们只能基于服务实例号进行服务日志的查询。基于Solr查询速度相当快,基本都是10多毫秒就能快速的完成服务日志的检索能力。在Solr实现了索引数据的创建,基于业务关键字的查询能力后,接下来分析如何和服务链监控进行整合。

举例来说,对于采购订单服务链监控,进入该功能后我们直接输入采购订单号,然后基于订单号我们做如下事情:

1. 首先找到采购订单服务链监控流程模板,然后基于流程模板知道涉及哪些服务。

2. 找到流程模板中维护的Xpath检索项。

3. 基于Xpath检索项找的信息,拼装Solr查询关键字,然后进行Solr查询查找到对应服务日志记录。

4. 将服务日志记录提取出来对应到流程实例具体的活动节点上面。形成关联,并区分成功失败,当前状态。

5. 完成流程实例图的显示。

最终完成的服务链监控效果图参考如下:

对于服务链监控,按照前面的思路完全可以做到通过服务的监控和关联,来逆向实现跨系统交互流程的监控,即从服务链为主的监控转变到跨系统流程交互的监控。其本质仍然是跨系统间的接口服务集成和协同。

整体思路,仍然是先进行跨系统交互流程建模,如下就是一个最简单的模型:

我们完全可以采用流程设计和建模工具来完成上图的流程模型,当然如果采用类似支持BPMN标准的流程建模工具还可以进一步完成类似含职能带的跨系统交互流程图。

在这个跨系统交互流程图中,衔接各个业务系统的仍然是相互之间的接口和服务,我们仍然是按照一个核心单据为基本元素来进行设计,比如项目编号,合同编号,采购订单编号等。以这个编号来完成整个跨系统端到端流程的分析。

在建模的过程中,两个系统间的连接线就是关键的服务,但是由于不是直接的服务间的连接,因此仍然需要建立服务之间的关联性。比如我们整体跨系统监控都是以采购订单号来进行跟踪的话,我们就需要定义采购订单这个元素在每一个接口服务中对应的XML-Element的位置,以确保这些服务之间本身能够关联起来。

整体我们看到实现的思路和服务链监控基本相同。

仍然是先根据业务关键字查询功能,精确查询出相关的服务实例数据。然后将服务实例数据映射到流程图上面,形成流程图实例。对于已经成功运行的服务标注为绿色,对于接口调用失败的服务标注为红色,对于还没有执行到的服务标注为灰色。

同时更加有意义的事情是,我们完全可以用动画效果模拟这个跨系统接口交互流程。即能够动态的看到各个接口被触发和调用的前后顺序。同时看到前后接口触发的大致时间间隔信息。通过这种实现能够很方便我们实现围绕核心业务对象的端到端流程监控能力。

当然这是一种变通的端到端流程监控实现思路,核心是先进行流程建模,然后再通过业务关键字检索功能动态搜索匹配的服务日志调用数据,再对流程图进行实例化解析。由于采用了Solr全文检索能力,这个比我们完全自顶向下的来进行端到端流程监控实现更加高效。

从以服务为核心的监控转到以跨系统交互活动为核心,以实现了服务链监控到端到端流程监控的转变。

返回上页