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

丁丹  等:场景驱动且自底向上的单体系统微服务拆分方法                                                     3469


                    公式(14)的意义在于,对于连接同一个共享群组中两张表的边,保持一个比较大的权重,增加它们被划分到
                 同一个微服务的概率;而与共享表相连的其他边的权重削减为原来的 0.2 倍,降低该边相连的两张表被划分到
                 同一个微服务的可能性.经过调整的矩阵 M 将会作为数据表图的邻接矩阵成为下一步图聚类算法的输入.
                 2.2.3    数据表图聚类
                    图的聚类方法有很多种         [31−33] ,本文经过实验对比后,选择了 Girvan-Newman 算法(下文称 G-N 算法)        [34−36] 用
                 于数据表图的聚类,被聚到一起的表最后会被划分到同一个微服务中.作为一种经典的社区发现算法,G-N 算法
                 认为:社区网络的重要特性是连接两个社区的边会有更高的权重,如果将这些边找出来并删除,剩下的网络就被
                 很自然地划分为多个社区.为此,算法提出使用边介数(betweenness)作为衡量一条边是否应该从图中删除的标
                 准.一条边的边介数定义为网络中经过这条边的所有最短路径的数量.G-N 算法不断重复“计算边介数”与“删除
                 边介数最高的边”这两个步骤,直到图中所有边都被删除.每次删边后算法都会重新计算社区结构,最终会生成
                 一棵社区结构树(如图 7 所示),树的每一层对应一种对原网络的划分(partition),自顶部向下,社区数量会越来越
                 多,划分粒度越来越细,最后,每个顶点都是一个独立的社区.这种连续的、粒度逐步细化的树形结构正好适应于
                 微服务拆分过程,第 2.3 节所描述的“反馈调整”也是基于 G-N 算法的这种特性.





































                                            Fig.7    Partition process of database tables
                                                   图 7   数据表划分过程

                    为了从多种不同粒度的拆分方案中选择一个最合适的推荐方案,G-N 算法引入模块度(modularity)                           [36] 作为
                 衡量标准,其定义如式(15)所示.
                                                             c
                                                  Modularity =  (e − ∑  ii  a i 2 )                  (15)
                                                            i= 1
                    公式(15)中,e ii 表示社区 i 内所有边的权重占整个网络所有边权重的比例,a i 表示与社区 i 内顶点相连的所
                 有边的权重占整个网络所有顶点所连边的权重的比例.模块度的取值范围为[−0.5,1),值越大,说明网络具有越
   148   149   150   151   152   153   154   155   156   157   158