Page 148 - 《软件学报》2020年第11期
P. 148

3464                                Journal of Software  软件学报 Vol.31, No.11, November 2020

                     1. 标记权重
                                                              5.2. 识别                  调整共享群组
                                                              共享群组
                              3. 收集      4. 构建数据                                   6. 生成数据表
                               日志        访问轨迹图                            共享群组       权重图
                      测试用例                                              ⎡ w 11    w 1n ⎤
                        +                                    5.1. 计算数据表 ⎢           ⎥
                                                               关联度矩阵    ⎢       ⎥
                                   监控日志          数据访问轨迹图                ⎢ ⎣  1 n w     w ⎥  数据表权重图
                                                                               nn⎦
                                                                          数据表
                     单体系统                                                关联度矩阵    7. 数据表图聚类
                                                         9. 自底向上搜索,
                                                        生成代码拆分方案
                    2. 配置监控工具                                                 8. 计算拆分开销,
                                                                               推荐最优方案
                                           最终推荐方案                     数据表               多个不同粒度的
                                                        手动调整         拆分方案
                                                       数据表的归属                           数据表拆分方案
                                                                                  调整服务数量或
                                                                                  拆分开销占比

                                    Fig.1    Microservice decomposition scheme generation process
                                               图 1   微服务拆分方案生成流程

                 2.1   生成数据访问轨迹图
                    本文使用场景级别的测试用例,即每个用例(use case)对应一个用户使用级别的场景(scenario).例如,一个管
                 理员发通告的场景,包含了查询办公室列表、根据办公室查询用户信息、保存通告内容、刷新页面这 4 个请求.
                 每个请求在服务器端产生一条方法调用链(trace),由处理这个请求所调用的一系列方法(method)组成,其中有些
                 方法会执行 SQL 语句(SQL)、对数据表(table)中的某些字段进行增删改查.图 2 的模型描述了上述概念和它们
                 之间的关系.收集所有测试用例执行的方法调用链,并将他们与对应的 SQL 语句、数据表相关联,就形成了一张
                 数据访问轨迹图.
                                             Scenario
                                                1...1
                                             Use case  Package
                                                1...*     1...*
                                                        Class
                                             Request
                                                1...1     1...*
                                                   1...*     0...*   1...*
                                             Trace     Method    SQL     Table
                                           Fig.2    Model of data access trajectory graph
                                                 图 2   数据访问轨迹图模型
                 2.1.1    输入准备
                    本文通过在原单体系统运行测试用例的方法收集数据、构建数据访问轨迹图,故需要准备以下输入信息.
                    (1)  测试用例:用户使用场景级别的测试用例,一个场景包含若干个界面输入或点击操作.用例数量没有
                        限制,但至少覆盖所有主要业务流程和功能.测试既可以通过运行自动化测试用例的方式,也可以通
                        过手动执行的方式实现;
                    (2)  用例权重:每个用户使用场景级别的测试用例对应一个用例权重,权重大小根据对应场景的重要度进
                        行设置,默认为 1.对于一些比较重要或者使用频率很高的业务场景,例如火车站订票系统的订票场
                        景、购物网站的下单流程,可以适当增加权重.
                    绝大多数情况下,获取以上信息所花费的时间要少于深入分析系统、构建领域模型的时间,且一个对系统
                 比较了解的开发人员、测试人员甚至系统管理人员就可以给出相对完整的信息,无需有架构设计的相关背景.
   143   144   145   146   147   148   149   150   151   152   153