Page 71 - 《软件学报》2021年第5期
P. 71

李杉杉  等:一种优化的数据流驱动的微服务化拆分方法                                                      1295


                 3.2   评估流程
                    由于所选的案例规模不大,为了分析本文所提出的 DFD-A 方法相对于原本 DFD 方法的优化效果,本文选
                 择了一名熟练掌握软件工程领域基础知识和开发技能的研究人员 A 来主要负责两个方法在 Jpetstore 系统上的
                 应用.本文考虑并排除了一些可能会影响方法效率对比公平性的因素,比如选择不了解优化前的 DFD 方法的研
                 究人员;此外,本文安排了熟知并使用过 DFD 方法和 DFD-A 方法的研究人员 B,其负责对研究人员 A 在应用这
                 两个方法过程中所生成的制品和结果进行检查,以保证方法应用的准确性.
                                                           [3]
                    DFD 方法的应用依据的是第 1.2 节中介绍的流程 ,参与评估的研究人员基于业务逻辑和需求分析构建不
                 同层级(第 0 层和第 1 层)的数据流图.其中,第 0 层数据流图中的操作 P 6 和 P 9 在第 1 层的数据流图中分别被拆
                 分为两个更细粒度的操作 P 61 ,P 62 和 P 91 ,P 92 ;然后使用 DFD 方法中基于规则的算法对第 1 层的数据流图进行拆
                 分,最终得到了包含 4 个微服务的方案(见表 3).

                   Table 3    Decomposition results of the Level 1 data flow diagram of the case Jpetstore using the DFD method
                                  表 3   案例 Jpetstore 应用 DFD 方法对第 1 层数据流图的拆分结果

                       编号/名称                      语句集                      操作集            数据存储集
                                         {S12→P1,P2→S12,P2→S1,S1→P3,
                         MS 1                                            {P1,P2,P3,P4}   {S1,S2,S10 S12
                                                                                                ,
                                                                                                  }
                     AccountService      P4→S1,P2→S10,S10→P3,S2→P3}
                         MS 2               {S3→P5,S5→P5,S5→P61,         {P5 P61 P91     {S3,S5,S9,S13}
                                                                              ,
                                                                                 }
                                                                            ,
                      ProductService       S5→P91,S9→P5,S13→P91}
                         MS 3
                       CartService     {P62→S14,P7→S14,P8→S14,S14→P9}    {P62,P7,P8}        {S14}
                         MS 4          {S11→P91,P92→S11,P92→S6,S6→P10,    {P92 P10      {S4,S6,S7,S8,S11}
                                                                                }
                                                                             ,
                      OrderService   P92→S7,S7→P10,S8→P10,P92→S8,P92→S4}
                    DFD-A 方法应用过程中,首先设计覆盖系统功能的测试用例进行测试,以支持数据收集,然后部署 Pinpoint
                 监控环境,使用 Pinpoint Agent 对 Jpetstore 进行运行时的数据流信息采集,Pinpoint Collector 接收采集到的信息
                 存入 HBase 中,然后由本文开发的原型平台通过运行时数据收集插件远程连接本文改造后的 Pinpoint Web 接口
                 获取动态信息;在静态源码数据收集部分,使用源码数据收集插件分析上传的 Jpetstore JAR 包,通过 ASM 完成
                 对源码信息的静态特征分析,在源码数据收集时,提供了 Package 参数用于指定需要扫描的包路径;然后,平台会
                 对收集的数据流信息使用基于数据流的拆分服务插件进行业务操作和数据库表的拆分.由于该插件是本文优
                 化提出的两阶段的聚类算法(MST 和 K-means)的具体实现,因此需要输入依赖的参数,即 MST 中每个微服务类
                 阈值和预期微服务个数、K-means 中的中心点集合.此处由本文的研究者根据经验和对系统的理解设定了相关
                 参数,其中,MST 算法中,微服务类阈值为默认的最大值,预期微服务个数 n 设置为 3,4 和 5 这 3 种情况;K-means
                 算法中,数据库的中心点集合设为{S 1 ,S 7 ,S 9 }.具体实践过程中,架构师或相关决策者可以根据经验、需求以及系
                 统和组织结构的具体情况进行参数的设置和调整.其中,预期微服务个数同样设置为 4 的情况下,应用 DFD-A 方
                 法最终得到的微服务化拆分方案见表 4.
                              Table 4    Decomposition results of the case Jpetstore using the DFD-A method
                                         表 4  Jpetstore 案例应用 DFD-A 方法的拆分结果
                         微服务                                 类                              数据库表
                                           ik.am.jpetstore.domain.service.catalog.CatalogServiceImpl  Item
                                                ik.am.jpetstore.app.catalog.CatalogController  Product
                                                  ik.am.jpetstore.domain.model.Product      Category
                       ProductService
                                                   ik.am.jpetstore.domain.model.Item        Supplier
                                                 ik.am.jpetstore.domain.model.Category        −
                                               ik.am.jpetstore.app.catalog.ProductSearchForm   −
                                                  ik.am.jpetstore.domain.model.Order        Inventory
                                                 ik.am.jpetstore.app.order.OrderController  Sequence
                        OrderService              ik.am.jpetstore.app.order.OrderForm        Orders
                                                  ik.am.jpetstore.app.order.OrderHelper    Orderstatus
                                             ik.am.jpetstore.domain.service.order.OrderServiceImpl  Lineitem
   66   67   68   69   70   71   72   73   74   75   76