Page 108 - 《软件学报》2021年第9期
P. 108

2732                                 Journal of Software  软件学报 Vol.32, No.9,  September 2021




                                                     原测试用例集

                     API网关层日志挖掘                 测试用例关联                  测试用例集缩减

                        数据预处理                    测试用例匹配                   启发式搜索
                                     服务调用                     带支持度的
                                     频繁路径                     测试用例集
                       频繁模式挖掘                    支持度归一化                   覆盖性判定       测试用例缩减集
         API网关层日志

                                     Fig.1    Sketch map of the method process
                                            图 1   方法过程示意图
         2.1   API网关层日志挖掘
             该环节从 API 网关层日志中挖掘出服务调用频繁路径,主要包括数据预处理和频繁模式挖掘两项活动.其
         中:数据预处理从日志数据中构造用户请求链并生成待挖掘的事务集,频繁模式挖掘则基于挖掘算法从事务集
         中抽取服务调用频繁路径.
         2.1.1    数据预处理
                                                                                               [9]
             数据预处理是从原始数据中获得挖掘所需格式化数据的重要过程,一般占整个数据挖掘工作量的 60% .
         微服务系统中的 API 网关日志,其形式可能随系统运维要求、记录机制等各有不同,但一般都包含了请求时间、
         请求者地址、服务名称、负载均衡器分配的服务实例地址、状态码、响应时间、http 代理等信息.本方法即针
         对包含上述信息的 API 网关日志进行预处理,包括数据清洗、用户请求识别、用户请求链生成和事务集生成等
         4 个步骤.
             (1)  数据清洗
             数据清洗即是从 API 网关日志中剔除故障请求记录和系统信息(例如自检),仅保留请求成功记录,即响应
         状态码为“2xx”的请求记录,并从中筛选出上述所需字段信息,形成结构化数据集.
             (2)  用户请求识别
             API 网关日志中的请求包括来自系统外部的用户请求以及服务之间的调用请求,本步骤即是将用户请求记
         录识别出来,作为构造用户请求调用链的起点.可以采用以下规则识别出用户请求记录:
             规则 1.  若某请求记录的请求者地址不在微服务系统已注册服务列表中,则该请求是用户请求.
             微服务系统中的服务通常需要在服务注册中心进行注册和发布,例如 zookeeper 或者 eureka,如果能从中获
         得已注册微服务列表,就可以准确判定哪些请求是用户请求.该规则属于直接判定规则.该规则需要服务注册中
         心可用且已注册服务列表实时更新,否则判定会失效.
             规则 2.  若某请求记录的请求方代理为浏览器程序,则该请求是用户请求.
             用户发起的请求通常需要通过各种浏览器程序,例如 Chrome,Firefox 等等,如果 http 代理信息中包含这些
         浏览器程序信息,则该记录往往是用户请求记录.该规则属于间接判定规则,对于非人工的外部请求无法识别,
         同时还要维护用户使用的浏览器程序列表,以增加判定的准确性.
             规则 3.  解析出所有服务名称及其对应实例地址的列表,若某请求记录的请求者地址不在列表中,则该请求
         是用户请求.
             对于给定的 API 网关日志,需要关注的是被请求服务的情况,没有被请求的服务,可以认为不属于信息挖掘
         对象.该规则也属于间接判定规则,无需获取或维护额外信息,仅靠 API 网关日志信息即可进行判定;但对于日志
         增量的场景,则每次都需要重新扫描全部日志.
             应当根据实际应用来采用合适的判定规则.当然,还可以根据额外记录的日志信息来增加判定规则,例如增
   103   104   105   106   107   108   109   110   111   112   113