1.一种基于QOS的Ice服务监控方法,其特征在于,所述方法包括以下步骤:
1)、监控请求发起,运行流程如下:
1.1)发起监控请求;
监控系统客户端在初始化后处于等待状态,等待埋点在业务代码中的API被调用后激活,然后开始执行监控的流程,所以这个过程可以抽象为Ice服务向监控系统发起了一个监控的请求;
1.2)收集监控数据;
当监控请求已经发起,那么处于等待状态的监控线程组开始创建负责数据收集、系统状态监控和数据发送的线程实例,随着创建事务Transaction的API代码被调用,这三个线程实例开始发挥作用;
1.3)监控数据发送;
只有业务代码执行到监控API时,监控系统才会在这个时间点上采集数据作为一条独立的消息存入消息树结构中;而整个业务执行时间的统计依赖于事务Transaction,在业务执行结束时会自动将Transaction的状态设置为SUCCESS并调用complete()告知监控系统这个Transaction已经结束了;
1.4)数据的收集就是服务业务流程执行过程中不断调用监控API主动触发数据采集事件的流程,当Transaction结束后整个数据收集过程也随之结束,在监控系统中,Transaction扮演了一个“容器”的角色,它将同属于一个服务流程中所有监控API被调用产生的消息聚合在一起,与其他的Transaction有着很明显的界限;
2)、监控数据分析功:监控数据分析从逻辑上实现了监控消息接收与分配、监控数据处理和分析结果存储三个主要的功能,包括以下步骤:
2.1)在Netty接收端使用自定义解码器时引入了MessageHandler类的对象,当消息树被解码还原后调用handle()方法将消息树交给消费线程;消费线程可以通过findDistributor()方法直接找到正在运行的分配线程,然后将消息树交给分配线程;
2.2)消息树在Netty接收端解码时生成了不同类型消息的List,此时分配线程只需要将这些List分配至不同的分析器即可,不需要对消息树进行拆分;
2.3)监控数据的处理依赖于分析器实例,分析器从其等待队列中取出消息,利用外部导入的报表模型将消息处理成报表存入缓存,等待一个周期结束后将缓存中的内容写入本地文件和数据库中;
3)、监控数据展示,监控数据展示从逻辑上实现了报表读取、报表可视化展示、报告导出和数据输出地址修改;
4)、Ice服务替换,从逻辑上实现了工作流获取、服务测试调用、服务推荐模块调用和服务替换。
2.如权利要求1所述的一种基于QOS的Ice服务监控方法,其特征在于,所述步骤3)的过程如下:
3.1)报表读取虽然在后端将全部的报表数据放入了缓存中,但是数据展现在界面上需要经过二次读取和二次处理,而二次读取的数据依赖于用户在界面上选择的索引转化为的读取参数;报表读取类ReportLoader能够传递的数据包括以天为单位和以时间段为单位的两个索引、索引文件、某类型的全部报表和某个时间段的指定类型报表;在读取报表的过程中为了线程安全,采用了ReentrantLock可重入锁对文件和数据库进行限制,保证数据准确性;
3.2)报表的可视化展示使用JFreeChart工具在页面上生成表格和多种统计图,在用户切换索引时后端将读取新的数据转化为表格和统计图能够解析的数据集,在页面上重新生成表格或统计图组件覆盖原有的部分,完成页面的刷新;
3.3)报告导出可生成具有指定格式的PDF报告文件,报告的标题和正文字体统一设置,报告正文以服务名作为一级标题进行区分,在计算不同指标的加权平均值后借助JFreeChart工具生成统计图写入文件,每个服务名一级标题下的正文结构完全相同;
3.4)数据输出地址的主要功能是修改配置文件中的数据输出地址,这个地址用于存储报表文件、原始数据、系统日志和其他一些必要的临时文件。
3.如权利要求1或2所述的一种基于QOS的Ice服务监控方法,其特征在于,所述步骤4)的过程如下:
4.1)工作流的获取实现了从流程编排引擎获取的原始数据到可调用服务列表的转换,得到一个Map
4.2)服务测试调用对HashMap里的服务名进行遍历调用测试,如果某个服务调用失败则将HashMap里对应条目的Value改为true,代表需要进行替换;该部分需要经过测试远程服务是否可访问和测试调用两部分,为防止不可访问的服务拖延程序运行时间,在测试调用的部分设置了超时计时器,测试超时将直接设置该服务为状态异常;
4.3)服务推荐模块获得Value为true的Ice服务的同类服务,修改原有的工作流服务列表,将这个新的列表返回给流程编排引擎,完成服务替换。